aioli-sdk 1.2.0.dev5__tar.gz → 1.2.0.dev7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/PKG-INFO +1 -1
  2. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/__version__.py +1 -1
  3. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/deployment.py +52 -3
  4. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/model.py +8 -2
  5. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/test/test_cli.py +88 -0
  6. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/common/util.py +4 -0
  7. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli_sdk.egg-info/PKG-INFO +1 -1
  8. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli_sdk.egg-info/SOURCES.txt +1 -0
  9. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/__init__.py +2 -1
  10. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/api/authentication_api.py +1 -1
  11. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/api/deployments_api.py +258 -7
  12. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/api/information_api.py +1 -1
  13. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/api/packaged_models_api.py +4 -4
  14. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/api/registries_api.py +4 -4
  15. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/api/roles_api.py +1 -1
  16. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/api/templates_api.py +1 -1
  17. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/api/tokens_api.py +4 -4
  18. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/api/users_api.py +1 -1
  19. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/api_client.py +1 -1
  20. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/configuration.py +2 -2
  21. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/exceptions.py +1 -1
  22. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/__init__.py +2 -1
  23. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/auto_scaling_template.py +1 -1
  24. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/autoscaling.py +1 -1
  25. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/configuration_resources.py +1 -1
  26. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/deployment.py +1 -1
  27. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/deployment_model_version.py +1 -1
  28. aioli_sdk-1.2.0.dev7/aiolirest/models/deployment_priority.py +91 -0
  29. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/deployment_request.py +1 -1
  30. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/deployment_state.py +1 -1
  31. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/deployment_token.py +1 -1
  32. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/deployment_token_patch_request.py +1 -1
  33. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/deployment_token_request.py +1 -1
  34. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/error_response.py +1 -1
  35. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/event_info.py +1 -1
  36. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/failure_info.py +1 -1
  37. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/login_request.py +1 -1
  38. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/login_response.py +1 -1
  39. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/model_auth_token.py +1 -1
  40. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/model_response.py +1 -1
  41. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/observability.py +1 -1
  42. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/packaged_model.py +1 -1
  43. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/packaged_model_request.py +1 -1
  44. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/resource_profile.py +1 -1
  45. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/resources_template.py +1 -1
  46. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/role.py +1 -1
  47. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/role_assignment.py +1 -1
  48. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/role_assignments.py +1 -1
  49. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/security.py +1 -1
  50. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/success_response.py +1 -1
  51. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/trained_model_registry.py +1 -1
  52. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/trained_model_registry_request.py +1 -1
  53. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/user.py +1 -1
  54. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/user_patch_request.py +1 -1
  55. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/models/user_request.py +1 -1
  56. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/rest.py +1 -1
  57. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/setup.py +1 -1
  58. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/README.md +0 -0
  59. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/__init__.py +0 -0
  60. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/__init__.py +0 -0
  61. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/__main__.py +0 -0
  62. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/_util.py +0 -0
  63. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/cli.py +0 -0
  64. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/errors.py +0 -0
  65. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/registry.py +0 -0
  66. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/render.py +0 -0
  67. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/role.py +0 -0
  68. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/sso.py +0 -0
  69. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/test/conftest.py +0 -0
  70. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/token.py +0 -0
  71. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/user.py +0 -0
  72. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/cli/version.py +0 -0
  73. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/common/__init__.py +0 -0
  74. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/common/api/__init__.py +0 -0
  75. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/common/api/_util.py +0 -0
  76. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/common/api/authentication.py +0 -0
  77. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/common/api/certs.py +0 -0
  78. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/common/api/errors.py +0 -0
  79. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/common/api/request.py +0 -0
  80. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/common/check.py +0 -0
  81. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/common/constants.py +0 -0
  82. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/common/declarative_argparse.py +0 -0
  83. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/common/requests.py +0 -0
  84. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli/util.py +0 -0
  85. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli_sdk.egg-info/dependency_links.txt +0 -0
  86. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli_sdk.egg-info/entry_points.txt +0 -0
  87. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli_sdk.egg-info/not-zip-safe +0 -0
  88. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli_sdk.egg-info/requires.txt +0 -0
  89. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aioli_sdk.egg-info/top_level.txt +0 -0
  90. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/api/__init__.py +0 -0
  91. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/api_response.py +0 -0
  92. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/aiolirest/py.typed +0 -0
  93. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/pyproject.toml +0 -0
  94. {aioli_sdk-1.2.0.dev5 → aioli_sdk-1.2.0.dev7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: aioli-sdk
3
- Version: 1.2.0.dev5
3
+ Version: 1.2.0.dev7
4
4
  Summary: Aioli (AI OnLine Inference), a platform for deploying AI models at scale.
5
5
  Home-page: https://github.com/determined-ai/aioli
6
6
  Author: HPE AI Solutions
@@ -1,2 +1,2 @@
1
1
  # © Copyright 2024 Hewlett Packard Enterprise Development LP
2
- __version__ = "1.2.0-dev5"
2
+ __version__ = "1.2.0-dev7"
@@ -1,7 +1,7 @@
1
1
  # © Copyright 2023-2024 Hewlett Packard Enterprise Development LP
2
2
  import textwrap
3
3
  from argparse import Namespace
4
- from typing import Any, List
4
+ from typing import Any, Dict, List
5
5
 
6
6
  import aiolirest
7
7
  from aioli import cli
@@ -184,6 +184,8 @@ def create(args: Namespace) -> None:
184
184
  canaryTrafficPercent=args.canary_traffic_percent,
185
185
  environment=construct_environment(args),
186
186
  arguments=construct_arguments(args),
187
+ nodeSelectors=construct_node_selectors(args),
188
+ priorityClassName=args.priority_class_name,
187
189
  )
188
190
  api_instance.deployments_post(r)
189
191
 
@@ -208,6 +210,10 @@ def update(args: Namespace) -> None:
208
210
  autoScaling=found.auto_scaling,
209
211
  canaryTrafficPercent=found.canary_traffic_percent,
210
212
  goalStatus=found.goal_status,
213
+ environment=found.environment,
214
+ arguments=found.arguments,
215
+ nodeSelectors=found.node_selectors,
216
+ priorityClassName=found.priority_class_name,
211
217
  )
212
218
 
213
219
  if request.auto_scaling is None:
@@ -258,6 +264,12 @@ def update(args: Namespace) -> None:
258
264
  if args.arg is not None:
259
265
  request.arguments = construct_arguments(args)
260
266
 
267
+ if args.node_selector is not None:
268
+ request.node_selectors = construct_node_selectors(args)
269
+
270
+ if args.priority_class_name is not None:
271
+ request.priority_class_name = args.priority_class_name
272
+
261
273
  headers = {"Content-Type": "application/json"}
262
274
  assert found.id is not None
263
275
  api_instance.deployments_id_put(found.id, request, _headers=headers)
@@ -318,6 +330,24 @@ def str2bool(v: str) -> bool:
318
330
  )
319
331
 
320
332
 
333
+ def construct_node_selectors(args: Namespace) -> Dict[str, str]:
334
+ node_selectors: Dict[str, str] = {}
335
+ if args.node_selector is None:
336
+ return node_selectors
337
+
338
+ for entry in args.node_selector:
339
+ if entry is None:
340
+ continue
341
+ # split to label & value
342
+ the_split = entry.split("=", maxsplit=1)
343
+ label: str = the_split[0]
344
+ value: str = ""
345
+ if len(the_split) > 1:
346
+ value = the_split[1]
347
+ node_selectors[label] = value
348
+ return node_selectors
349
+
350
+
321
351
  common_deployment_args: ArgsDescription = [
322
352
  Arg(
323
353
  "--authentication-required",
@@ -345,17 +375,36 @@ common_deployment_args: ArgsDescription = [
345
375
  Arg(
346
376
  "-a",
347
377
  "--arg",
378
+ nargs="?",
348
379
  help="Argument to be added to the service command line. "
349
- "If specifying an argument that starts with a '-', use the form --arg=<your-argument>",
380
+ "If specifying an argument that starts with a '-', use the form --arg=<your-argument>. "
381
+ "Specifying any --arg replaces prior args with the arguments on this invocation. "
382
+ "Use a single --arg with no value to clear all arguments.",
350
383
  action="append",
351
384
  ),
352
385
  Arg(
353
386
  "-e",
354
387
  "--env",
388
+ nargs="?",
355
389
  help="Specifies an environment variable & value as name=value, "
356
- "to be passed to the launched container",
390
+ "to be passed to the launched container. "
391
+ "Specifying any --env replaces prior environment vars with those on this invocation. "
392
+ "Use a single --env with no value to clear all environment vars.",
357
393
  action="append",
358
394
  ),
395
+ Arg(
396
+ "--node-selector",
397
+ nargs="?",
398
+ help="Specifies a node selector label & value as label=value, "
399
+ "to be passed to the launched container. Example kubernetes.io/arch=amd64. "
400
+ "Specifying any --node-selector replaces prior selectors with those on this invocation. "
401
+ "Use a single --node-selector with no value to clear all selectors.",
402
+ action="append",
403
+ ),
404
+ Arg(
405
+ "--priority-class-name",
406
+ help="Priority Class Name to be used for prioritization of deployments",
407
+ ),
359
408
  ]
360
409
 
361
410
  main_cmd = Cmd(
@@ -343,15 +343,21 @@ common_model_args: ArgsDescription = [
343
343
  Arg(
344
344
  "-a",
345
345
  "--arg",
346
+ nargs="?",
346
347
  help="Argument to be added to the service command line. "
347
- "If specifying an argument that starts with a '-', use the form --arg=<your-argument>",
348
+ "If specifying an argument that starts with a '-', use the form --arg=<your-argument>. "
349
+ "Specifying any --arg replaces prior args with the arguments on this invocation. "
350
+ "Use a single --arg with no value to clear all arguments.",
348
351
  action="append",
349
352
  ),
350
353
  Arg(
351
354
  "-e",
352
355
  "--env",
356
+ nargs="?",
353
357
  help="Specifies an environment variable & value as name=value, "
354
- "to be passed to the launched container",
358
+ "to be passed to the launched container. "
359
+ "Specifying any --env replaces prior environment vars with those on this invocation. "
360
+ "Use a single --env with no value to clear all environment vars.",
355
361
  action="append",
356
362
  ),
357
363
  Arg("--gpu-type", help="GPU type required"),
@@ -597,6 +597,7 @@ class TestCli:
597
597
  expected = (
598
598
  '[\n' # noqa: Q000
599
599
  ' {\n' # noqa: Q000
600
+ ' "arguments": [],\n'
600
601
  ' "autoScaling": {\n'
601
602
  ' "maxReplicas": 1,\n'
602
603
  ' "metric": "concurrency",\n'
@@ -652,6 +653,8 @@ class TestCli:
652
653
  "--canary-traffic-percent 20 "
653
654
  "-a='--debug' "
654
655
  "-e MODS=SOME "
656
+ "--node-selector kubernetes.io/arch=amd64 "
657
+ "--priority-class-name '' "
655
658
  "iris-tf-keras-deployment-2"
656
659
  )
657
660
  == 0
@@ -701,6 +704,7 @@ class TestCli:
701
704
  result_list = result.split("\n")
702
705
  args_found = False
703
706
  other_found = False
707
+ node_selector_found = False
704
708
  for line in result_list:
705
709
  if "- --updated" in line:
706
710
  args_found = True
@@ -708,10 +712,94 @@ class TestCli:
708
712
  mods_found = True
709
713
  if "OTHER: VALUE" in line:
710
714
  other_found = True
715
+ if "kubernetes.io/arch: amd64" in line:
716
+ node_selector_found = True
711
717
 
712
718
  assert args_found
713
719
  assert mods_found
714
720
  assert other_found
721
+ assert node_selector_found
722
+
723
+ def test_deployment_update_node_selectors(self, setup_login: None) -> None:
724
+ # Update the deployments nodeSelectors check that changes
725
+ # were made. Also verify arguments and environment are preserved.
726
+ assert (
727
+ os.system(
728
+ "aioli deployment update "
729
+ "--node-selector x/y=a-b "
730
+ "--node-selector x/z=a-c "
731
+ "iris-tf-keras-deployment-2"
732
+ )
733
+ == 0
734
+ )
735
+
736
+ result = subprocess.check_output(
737
+ ["aioli", "deployment", "show", "iris-tf-keras-deployment-2"]
738
+ ).decode("utf-8")
739
+ result_list = result.split("\n")
740
+ args_found = False
741
+ other_found = False
742
+ prev_node_selector_not_found = True
743
+ node_selector_1_found = False
744
+ node_selector_2_found = False
745
+ for line in result_list:
746
+ if "- --updated" in line:
747
+ args_found = True
748
+ if "MODS: UPDATED" in line:
749
+ mods_found = True
750
+ if "OTHER: VALUE" in line:
751
+ other_found = True
752
+ if "kubernetes.io/arch: amd64" in line:
753
+ prev_node_selector_not_found = False
754
+ if "x/y: a-b" in line:
755
+ node_selector_1_found = True
756
+ if "x/z: a-c" in line:
757
+ node_selector_2_found = True
758
+ assert args_found
759
+ assert mods_found
760
+ assert other_found
761
+ assert node_selector_1_found
762
+ assert node_selector_2_found
763
+ assert prev_node_selector_not_found
764
+
765
+ def test_deployment_clear_env_args_node_selectors(self, setup_login: None) -> None:
766
+ # Update the deployments and clear env/args/node_selectors
767
+ assert (
768
+ os.system(
769
+ "aioli deployment update "
770
+ "iris-tf-keras-deployment-2 "
771
+ "--env "
772
+ "--arg "
773
+ "--node-selector"
774
+ )
775
+ == 0
776
+ )
777
+
778
+ result = subprocess.check_output(
779
+ ["aioli", "deployment", "show", "iris-tf-keras-deployment-2"]
780
+ ).decode("utf-8")
781
+ result_list = result.split("\n")
782
+ args_not_found = True
783
+ mods_not_found = True
784
+ other_not_found = True
785
+ node_selector_1_not_found = True
786
+ node_selector_2_not_found = True
787
+ for line in result_list:
788
+ if "- --updated" in line:
789
+ args_not_found = False
790
+ if "MODS: UPDATED" in line:
791
+ mods_not_found = False
792
+ if "OTHER: VALUE" in line:
793
+ other_not_found = False
794
+ if "x/y: a-b" in line:
795
+ node_selector_1_not_found = False
796
+ if "x/z: a-c" in line:
797
+ node_selector_2_not_found = False
798
+ assert args_not_found
799
+ assert mods_not_found
800
+ assert other_not_found
801
+ assert node_selector_1_not_found
802
+ assert node_selector_2_not_found
715
803
 
716
804
  def test_deployment_delete(self, setup_login: None) -> None:
717
805
  assert os.system("aioli deployment delete iris-tf-keras-deployment") == 0
@@ -154,6 +154,8 @@ def construct_environment(args: Namespace) -> Dict[str, str]:
154
154
  return environment
155
155
 
156
156
  for entry in args.env:
157
+ if entry is None:
158
+ continue
157
159
  # split to name & value
158
160
  the_split = entry.split("=", maxsplit=1)
159
161
  name: str = the_split[0]
@@ -170,5 +172,7 @@ def construct_arguments(args: Namespace) -> List[str]:
170
172
  return arguments
171
173
 
172
174
  for entry in args.arg:
175
+ if entry is None:
176
+ continue
173
177
  arguments.append(entry.strip())
174
178
  return arguments
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: aioli-sdk
3
- Version: 1.2.0.dev5
3
+ Version: 1.2.0.dev7
4
4
  Summary: Aioli (AI OnLine Inference), a platform for deploying AI models at scale.
5
5
  Home-page: https://github.com/determined-ai/aioli
6
6
  Author: HPE AI Solutions
@@ -62,6 +62,7 @@ aiolirest/models/autoscaling.py
62
62
  aiolirest/models/configuration_resources.py
63
63
  aiolirest/models/deployment.py
64
64
  aiolirest/models/deployment_model_version.py
65
+ aiolirest/models/deployment_priority.py
65
66
  aiolirest/models/deployment_request.py
66
67
  aiolirest/models/deployment_state.py
67
68
  aiolirest/models/deployment_token.py
@@ -7,7 +7,7 @@
7
7
 
8
8
  HPE MLIS is *Aioli* -- The AI On-line Inference Platform that enables easy deployment, tracking, and serving of your packaged models regardless of your preferred AI framework.
9
9
 
10
- The version of the OpenAPI document: 1.2.0-dev5
10
+ The version of the OpenAPI document: 1.2.0-dev7
11
11
  Contact: community@determined-ai
12
12
  Generated by OpenAPI Generator (https://openapi-generator.tech)
13
13
 
@@ -45,6 +45,7 @@ from aiolirest.models.autoscaling import Autoscaling
45
45
  from aiolirest.models.configuration_resources import ConfigurationResources
46
46
  from aiolirest.models.deployment import Deployment
47
47
  from aiolirest.models.deployment_model_version import DeploymentModelVersion
48
+ from aiolirest.models.deployment_priority import DeploymentPriority
48
49
  from aiolirest.models.deployment_request import DeploymentRequest
49
50
  from aiolirest.models.deployment_state import DeploymentState
50
51
  from aiolirest.models.deployment_token import DeploymentToken
@@ -5,7 +5,7 @@
5
5
 
6
6
  HPE MLIS is *Aioli* -- The AI On-line Inference Platform that enables easy deployment, tracking, and serving of your packaged models regardless of your preferred AI framework.
7
7
 
8
- The version of the OpenAPI document: 1.2.0-dev5
8
+ The version of the OpenAPI document: 1.2.0-dev7
9
9
  Contact: community@determined-ai
10
10
  Generated by OpenAPI Generator (https://openapi-generator.tech)
11
11
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  HPE MLIS is *Aioli* -- The AI On-line Inference Platform that enables easy deployment, tracking, and serving of your packaged models regardless of your preferred AI framework.
7
7
 
8
- The version of the OpenAPI document: 1.2.0-dev5
8
+ The version of the OpenAPI document: 1.2.0-dev7
9
9
  Contact: community@determined-ai
10
10
  Generated by OpenAPI Generator (https://openapi-generator.tech)
11
11
 
@@ -31,6 +31,7 @@ from pydantic import StrictStr
31
31
  from typing import List, Optional
32
32
 
33
33
  from aiolirest.models.deployment import Deployment
34
+ from aiolirest.models.deployment_priority import DeploymentPriority
34
35
  from aiolirest.models.deployment_request import DeploymentRequest
35
36
  from aiolirest.models.event_info import EventInfo
36
37
  from aiolirest.models.observability import Observability
@@ -73,7 +74,7 @@ class DeploymentsApi:
73
74
  ) -> List[Deployment]:
74
75
  """Get all deployments.
75
76
 
76
- Return the properties of all configured deployments.
77
+ Return the properties of all configured deployments. Results are sorted by modifiedAt descending.
77
78
 
78
79
  :param last_event: Include the most recent event for each deployment when available.
79
80
  :type last_event: str
@@ -142,7 +143,7 @@ class DeploymentsApi:
142
143
  ) -> ApiResponse[List[Deployment]]:
143
144
  """Get all deployments.
144
145
 
145
- Return the properties of all configured deployments.
146
+ Return the properties of all configured deployments. Results are sorted by modifiedAt descending.
146
147
 
147
148
  :param last_event: Include the most recent event for each deployment when available.
148
149
  :type last_event: str
@@ -211,7 +212,7 @@ class DeploymentsApi:
211
212
  ) -> RESTResponseType:
212
213
  """Get all deployments.
213
214
 
214
- Return the properties of all configured deployments.
215
+ Return the properties of all configured deployments. Results are sorted by modifiedAt descending.
215
216
 
216
217
  :param last_event: Include the most recent event for each deployment when available.
217
218
  :type last_event: str
@@ -1729,7 +1730,7 @@ class DeploymentsApi:
1729
1730
  _headers: Optional[Dict[StrictStr, Any]] = None,
1730
1731
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1731
1732
  ) -> List[str]:
1732
- """Get all namespaces that can be selected for deployemnts.
1733
+ """Get all namespaces that can be selected for deployments.
1733
1734
 
1734
1735
  List of namespace names.
1735
1736
 
@@ -1794,7 +1795,7 @@ class DeploymentsApi:
1794
1795
  _headers: Optional[Dict[StrictStr, Any]] = None,
1795
1796
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1796
1797
  ) -> ApiResponse[List[str]]:
1797
- """Get all namespaces that can be selected for deployemnts.
1798
+ """Get all namespaces that can be selected for deployments.
1798
1799
 
1799
1800
  List of namespace names.
1800
1801
 
@@ -1859,7 +1860,7 @@ class DeploymentsApi:
1859
1860
  _headers: Optional[Dict[StrictStr, Any]] = None,
1860
1861
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1861
1862
  ) -> RESTResponseType:
1862
- """Get all namespaces that can be selected for deployemnts.
1863
+ """Get all namespaces that can be selected for deployments.
1863
1864
 
1864
1865
  List of namespace names.
1865
1866
 
@@ -2242,3 +2243,253 @@ class DeploymentsApi:
2242
2243
  )
2243
2244
 
2244
2245
 
2246
+
2247
+
2248
+ @validate_call
2249
+ def deployments_priorities_get(
2250
+ self,
2251
+ _request_timeout: Union[
2252
+ None,
2253
+ Annotated[StrictFloat, Field(gt=0)],
2254
+ Tuple[
2255
+ Annotated[StrictFloat, Field(gt=0)],
2256
+ Annotated[StrictFloat, Field(gt=0)]
2257
+ ]
2258
+ ] = None,
2259
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2260
+ _content_type: Optional[StrictStr] = None,
2261
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2262
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2263
+ ) -> List[DeploymentPriority]:
2264
+ """Get all priority classes that can be selected for deployments.
2265
+
2266
+ List of priority classes.
2267
+
2268
+ :param _request_timeout: timeout setting for this request. If one
2269
+ number provided, it will be total request
2270
+ timeout. It can also be a pair (tuple) of
2271
+ (connection, read) timeouts.
2272
+ :type _request_timeout: int, tuple(int, int), optional
2273
+ :param _request_auth: set to override the auth_settings for an a single
2274
+ request; this effectively ignores the
2275
+ authentication in the spec for a single request.
2276
+ :type _request_auth: dict, optional
2277
+ :param _content_type: force content-type for the request.
2278
+ :type _content_type: str, Optional
2279
+ :param _headers: set to override the headers for a single
2280
+ request; this effectively ignores the headers
2281
+ in the spec for a single request.
2282
+ :type _headers: dict, optional
2283
+ :param _host_index: set to override the host_index for a single
2284
+ request; this effectively ignores the host_index
2285
+ in the spec for a single request.
2286
+ :type _host_index: int, optional
2287
+ :return: Returns the result object.
2288
+ """ # noqa: E501
2289
+
2290
+ _param = self._deployments_priorities_get_serialize(
2291
+ _request_auth=_request_auth,
2292
+ _content_type=_content_type,
2293
+ _headers=_headers,
2294
+ _host_index=_host_index
2295
+ )
2296
+
2297
+ _response_types_map: Dict[str, Optional[str]] = {
2298
+ '200': "List[DeploymentPriority]",
2299
+ '500': "ErrorResponse"
2300
+
2301
+ }
2302
+ response_data = self.api_client.call_api(
2303
+ *_param,
2304
+ _request_timeout=_request_timeout
2305
+ )
2306
+ response_data.read()
2307
+ return self.api_client.response_deserialize(
2308
+ response_data=response_data,
2309
+ response_types_map=_response_types_map,
2310
+ ).data
2311
+
2312
+
2313
+ @validate_call
2314
+ def deployments_priorities_get_with_http_info(
2315
+ self,
2316
+ _request_timeout: Union[
2317
+ None,
2318
+ Annotated[StrictFloat, Field(gt=0)],
2319
+ Tuple[
2320
+ Annotated[StrictFloat, Field(gt=0)],
2321
+ Annotated[StrictFloat, Field(gt=0)]
2322
+ ]
2323
+ ] = None,
2324
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2325
+ _content_type: Optional[StrictStr] = None,
2326
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2327
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2328
+ ) -> ApiResponse[List[DeploymentPriority]]:
2329
+ """Get all priority classes that can be selected for deployments.
2330
+
2331
+ List of priority classes.
2332
+
2333
+ :param _request_timeout: timeout setting for this request. If one
2334
+ number provided, it will be total request
2335
+ timeout. It can also be a pair (tuple) of
2336
+ (connection, read) timeouts.
2337
+ :type _request_timeout: int, tuple(int, int), optional
2338
+ :param _request_auth: set to override the auth_settings for an a single
2339
+ request; this effectively ignores the
2340
+ authentication in the spec for a single request.
2341
+ :type _request_auth: dict, optional
2342
+ :param _content_type: force content-type for the request.
2343
+ :type _content_type: str, Optional
2344
+ :param _headers: set to override the headers for a single
2345
+ request; this effectively ignores the headers
2346
+ in the spec for a single request.
2347
+ :type _headers: dict, optional
2348
+ :param _host_index: set to override the host_index for a single
2349
+ request; this effectively ignores the host_index
2350
+ in the spec for a single request.
2351
+ :type _host_index: int, optional
2352
+ :return: Returns the result object.
2353
+ """ # noqa: E501
2354
+
2355
+ _param = self._deployments_priorities_get_serialize(
2356
+ _request_auth=_request_auth,
2357
+ _content_type=_content_type,
2358
+ _headers=_headers,
2359
+ _host_index=_host_index
2360
+ )
2361
+
2362
+ _response_types_map: Dict[str, Optional[str]] = {
2363
+ '200': "List[DeploymentPriority]",
2364
+ '500': "ErrorResponse"
2365
+
2366
+ }
2367
+ response_data = self.api_client.call_api(
2368
+ *_param,
2369
+ _request_timeout=_request_timeout
2370
+ )
2371
+ response_data.read()
2372
+ return self.api_client.response_deserialize(
2373
+ response_data=response_data,
2374
+ response_types_map=_response_types_map,
2375
+ )
2376
+
2377
+
2378
+ @validate_call
2379
+ def deployments_priorities_get_without_preload_content(
2380
+ self,
2381
+ _request_timeout: Union[
2382
+ None,
2383
+ Annotated[StrictFloat, Field(gt=0)],
2384
+ Tuple[
2385
+ Annotated[StrictFloat, Field(gt=0)],
2386
+ Annotated[StrictFloat, Field(gt=0)]
2387
+ ]
2388
+ ] = None,
2389
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2390
+ _content_type: Optional[StrictStr] = None,
2391
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2392
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2393
+ ) -> RESTResponseType:
2394
+ """Get all priority classes that can be selected for deployments.
2395
+
2396
+ List of priority classes.
2397
+
2398
+ :param _request_timeout: timeout setting for this request. If one
2399
+ number provided, it will be total request
2400
+ timeout. It can also be a pair (tuple) of
2401
+ (connection, read) timeouts.
2402
+ :type _request_timeout: int, tuple(int, int), optional
2403
+ :param _request_auth: set to override the auth_settings for an a single
2404
+ request; this effectively ignores the
2405
+ authentication in the spec for a single request.
2406
+ :type _request_auth: dict, optional
2407
+ :param _content_type: force content-type for the request.
2408
+ :type _content_type: str, Optional
2409
+ :param _headers: set to override the headers for a single
2410
+ request; this effectively ignores the headers
2411
+ in the spec for a single request.
2412
+ :type _headers: dict, optional
2413
+ :param _host_index: set to override the host_index for a single
2414
+ request; this effectively ignores the host_index
2415
+ in the spec for a single request.
2416
+ :type _host_index: int, optional
2417
+ :return: Returns the result object.
2418
+ """ # noqa: E501
2419
+
2420
+ _param = self._deployments_priorities_get_serialize(
2421
+ _request_auth=_request_auth,
2422
+ _content_type=_content_type,
2423
+ _headers=_headers,
2424
+ _host_index=_host_index
2425
+ )
2426
+
2427
+ _response_types_map: Dict[str, Optional[str]] = {
2428
+ '200': "List[DeploymentPriority]",
2429
+ '500': "ErrorResponse"
2430
+
2431
+ }
2432
+ response_data = self.api_client.call_api(
2433
+ *_param,
2434
+ _request_timeout=_request_timeout
2435
+ )
2436
+ return response_data.response
2437
+
2438
+
2439
+ def _deployments_priorities_get_serialize(
2440
+ self,
2441
+ _request_auth,
2442
+ _content_type,
2443
+ _headers,
2444
+ _host_index,
2445
+ ) -> Tuple:
2446
+
2447
+ _host = None
2448
+
2449
+ _collection_formats: Dict[str, str] = {
2450
+
2451
+ }
2452
+
2453
+ _path_params: Dict[str, str] = {}
2454
+ _query_params: List[Tuple[str, str]] = []
2455
+ _header_params: Dict[str, Optional[str]] = _headers or {}
2456
+ _form_params: List[Tuple[str, str]] = []
2457
+ _files: Dict[str, str] = {}
2458
+ _body_params: Optional[bytes] = None
2459
+
2460
+ # process the path parameters
2461
+ # process the query parameters
2462
+ # process the header parameters
2463
+ # process the form parameters
2464
+ # process the body parameter
2465
+
2466
+
2467
+ # set the HTTP header `Accept`
2468
+ _header_params['Accept'] = self.api_client.select_header_accept(
2469
+ [
2470
+ '*/*'
2471
+ ]
2472
+ )
2473
+
2474
+
2475
+ # authentication setting
2476
+ _auth_settings: List[str] = [
2477
+ 'ApiKeyAuth'
2478
+ ]
2479
+
2480
+ return self.api_client.param_serialize(
2481
+ method='GET',
2482
+ resource_path='/deployments/priorities',
2483
+ path_params=_path_params,
2484
+ query_params=_query_params,
2485
+ header_params=_header_params,
2486
+ body=_body_params,
2487
+ post_params=_form_params,
2488
+ files=_files,
2489
+ auth_settings=_auth_settings,
2490
+ collection_formats=_collection_formats,
2491
+ _host=_host,
2492
+ _request_auth=_request_auth
2493
+ )
2494
+
2495
+
@@ -5,7 +5,7 @@
5
5
 
6
6
  HPE MLIS is *Aioli* -- The AI On-line Inference Platform that enables easy deployment, tracking, and serving of your packaged models regardless of your preferred AI framework.
7
7
 
8
- The version of the OpenAPI document: 1.2.0-dev5
8
+ The version of the OpenAPI document: 1.2.0-dev7
9
9
  Contact: community@determined-ai
10
10
  Generated by OpenAPI Generator (https://openapi-generator.tech)
11
11