lightning-sdk 2025.12.9__py3-none-any.whl → 2025.12.17__py3-none-any.whl

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 (78) hide show
  1. lightning_sdk/__version__.py +1 -1
  2. lightning_sdk/api/job_api.py +16 -0
  3. lightning_sdk/api/org_api.py +7 -0
  4. lightning_sdk/api/studio_api.py +28 -3
  5. lightning_sdk/api/teamspace_api.py +42 -5
  6. lightning_sdk/api/user_api.py +5 -0
  7. lightning_sdk/cli/legacy/download.py +2 -1
  8. lightning_sdk/cli/legacy/studios_menu.py +8 -1
  9. lightning_sdk/job/base.py +26 -4
  10. lightning_sdk/job/job.py +16 -5
  11. lightning_sdk/job/v1.py +7 -2
  12. lightning_sdk/job/v2.py +41 -1
  13. lightning_sdk/lightning_cloud/openapi/__init__.py +26 -1
  14. lightning_sdk/lightning_cloud/openapi/api/__init__.py +1 -0
  15. lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +5 -1
  16. lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +517 -0
  17. lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +5 -1
  18. lightning_sdk/lightning_cloud/openapi/api/file_system_service_api.py +11 -11
  19. lightning_sdk/lightning_cloud/openapi/api/kubernetes_virtual_machine_service_api.py +557 -0
  20. lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +5 -1
  21. lightning_sdk/lightning_cloud/openapi/models/__init__.py +25 -1
  22. lightning_sdk/lightning_cloud/openapi/models/cloud_space_environment_template_service_update_cloud_space_environment_template_body.py +27 -1
  23. lightning_sdk/lightning_cloud/openapi/models/cluster_service_add_container_registry_body.py +123 -0
  24. lightning_sdk/lightning_cloud/openapi/models/cluster_service_create_machine_body.py +27 -1
  25. lightning_sdk/lightning_cloud/openapi/models/cluster_service_refresh_container_registry_credentials_body.py +97 -0
  26. lightning_sdk/lightning_cloud/openapi/models/cluster_service_validate_container_registry_body.py +97 -0
  27. lightning_sdk/lightning_cloud/openapi/models/kubernetes_virtual_machine_service_create_kubernetes_virtual_machine_body.py +513 -0
  28. lightning_sdk/lightning_cloud/openapi/models/kubernetes_virtual_machine_service_update_kubernetes_virtual_machine_body.py +97 -0
  29. lightning_sdk/lightning_cloud/openapi/models/v1_add_container_registry_response.py +123 -0
  30. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_template_config.py +27 -1
  31. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_specialized_view.py +1 -0
  32. lightning_sdk/lightning_cloud/openapi/models/v1_container_registry.py +253 -0
  33. lightning_sdk/lightning_cloud/openapi/models/v1_container_registry_info.py +281 -0
  34. lightning_sdk/lightning_cloud/openapi/models/v1_container_registry_integration.py +123 -0
  35. lightning_sdk/lightning_cloud/openapi/models/v1_container_registry_status.py +105 -0
  36. lightning_sdk/lightning_cloud/openapi/models/v1_create_cloud_space_environment_template_request.py +27 -1
  37. lightning_sdk/lightning_cloud/openapi/models/v1_delete_container_registry_response.py +97 -0
  38. lightning_sdk/lightning_cloud/openapi/models/v1_delete_kubernetes_virtual_machine_response.py +97 -0
  39. lightning_sdk/lightning_cloud/openapi/models/v1_ecr_registry_config.py +175 -0
  40. lightning_sdk/lightning_cloud/openapi/models/v1_ecr_registry_config_input.py +123 -0
  41. lightning_sdk/lightning_cloud/openapi/models/v1_ecr_registry_details.py +201 -0
  42. lightning_sdk/lightning_cloud/openapi/models/v1_get_artifacts_page_response.py +29 -3
  43. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +27 -1
  44. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1.py +53 -1
  45. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_virtual_machine.py +383 -0
  46. lightning_sdk/lightning_cloud/openapi/models/v1_kubevirt_config.py +305 -0
  47. lightning_sdk/lightning_cloud/openapi/models/v1_kubevirt_provider_configuration.py +227 -0
  48. lightning_sdk/lightning_cloud/openapi/models/v1_kubevirt_vm_configuration.py +149 -0
  49. lightning_sdk/lightning_cloud/openapi/models/v1_kubevirt_vm_resources.py +201 -0
  50. lightning_sdk/lightning_cloud/openapi/models/v1_list_container_registries_response.py +123 -0
  51. lightning_sdk/lightning_cloud/openapi/models/v1_list_kubernetes_virtual_machines_response.py +123 -0
  52. lightning_sdk/lightning_cloud/openapi/models/v1_machine.py +27 -1
  53. lightning_sdk/lightning_cloud/openapi/models/v1_node_metrics.py +27 -1
  54. lightning_sdk/lightning_cloud/openapi/models/v1_refresh_container_registry_credentials_response.py +123 -0
  55. lightning_sdk/lightning_cloud/openapi/models/v1_search_user.py +27 -1
  56. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +79 -1
  57. lightning_sdk/lightning_cloud/openapi/models/v1_validate_container_registry_response.py +149 -0
  58. lightning_sdk/lightning_cloud/openapi/rest.py +2 -2
  59. lightning_sdk/machine.py +1 -0
  60. lightning_sdk/mmt/base.py +26 -7
  61. lightning_sdk/mmt/mmt.py +11 -6
  62. lightning_sdk/mmt/v1.py +5 -2
  63. lightning_sdk/mmt/v2.py +5 -2
  64. lightning_sdk/organization.py +10 -1
  65. lightning_sdk/owner.py +4 -0
  66. lightning_sdk/pipeline/steps.py +3 -0
  67. lightning_sdk/plugin.py +2 -2
  68. lightning_sdk/studio.py +33 -2
  69. lightning_sdk/teamspace.py +44 -4
  70. lightning_sdk/user.py +22 -2
  71. lightning_sdk/utils/resolve.py +9 -7
  72. {lightning_sdk-2025.12.9.dist-info → lightning_sdk-2025.12.17.dist-info}/METADATA +1 -1
  73. {lightning_sdk-2025.12.9.dist-info → lightning_sdk-2025.12.17.dist-info}/RECORD +78 -53
  74. /lightning_sdk/lightning_cloud/openapi/models/{v1_list_filesystem_mm_ts_response.py → v1_list_filesystem_mmts_response.py} +0 -0
  75. {lightning_sdk-2025.12.9.dist-info → lightning_sdk-2025.12.17.dist-info}/LICENSE +0 -0
  76. {lightning_sdk-2025.12.9.dist-info → lightning_sdk-2025.12.17.dist-info}/WHEEL +0 -0
  77. {lightning_sdk-2025.12.9.dist-info → lightning_sdk-2025.12.17.dist-info}/entry_points.txt +0 -0
  78. {lightning_sdk-2025.12.9.dist-info → lightning_sdk-2025.12.17.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,123 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ external/v1/auth_service.proto
5
+
6
+ No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501
7
+
8
+ OpenAPI spec version: version not set
9
+
10
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
11
+
12
+ NOTE
13
+ ----
14
+ standard swagger-codegen-cli for this python client has been modified
15
+ by custom templates. The purpose of these templates is to include
16
+ typing information in the API and Model code. Please refer to the
17
+ main grid repository for more info
18
+ """
19
+
20
+ import pprint
21
+ import re # noqa: F401
22
+
23
+ from typing import TYPE_CHECKING
24
+
25
+ import six
26
+
27
+ if TYPE_CHECKING:
28
+ from datetime import datetime
29
+ from lightning_sdk.lightning_cloud.openapi.models import *
30
+
31
+ class V1RefreshContainerRegistryCredentialsResponse(object):
32
+ """NOTE: This class is auto generated by the swagger code generator program.
33
+
34
+ Do not edit the class manually.
35
+ """
36
+ """
37
+ Attributes:
38
+ swagger_types (dict): The key is attribute name
39
+ and the value is attribute type.
40
+ attribute_map (dict): The key is attribute name
41
+ and the value is json key in definition.
42
+ """
43
+ swagger_types = {
44
+ 'refreshed_at': 'datetime'
45
+ }
46
+
47
+ attribute_map = {
48
+ 'refreshed_at': 'refreshedAt'
49
+ }
50
+
51
+ def __init__(self, refreshed_at: 'datetime' =None): # noqa: E501
52
+ """V1RefreshContainerRegistryCredentialsResponse - a model defined in Swagger""" # noqa: E501
53
+ self._refreshed_at = None
54
+ self.discriminator = None
55
+ if refreshed_at is not None:
56
+ self.refreshed_at = refreshed_at
57
+
58
+ @property
59
+ def refreshed_at(self) -> 'datetime':
60
+ """Gets the refreshed_at of this V1RefreshContainerRegistryCredentialsResponse. # noqa: E501
61
+
62
+
63
+ :return: The refreshed_at of this V1RefreshContainerRegistryCredentialsResponse. # noqa: E501
64
+ :rtype: datetime
65
+ """
66
+ return self._refreshed_at
67
+
68
+ @refreshed_at.setter
69
+ def refreshed_at(self, refreshed_at: 'datetime'):
70
+ """Sets the refreshed_at of this V1RefreshContainerRegistryCredentialsResponse.
71
+
72
+
73
+ :param refreshed_at: The refreshed_at of this V1RefreshContainerRegistryCredentialsResponse. # noqa: E501
74
+ :type: datetime
75
+ """
76
+
77
+ self._refreshed_at = refreshed_at
78
+
79
+ def to_dict(self) -> dict:
80
+ """Returns the model properties as a dict"""
81
+ result = {}
82
+
83
+ for attr, _ in six.iteritems(self.swagger_types):
84
+ value = getattr(self, attr)
85
+ if isinstance(value, list):
86
+ result[attr] = list(map(
87
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
88
+ value
89
+ ))
90
+ elif hasattr(value, "to_dict"):
91
+ result[attr] = value.to_dict()
92
+ elif isinstance(value, dict):
93
+ result[attr] = dict(map(
94
+ lambda item: (item[0], item[1].to_dict())
95
+ if hasattr(item[1], "to_dict") else item,
96
+ value.items()
97
+ ))
98
+ else:
99
+ result[attr] = value
100
+ if issubclass(V1RefreshContainerRegistryCredentialsResponse, dict):
101
+ for key, value in self.items():
102
+ result[key] = value
103
+
104
+ return result
105
+
106
+ def to_str(self) -> str:
107
+ """Returns the string representation of the model"""
108
+ return pprint.pformat(self.to_dict())
109
+
110
+ def __repr__(self) -> str:
111
+ """For `print` and `pprint`"""
112
+ return self.to_str()
113
+
114
+ def __eq__(self, other: 'V1RefreshContainerRegistryCredentialsResponse') -> bool:
115
+ """Returns true if both objects are equal"""
116
+ if not isinstance(other, V1RefreshContainerRegistryCredentialsResponse):
117
+ return False
118
+
119
+ return self.__dict__ == other.__dict__
120
+
121
+ def __ne__(self, other: 'V1RefreshContainerRegistryCredentialsResponse') -> bool:
122
+ """Returns true if both objects are not equal"""
123
+ return not self == other
@@ -46,6 +46,7 @@ class V1SearchUser(object):
46
46
  'email': 'str',
47
47
  'first_name': 'str',
48
48
  'id': 'str',
49
+ 'internal': 'bool',
49
50
  'last_name': 'str',
50
51
  'organization': 'str',
51
52
  'picture_url': 'str',
@@ -61,6 +62,7 @@ class V1SearchUser(object):
61
62
  'email': 'email',
62
63
  'first_name': 'firstName',
63
64
  'id': 'id',
65
+ 'internal': 'internal',
64
66
  'last_name': 'lastName',
65
67
  'organization': 'organization',
66
68
  'picture_url': 'pictureUrl',
@@ -70,13 +72,14 @@ class V1SearchUser(object):
70
72
  'website': 'website'
71
73
  }
72
74
 
73
- def __init__(self, auth_provider: 'str' =None, country: 'str' =None, email: 'str' =None, first_name: 'str' =None, id: 'str' =None, last_name: 'str' =None, organization: 'str' =None, picture_url: 'str' =None, project_memberships: 'list[str]' =None, role: 'str' =None, username: 'str' =None, website: 'str' =None): # noqa: E501
75
+ def __init__(self, auth_provider: 'str' =None, country: 'str' =None, email: 'str' =None, first_name: 'str' =None, id: 'str' =None, internal: 'bool' =None, last_name: 'str' =None, organization: 'str' =None, picture_url: 'str' =None, project_memberships: 'list[str]' =None, role: 'str' =None, username: 'str' =None, website: 'str' =None): # noqa: E501
74
76
  """V1SearchUser - a model defined in Swagger""" # noqa: E501
75
77
  self._auth_provider = None
76
78
  self._country = None
77
79
  self._email = None
78
80
  self._first_name = None
79
81
  self._id = None
82
+ self._internal = None
80
83
  self._last_name = None
81
84
  self._organization = None
82
85
  self._picture_url = None
@@ -95,6 +98,8 @@ class V1SearchUser(object):
95
98
  self.first_name = first_name
96
99
  if id is not None:
97
100
  self.id = id
101
+ if internal is not None:
102
+ self.internal = internal
98
103
  if last_name is not None:
99
104
  self.last_name = last_name
100
105
  if organization is not None:
@@ -215,6 +220,27 @@ class V1SearchUser(object):
215
220
 
216
221
  self._id = id
217
222
 
223
+ @property
224
+ def internal(self) -> 'bool':
225
+ """Gets the internal of this V1SearchUser. # noqa: E501
226
+
227
+
228
+ :return: The internal of this V1SearchUser. # noqa: E501
229
+ :rtype: bool
230
+ """
231
+ return self._internal
232
+
233
+ @internal.setter
234
+ def internal(self, internal: 'bool'):
235
+ """Sets the internal of this V1SearchUser.
236
+
237
+
238
+ :param internal: The internal of this V1SearchUser. # noqa: E501
239
+ :type: bool
240
+ """
241
+
242
+ self._internal = internal
243
+
218
244
  @property
219
245
  def last_name(self) -> 'str':
220
246
  """Gets the last_name of this V1SearchUser. # noqa: E501
@@ -93,6 +93,9 @@ class V1UserFeatures(object):
93
93
  'f284': 'bool',
94
94
  'f285': 'bool',
95
95
  'f286': 'bool',
96
+ 'f287': 'bool',
97
+ 'f288': 'bool',
98
+ 'f289': 'bool',
96
99
  'fair_share': 'bool',
97
100
  'featured_studios_admin': 'bool',
98
101
  'job_artifacts_v2': 'bool',
@@ -184,6 +187,9 @@ class V1UserFeatures(object):
184
187
  'f284': 'f284',
185
188
  'f285': 'f285',
186
189
  'f286': 'f286',
190
+ 'f287': 'f287',
191
+ 'f288': 'f288',
192
+ 'f289': 'f289',
187
193
  'fair_share': 'fairShare',
188
194
  'featured_studios_admin': 'featuredStudiosAdmin',
189
195
  'job_artifacts_v2': 'jobArtifactsV2',
@@ -222,7 +228,7 @@ class V1UserFeatures(object):
222
228
  'weka': 'weka'
223
229
  }
224
230
 
225
- def __init__(self, affiliate_links: 'bool' =None, agents_v2: 'bool' =None, ai_hub_monetization: 'bool' =None, auto_fast_load: 'bool' =None, b2c_experience: 'bool' =None, byo_machine_type: 'bool' =None, cap_add: 'list[str]' =None, cap_drop: 'list[str]' =None, capacity_reservation_byoc: 'bool' =None, capacity_reservation_dry_run: 'bool' =None, chat_models: 'bool' =None, cloudspace_schedules: 'bool' =None, code_tab: 'bool' =None, collab_screen_sharing: 'bool' =None, control_center_monitoring: 'bool' =None, cost_attribution_settings: 'bool' =None, datasets: 'bool' =None, default_one_cluster: 'bool' =None, drive_v2: 'bool' =None, enterprise_compute_admin: 'bool' =None, f234: 'bool' =None, f236: 'bool' =None, f240: 'bool' =None, f241: 'bool' =None, f243: 'bool' =None, f245: 'bool' =None, f247: 'bool' =None, f250: 'bool' =None, f252: 'bool' =None, f253: 'bool' =None, f254: 'bool' =None, f258: 'bool' =None, f259: 'bool' =None, f265: 'bool' =None, f266: 'bool' =None, f268: 'bool' =None, f270: 'bool' =None, f271: 'bool' =None, f272: 'bool' =None, f273: 'bool' =None, f274: 'bool' =None, f275: 'bool' =None, f276: 'bool' =None, f278: 'bool' =None, f279: 'bool' =None, f280: 'bool' =None, f281: 'bool' =None, f282: 'bool' =None, f283: 'bool' =None, f284: 'bool' =None, f285: 'bool' =None, f286: 'bool' =None, fair_share: 'bool' =None, featured_studios_admin: 'bool' =None, job_artifacts_v2: 'bool' =None, kubernetes_cluster_ui: 'bool' =None, kubernetes_clusters: 'bool' =None, landing_studios: 'bool' =None, marketplace: 'bool' =None, mmt_fault_tolerance: 'bool' =None, mmt_strategy_selector: 'bool' =None, multiple_studio_versions: 'bool' =None, nerf_fs_nonpaying: 'bool' =None, org_level_member_permissions: 'bool' =None, org_usage_limits: 'bool' =None, persistent_disk: 'bool' =None, plugin_distributed: 'bool' =None, plugin_inference: 'bool' =None, plugin_label_studio: 'bool' =None, plugin_langflow: 'bool' =None, plugin_python_profiler: 'bool' =None, plugin_sweeps: 'bool' =None, product_generator: 'bool' =None, product_license: 'bool' =None, project_selector: 'bool' =None, publish_pipelines: 'bool' =None, reserved_machines_tab: 'bool' =None, restartable_jobs: 'bool' =None, runnable_public_studio_page: 'bool' =None, security_docs: 'bool' =None, show_dev_admin: 'bool' =None, slurm: 'bool' =None, specialised_studios: 'bool' =None, storage_overuse_deletion: 'bool' =None, studio_config: 'bool' =None, studio_version_visibility: 'bool' =None, vultr: 'bool' =None, weka: 'bool' =None): # noqa: E501
231
+ def __init__(self, affiliate_links: 'bool' =None, agents_v2: 'bool' =None, ai_hub_monetization: 'bool' =None, auto_fast_load: 'bool' =None, b2c_experience: 'bool' =None, byo_machine_type: 'bool' =None, cap_add: 'list[str]' =None, cap_drop: 'list[str]' =None, capacity_reservation_byoc: 'bool' =None, capacity_reservation_dry_run: 'bool' =None, chat_models: 'bool' =None, cloudspace_schedules: 'bool' =None, code_tab: 'bool' =None, collab_screen_sharing: 'bool' =None, control_center_monitoring: 'bool' =None, cost_attribution_settings: 'bool' =None, datasets: 'bool' =None, default_one_cluster: 'bool' =None, drive_v2: 'bool' =None, enterprise_compute_admin: 'bool' =None, f234: 'bool' =None, f236: 'bool' =None, f240: 'bool' =None, f241: 'bool' =None, f243: 'bool' =None, f245: 'bool' =None, f247: 'bool' =None, f250: 'bool' =None, f252: 'bool' =None, f253: 'bool' =None, f254: 'bool' =None, f258: 'bool' =None, f259: 'bool' =None, f265: 'bool' =None, f266: 'bool' =None, f268: 'bool' =None, f270: 'bool' =None, f271: 'bool' =None, f272: 'bool' =None, f273: 'bool' =None, f274: 'bool' =None, f275: 'bool' =None, f276: 'bool' =None, f278: 'bool' =None, f279: 'bool' =None, f280: 'bool' =None, f281: 'bool' =None, f282: 'bool' =None, f283: 'bool' =None, f284: 'bool' =None, f285: 'bool' =None, f286: 'bool' =None, f287: 'bool' =None, f288: 'bool' =None, f289: 'bool' =None, fair_share: 'bool' =None, featured_studios_admin: 'bool' =None, job_artifacts_v2: 'bool' =None, kubernetes_cluster_ui: 'bool' =None, kubernetes_clusters: 'bool' =None, landing_studios: 'bool' =None, marketplace: 'bool' =None, mmt_fault_tolerance: 'bool' =None, mmt_strategy_selector: 'bool' =None, multiple_studio_versions: 'bool' =None, nerf_fs_nonpaying: 'bool' =None, org_level_member_permissions: 'bool' =None, org_usage_limits: 'bool' =None, persistent_disk: 'bool' =None, plugin_distributed: 'bool' =None, plugin_inference: 'bool' =None, plugin_label_studio: 'bool' =None, plugin_langflow: 'bool' =None, plugin_python_profiler: 'bool' =None, plugin_sweeps: 'bool' =None, product_generator: 'bool' =None, product_license: 'bool' =None, project_selector: 'bool' =None, publish_pipelines: 'bool' =None, reserved_machines_tab: 'bool' =None, restartable_jobs: 'bool' =None, runnable_public_studio_page: 'bool' =None, security_docs: 'bool' =None, show_dev_admin: 'bool' =None, slurm: 'bool' =None, specialised_studios: 'bool' =None, storage_overuse_deletion: 'bool' =None, studio_config: 'bool' =None, studio_version_visibility: 'bool' =None, vultr: 'bool' =None, weka: 'bool' =None): # noqa: E501
226
232
  """V1UserFeatures - a model defined in Swagger""" # noqa: E501
227
233
  self._affiliate_links = None
228
234
  self._agents_v2 = None
@@ -276,6 +282,9 @@ class V1UserFeatures(object):
276
282
  self._f284 = None
277
283
  self._f285 = None
278
284
  self._f286 = None
285
+ self._f287 = None
286
+ self._f288 = None
287
+ self._f289 = None
279
288
  self._fair_share = None
280
289
  self._featured_studios_admin = None
281
290
  self._job_artifacts_v2 = None
@@ -417,6 +426,12 @@ class V1UserFeatures(object):
417
426
  self.f285 = f285
418
427
  if f286 is not None:
419
428
  self.f286 = f286
429
+ if f287 is not None:
430
+ self.f287 = f287
431
+ if f288 is not None:
432
+ self.f288 = f288
433
+ if f289 is not None:
434
+ self.f289 = f289
420
435
  if fair_share is not None:
421
436
  self.fair_share = fair_share
422
437
  if featured_studios_admin is not None:
@@ -1582,6 +1597,69 @@ class V1UserFeatures(object):
1582
1597
 
1583
1598
  self._f286 = f286
1584
1599
 
1600
+ @property
1601
+ def f287(self) -> 'bool':
1602
+ """Gets the f287 of this V1UserFeatures. # noqa: E501
1603
+
1604
+
1605
+ :return: The f287 of this V1UserFeatures. # noqa: E501
1606
+ :rtype: bool
1607
+ """
1608
+ return self._f287
1609
+
1610
+ @f287.setter
1611
+ def f287(self, f287: 'bool'):
1612
+ """Sets the f287 of this V1UserFeatures.
1613
+
1614
+
1615
+ :param f287: The f287 of this V1UserFeatures. # noqa: E501
1616
+ :type: bool
1617
+ """
1618
+
1619
+ self._f287 = f287
1620
+
1621
+ @property
1622
+ def f288(self) -> 'bool':
1623
+ """Gets the f288 of this V1UserFeatures. # noqa: E501
1624
+
1625
+
1626
+ :return: The f288 of this V1UserFeatures. # noqa: E501
1627
+ :rtype: bool
1628
+ """
1629
+ return self._f288
1630
+
1631
+ @f288.setter
1632
+ def f288(self, f288: 'bool'):
1633
+ """Sets the f288 of this V1UserFeatures.
1634
+
1635
+
1636
+ :param f288: The f288 of this V1UserFeatures. # noqa: E501
1637
+ :type: bool
1638
+ """
1639
+
1640
+ self._f288 = f288
1641
+
1642
+ @property
1643
+ def f289(self) -> 'bool':
1644
+ """Gets the f289 of this V1UserFeatures. # noqa: E501
1645
+
1646
+
1647
+ :return: The f289 of this V1UserFeatures. # noqa: E501
1648
+ :rtype: bool
1649
+ """
1650
+ return self._f289
1651
+
1652
+ @f289.setter
1653
+ def f289(self, f289: 'bool'):
1654
+ """Sets the f289 of this V1UserFeatures.
1655
+
1656
+
1657
+ :param f289: The f289 of this V1UserFeatures. # noqa: E501
1658
+ :type: bool
1659
+ """
1660
+
1661
+ self._f289 = f289
1662
+
1585
1663
  @property
1586
1664
  def fair_share(self) -> 'bool':
1587
1665
  """Gets the fair_share of this V1UserFeatures. # noqa: E501
@@ -0,0 +1,149 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ external/v1/auth_service.proto
5
+
6
+ No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501
7
+
8
+ OpenAPI spec version: version not set
9
+
10
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
11
+
12
+ NOTE
13
+ ----
14
+ standard swagger-codegen-cli for this python client has been modified
15
+ by custom templates. The purpose of these templates is to include
16
+ typing information in the API and Model code. Please refer to the
17
+ main grid repository for more info
18
+ """
19
+
20
+ import pprint
21
+ import re # noqa: F401
22
+
23
+ from typing import TYPE_CHECKING
24
+
25
+ import six
26
+
27
+ if TYPE_CHECKING:
28
+ from datetime import datetime
29
+ from lightning_sdk.lightning_cloud.openapi.models import *
30
+
31
+ class V1ValidateContainerRegistryResponse(object):
32
+ """NOTE: This class is auto generated by the swagger code generator program.
33
+
34
+ Do not edit the class manually.
35
+ """
36
+ """
37
+ Attributes:
38
+ swagger_types (dict): The key is attribute name
39
+ and the value is attribute type.
40
+ attribute_map (dict): The key is attribute name
41
+ and the value is json key in definition.
42
+ """
43
+ swagger_types = {
44
+ 'message': 'str',
45
+ 'valid': 'bool'
46
+ }
47
+
48
+ attribute_map = {
49
+ 'message': 'message',
50
+ 'valid': 'valid'
51
+ }
52
+
53
+ def __init__(self, message: 'str' =None, valid: 'bool' =None): # noqa: E501
54
+ """V1ValidateContainerRegistryResponse - a model defined in Swagger""" # noqa: E501
55
+ self._message = None
56
+ self._valid = None
57
+ self.discriminator = None
58
+ if message is not None:
59
+ self.message = message
60
+ if valid is not None:
61
+ self.valid = valid
62
+
63
+ @property
64
+ def message(self) -> 'str':
65
+ """Gets the message of this V1ValidateContainerRegistryResponse. # noqa: E501
66
+
67
+
68
+ :return: The message of this V1ValidateContainerRegistryResponse. # noqa: E501
69
+ :rtype: str
70
+ """
71
+ return self._message
72
+
73
+ @message.setter
74
+ def message(self, message: 'str'):
75
+ """Sets the message of this V1ValidateContainerRegistryResponse.
76
+
77
+
78
+ :param message: The message of this V1ValidateContainerRegistryResponse. # noqa: E501
79
+ :type: str
80
+ """
81
+
82
+ self._message = message
83
+
84
+ @property
85
+ def valid(self) -> 'bool':
86
+ """Gets the valid of this V1ValidateContainerRegistryResponse. # noqa: E501
87
+
88
+
89
+ :return: The valid of this V1ValidateContainerRegistryResponse. # noqa: E501
90
+ :rtype: bool
91
+ """
92
+ return self._valid
93
+
94
+ @valid.setter
95
+ def valid(self, valid: 'bool'):
96
+ """Sets the valid of this V1ValidateContainerRegistryResponse.
97
+
98
+
99
+ :param valid: The valid of this V1ValidateContainerRegistryResponse. # noqa: E501
100
+ :type: bool
101
+ """
102
+
103
+ self._valid = valid
104
+
105
+ def to_dict(self) -> dict:
106
+ """Returns the model properties as a dict"""
107
+ result = {}
108
+
109
+ for attr, _ in six.iteritems(self.swagger_types):
110
+ value = getattr(self, attr)
111
+ if isinstance(value, list):
112
+ result[attr] = list(map(
113
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
114
+ value
115
+ ))
116
+ elif hasattr(value, "to_dict"):
117
+ result[attr] = value.to_dict()
118
+ elif isinstance(value, dict):
119
+ result[attr] = dict(map(
120
+ lambda item: (item[0], item[1].to_dict())
121
+ if hasattr(item[1], "to_dict") else item,
122
+ value.items()
123
+ ))
124
+ else:
125
+ result[attr] = value
126
+ if issubclass(V1ValidateContainerRegistryResponse, dict):
127
+ for key, value in self.items():
128
+ result[key] = value
129
+
130
+ return result
131
+
132
+ def to_str(self) -> str:
133
+ """Returns the string representation of the model"""
134
+ return pprint.pformat(self.to_dict())
135
+
136
+ def __repr__(self) -> str:
137
+ """For `print` and `pprint`"""
138
+ return self.to_str()
139
+
140
+ def __eq__(self, other: 'V1ValidateContainerRegistryResponse') -> bool:
141
+ """Returns true if both objects are equal"""
142
+ if not isinstance(other, V1ValidateContainerRegistryResponse):
143
+ return False
144
+
145
+ return self.__dict__ == other.__dict__
146
+
147
+ def __ne__(self, other: 'V1ValidateContainerRegistryResponse') -> bool:
148
+ """Returns true if both objects are not equal"""
149
+ return not self == other
@@ -49,11 +49,11 @@ class RESTResponse(io.IOBase):
49
49
 
50
50
  def getheaders(self):
51
51
  """Returns a dictionary of the response headers."""
52
- return self.urllib3_response.getheaders()
52
+ return self.urllib3_response.headers
53
53
 
54
54
  def getheader(self, name, default=None):
55
55
  """Returns a given response header."""
56
- return self.urllib3_response.getheader(name, default)
56
+ return self.urllib3_response.headers.get(name, default)
57
57
 
58
58
 
59
59
  class RESTClientObject(object):
lightning_sdk/machine.py CHANGED
@@ -92,6 +92,7 @@ class Machine:
92
92
  accelerator_count: Optional[int] = None
93
93
  cost: Optional[float] = None
94
94
  interruptible_cost: Optional[float] = None
95
+ provider: Optional[str] = None
95
96
  wait_time: Optional[float] = None
96
97
  interruptible_wait_time: Optional[float] = None
97
98
  _include_in_cli: bool = True
lightning_sdk/mmt/base.py CHANGED
@@ -69,7 +69,7 @@ class _BaseMMT(_BaseJob):
69
69
  interruptible: bool = False,
70
70
  image_credentials: Optional[str] = None,
71
71
  cloud_account_auth: bool = False,
72
- entrypoint: str = "sh -c",
72
+ entrypoint: Optional[str] = None,
73
73
  path_mappings: Optional[Dict[str, str]] = None,
74
74
  max_runtime: Optional[int] = None,
75
75
  artifacts_local: Optional[str] = None, # deprecated in favor of path_mappings
@@ -104,8 +104,10 @@ class _BaseMMT(_BaseJob):
104
104
  cloud_account_auth: Whether to authenticate with the cloud account to pull the image.
105
105
  Required if the registry is part of a cloud provider (e.g. ECR).
106
106
  entrypoint: The entrypoint of your docker container. Defaults to `sh -c` which
107
- just runs the provided command in a standard shell.
108
- To use the pre-defined entrypoint of the provided image, set this to an empty string.
107
+ just runs the provided command in a standard shell if a command is provided.
108
+ If no command is provided, it will run the pre-defined entrypoint of the provided image.
109
+ To use the pre-defined entrypoint of the provided image with a specified command,
110
+ set this to an empty string.
109
111
  Only applicable when submitting docker jobs.
110
112
  path_mappings: Dictionary of path mappings. The keys are the path inside the container whereas the value
111
113
  represents the data-connection name and the path inside that connection.
@@ -173,7 +175,7 @@ class _BaseMMT(_BaseJob):
173
175
  "Other jobs will automatically persist artifacts to the teamspace distributed filesystem."
174
176
  )
175
177
 
176
- if entrypoint != "sh -c":
178
+ if entrypoint is not None:
177
179
  raise ValueError("Specifying the entrypoint has no effect for jobs with Studio envs.")
178
180
 
179
181
  else:
@@ -199,6 +201,20 @@ class _BaseMMT(_BaseJob):
199
201
  f"<CONNECTION_TYPE>:<CONNECTION_NAME>:<PATH_WITHIN_CONNECTION>, got {artifacts_local}"
200
202
  )
201
203
 
204
+ # command specified, so use the default entrypoint of sh -c
205
+ if command is not None and entrypoint is None:
206
+ entrypoint = "sh -c"
207
+
208
+ # entrypoint specifically set to empty string, so set to None here to fall back to the image entrypoint
209
+ elif entrypoint == "": # noqa: SIM114
210
+ entrypoint = None
211
+
212
+ # entrypoint not specified, but also no command specified, so use the image entrypoint
213
+ elif entrypoint is None:
214
+ entrypoint = None
215
+
216
+ # all other cases, the entrypoint has been specifically set, so use it as is
217
+
202
218
  inst = cls(name=name, teamspace=teamspace, org=org, user=user, _fetch_job=False)
203
219
  inst._submit(
204
220
  num_machines=num_machines,
@@ -235,7 +251,7 @@ class _BaseMMT(_BaseJob):
235
251
  cloud_provider: Optional[Union["CloudProvider", str]] = None,
236
252
  image_credentials: Optional[str] = None,
237
253
  cloud_account_auth: bool = False,
238
- entrypoint: str = "sh -c",
254
+ entrypoint: Optional[str] = None,
239
255
  path_mappings: Optional[Dict[str, str]] = None,
240
256
  artifacts_local: Optional[str] = None, # deprecated in favor of path_mappings
241
257
  artifacts_remote: Optional[str] = None, # deprecated in favor of path_mappings
@@ -260,8 +276,11 @@ class _BaseMMT(_BaseJob):
260
276
  This should be the name of the respective credentials secret created on the Lightning AI platform.
261
277
  cloud_account_auth: Whether to authenticate with the cloud account to pull the image.
262
278
  Required if the registry is part of a cloud provider (e.g. ECR).
263
- entrypoint: The entrypoint of your docker container. Defaults to sh -c.
264
- To use the pre-defined entrypoint of the provided image, set this to an empty string.
279
+ entrypoint: The entrypoint of your docker container. Defaults to `sh -c` which
280
+ just runs the provided command in a standard shell if a command is provided.
281
+ If no command is provided, it will run the pre-defined entrypoint of the provided image.
282
+ To use the pre-defined entrypoint of the provided image with a specified command,
283
+ set this to an empty string.
265
284
  Only applicable when submitting docker jobs.
266
285
  path_mappings: Dictionary of path mappings. The keys are the path inside the container whereas the value
267
286
  represents the data-connection name and the path inside that connection.
lightning_sdk/mmt/mmt.py CHANGED
@@ -100,7 +100,7 @@ class MMT(_BaseMMT):
100
100
  interruptible: bool = False,
101
101
  image_credentials: Optional[str] = None,
102
102
  cloud_account_auth: bool = False,
103
- entrypoint: str = "sh -c",
103
+ entrypoint: Optional[str] = None,
104
104
  path_mappings: Optional[Dict[str, str]] = None,
105
105
  max_runtime: Optional[int] = None,
106
106
  artifacts_local: Optional[str] = None,
@@ -134,8 +134,11 @@ class MMT(_BaseMMT):
134
134
  This should be the name of the respective credentials secret created on the Lightning AI platform.
135
135
  cloud_account_auth: Whether to authenticate with the cloud account to pull the image.
136
136
  Required if the registry is part of a cloud provider (e.g. ECR).
137
- entrypoint: The entrypoint of your docker container. Defaults to sh -c.
138
- To use the pre-defined entrypoint of the provided image, set this to an empty string.
137
+ entrypoint: The entrypoint of your docker container. Defaults to `sh -c` which
138
+ just runs the provided command in a standard shell if a command is provided.
139
+ If no command is provided, it will run the pre-defined entrypoint of the provided image.
140
+ To use the pre-defined entrypoint of the provided image with a specified command,
141
+ set this to an empty string.
139
142
  Only applicable when submitting docker jobs.
140
143
  path_mappings: Dictionary of path mappings. The keys are the path inside the container whereas the value
141
144
  represents the data-connection name and the path inside that connection.
@@ -194,7 +197,7 @@ class MMT(_BaseMMT):
194
197
  cloud_provider: Optional[Union["CloudProvider", str]] = None,
195
198
  image_credentials: Optional[str] = None,
196
199
  cloud_account_auth: bool = False,
197
- entrypoint: str = "sh -c",
200
+ entrypoint: Optional[str] = None,
198
201
  path_mappings: Optional[Dict[str, str]] = None,
199
202
  max_runtime: Optional[int] = None,
200
203
  artifacts_local: Optional[str] = None, # deprecated in favor of path_mappings
@@ -224,8 +227,10 @@ class MMT(_BaseMMT):
224
227
  cloud_account_auth: Whether to authenticate with the cloud account to pull the image.
225
228
  Required if the registry is part of a cloud provider (e.g. ECR).
226
229
  entrypoint: The entrypoint of your docker container. Defaults to `sh -c` which
227
- just runs the provided command in a standard shell.
228
- To use the pre-defined entrypoint of the provided image, set this to an empty string.
230
+ just runs the provided command in a standard shell if a command is provided.
231
+ If no command is provided, it will run the pre-defined entrypoint of the provided image.
232
+ To use the pre-defined entrypoint of the provided image with a specified command,
233
+ set this to an empty string.
229
234
  Only applicable when submitting docker jobs.
230
235
  path_mappings: Dictionary of path mappings. The keys are the path inside the container whereas the value
231
236
  represents the data-connection name and the path inside that connection.
lightning_sdk/mmt/v1.py CHANGED
@@ -53,7 +53,7 @@ class _MMTV1(_BaseMMT):
53
53
  cloud_provider: Optional[Union["CloudProvider", str]] = None,
54
54
  image_credentials: Optional[str] = None,
55
55
  cloud_account_auth: bool = False,
56
- entrypoint: str = "sh -c",
56
+ entrypoint: Optional[str] = None,
57
57
  path_mappings: Optional[Dict[str, str]] = None,
58
58
  max_runtime: Optional[int] = None,
59
59
  artifacts_local: Optional[str] = None,
@@ -89,7 +89,10 @@ class _MMTV1(_BaseMMT):
89
89
  Note that the connection needs to be added to the teamspace already in order for it to be found.
90
90
  Only supported for jobs with a docker image compute environment.
91
91
  entrypoint: The entrypoint of your docker container. Defaults to `sh -c` which
92
- just runs the provided command in a standard shell.
92
+ just runs the provided command in a standard shell if a command is provided.
93
+ If no command is provided, it will run the pre-defined entrypoint of the provided image.
94
+ To use the pre-defined entrypoint of the provided image with a specified command,
95
+ set this to an empty string.
93
96
  To use the pre-defined entrypoint of the provided image, set this to an empty string.
94
97
  Only applicable when submitting docker jobs.
95
98
  path_mappings: The mappings from data connection inside your container (not supported)
lightning_sdk/mmt/v2.py CHANGED
@@ -53,7 +53,7 @@ class _MMTV2(_BaseMMT):
53
53
  cloud_provider: Optional[Union["CloudProvider", str]] = None,
54
54
  image_credentials: Optional[str] = None,
55
55
  cloud_account_auth: bool = False,
56
- entrypoint: str = "sh -c",
56
+ entrypoint: Optional[str] = None,
57
57
  path_mappings: Optional[Dict[str, str]] = None,
58
58
  max_runtime: Optional[int] = None,
59
59
  artifacts_local: Optional[str] = None, # deprecated in favor of path_mappings
@@ -83,7 +83,10 @@ class _MMTV2(_BaseMMT):
83
83
  cloud_account_auth: Whether to authenticate with the cloud account to pull the image.
84
84
  Required if the registry is part of a cloud provider (e.g. ECR).
85
85
  entrypoint: The entrypoint of your docker container. Defaults to `sh -c` which
86
- just runs the provided command in a standard shell.
86
+ just runs the provided command in a standard shell if a command is provided.
87
+ If no command is provided, it will run the pre-defined entrypoint of the provided image.
88
+ To use the pre-defined entrypoint of the provided image with a specified command,
89
+ set this to an empty string.
87
90
  To use the pre-defined entrypoint of the provided image, set this to an empty string.
88
91
  Only applicable when submitting docker jobs.
89
92
  path_mappings: Dictionary of path mappings. The keys are the path inside the container whereas the value