lightning-sdk 2026.1.22__py3-none-any.whl → 2026.1.30__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 (61) hide show
  1. lightning_sdk/__version__.py +1 -1
  2. lightning_sdk/api/studio_api.py +38 -39
  3. lightning_sdk/api/teamspace_api.py +189 -72
  4. lightning_sdk/api/utils.py +69 -1
  5. lightning_sdk/cli/cp/__init__.py +14 -11
  6. lightning_sdk/cli/cp/teamspace_uploads.py +95 -0
  7. lightning_sdk/cli/legacy/download.py +29 -98
  8. lightning_sdk/cli/legacy/upload.py +24 -31
  9. lightning_sdk/cli/studio/cp.py +8 -5
  10. lightning_sdk/cli/studio/ls.py +1 -1
  11. lightning_sdk/cli/studio/rm.py +1 -1
  12. lightning_sdk/cli/utils/{studio_filesystem.py → filesystem.py} +49 -6
  13. lightning_sdk/exceptions.py +27 -0
  14. lightning_sdk/lightning_cloud/openapi/__init__.py +17 -12
  15. lightning_sdk/lightning_cloud/openapi/api/__init__.py +1 -0
  16. lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +5 -1
  17. lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +286 -468
  18. lightning_sdk/lightning_cloud/openapi/api/container_registry_service_api.py +579 -0
  19. lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +5 -1
  20. lightning_sdk/lightning_cloud/openapi/api/file_system_service_api.py +11 -11
  21. lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +113 -0
  22. lightning_sdk/lightning_cloud/openapi/api/organizations_service_api.py +113 -0
  23. lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +5 -1
  24. lightning_sdk/lightning_cloud/openapi/models/__init__.py +16 -12
  25. lightning_sdk/lightning_cloud/openapi/models/{cluster_service_refresh_container_registry_credentials_body.py → cluster_service_get_cluster_capacity_reservation_body.py} +6 -6
  26. lightning_sdk/lightning_cloud/openapi/models/{v1_container_registry_integration.py → container_registry_config_ecr.py} +49 -23
  27. lightning_sdk/lightning_cloud/openapi/models/{v1_container_registry_status.py → container_registry_provider.py} +14 -10
  28. lightning_sdk/lightning_cloud/openapi/models/container_registry_service_create_container_registry_body.py +201 -0
  29. lightning_sdk/lightning_cloud/openapi/models/{v1_ecr_registry_config_input.py → container_registry_service_refresh_container_registry_credentials_body.py} +21 -21
  30. lightning_sdk/lightning_cloud/openapi/models/jobs_service_duplicate_deployment_body.py +175 -0
  31. lightning_sdk/lightning_cloud/openapi/models/organizations_service_update_org_role_body.py +175 -0
  32. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_provider.py +1 -0
  33. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +27 -1
  34. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +27 -1
  35. lightning_sdk/lightning_cloud/openapi/models/v1_container_registry.py +63 -89
  36. lightning_sdk/lightning_cloud/openapi/models/{cluster_service_add_container_registry_body.py → v1_container_registry_config.py} +16 -16
  37. lightning_sdk/lightning_cloud/openapi/models/{v1_validate_container_registry_response.py → v1_container_registry_scopes.py} +39 -39
  38. lightning_sdk/lightning_cloud/openapi/models/{cluster_service_validate_container_registry_body.py → v1_create_container_registry_response.py} +6 -6
  39. lightning_sdk/lightning_cloud/openapi/models/v1_delete_org_cluster_capacity_reservation_response.py +97 -0
  40. lightning_sdk/lightning_cloud/openapi/models/v1_describe_org_cluster_capacity_reservation_response.py +201 -0
  41. lightning_sdk/lightning_cloud/openapi/models/v1_generic_job_spec.py +79 -1
  42. lightning_sdk/lightning_cloud/openapi/models/{v1_add_container_registry_response.py → v1_get_cluster_capacity_reservation_response.py} +23 -23
  43. lightning_sdk/lightning_cloud/openapi/models/v1_job.py +27 -1
  44. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1.py +1 -27
  45. lightning_sdk/lightning_cloud/openapi/models/v1_list_container_registries_response.py +6 -6
  46. lightning_sdk/lightning_cloud/openapi/models/{v1_ecr_registry_config.py → v1_mithril_direct_v1.py} +51 -51
  47. lightning_sdk/lightning_cloud/openapi/models/v1_refresh_container_registry_credentials_response.py +1 -27
  48. lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier.py +27 -1
  49. lightning_sdk/lightning_cloud/openapi/models/v1_update_container_registry_response.py +97 -0
  50. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +53 -105
  51. lightning_sdk/lightning_cloud/openapi/rest.py +2 -2
  52. lightning_sdk/teamspace.py +28 -7
  53. {lightning_sdk-2026.1.22.dist-info → lightning_sdk-2026.1.30.dist-info}/METADATA +1 -1
  54. {lightning_sdk-2026.1.22.dist-info → lightning_sdk-2026.1.30.dist-info}/RECORD +59 -53
  55. lightning_sdk/lightning_cloud/openapi/models/v1_container_registry_info.py +0 -281
  56. lightning_sdk/lightning_cloud/openapi/models/v1_ecr_registry_details.py +0 -201
  57. /lightning_sdk/lightning_cloud/openapi/models/{v1_list_filesystem_mmts_response.py → v1_list_filesystem_mm_ts_response.py} +0 -0
  58. {lightning_sdk-2026.1.22.dist-info → lightning_sdk-2026.1.30.dist-info}/LICENSE +0 -0
  59. {lightning_sdk-2026.1.22.dist-info → lightning_sdk-2026.1.30.dist-info}/WHEEL +0 -0
  60. {lightning_sdk-2026.1.22.dist-info → lightning_sdk-2026.1.30.dist-info}/entry_points.txt +0 -0
  61. {lightning_sdk-2026.1.22.dist-info → lightning_sdk-2026.1.30.dist-info}/top_level.txt +0 -0
@@ -41,14 +41,14 @@ class V1ListContainerRegistriesResponse(object):
41
41
  and the value is json key in definition.
42
42
  """
43
43
  swagger_types = {
44
- 'registries': 'list[V1ContainerRegistryInfo]'
44
+ 'registries': 'list[V1ContainerRegistry]'
45
45
  }
46
46
 
47
47
  attribute_map = {
48
48
  'registries': 'registries'
49
49
  }
50
50
 
51
- def __init__(self, registries: 'list[V1ContainerRegistryInfo]' =None): # noqa: E501
51
+ def __init__(self, registries: 'list[V1ContainerRegistry]' =None): # noqa: E501
52
52
  """V1ListContainerRegistriesResponse - a model defined in Swagger""" # noqa: E501
53
53
  self._registries = None
54
54
  self.discriminator = None
@@ -56,22 +56,22 @@ class V1ListContainerRegistriesResponse(object):
56
56
  self.registries = registries
57
57
 
58
58
  @property
59
- def registries(self) -> 'list[V1ContainerRegistryInfo]':
59
+ def registries(self) -> 'list[V1ContainerRegistry]':
60
60
  """Gets the registries of this V1ListContainerRegistriesResponse. # noqa: E501
61
61
 
62
62
 
63
63
  :return: The registries of this V1ListContainerRegistriesResponse. # noqa: E501
64
- :rtype: list[V1ContainerRegistryInfo]
64
+ :rtype: list[V1ContainerRegistry]
65
65
  """
66
66
  return self._registries
67
67
 
68
68
  @registries.setter
69
- def registries(self, registries: 'list[V1ContainerRegistryInfo]'):
69
+ def registries(self, registries: 'list[V1ContainerRegistry]'):
70
70
  """Sets the registries of this V1ListContainerRegistriesResponse.
71
71
 
72
72
 
73
73
  :param registries: The registries of this V1ListContainerRegistriesResponse. # noqa: E501
74
- :type: list[V1ContainerRegistryInfo]
74
+ :type: list[V1ContainerRegistry]
75
75
  """
76
76
 
77
77
  self._registries = registries
@@ -28,7 +28,7 @@ if TYPE_CHECKING:
28
28
  from datetime import datetime
29
29
  from lightning_sdk.lightning_cloud.openapi.models import *
30
30
 
31
- class V1ECRRegistryConfig(object):
31
+ class V1MithrilDirectV1(object):
32
32
  """NOTE: This class is auto generated by the swagger code generator program.
33
33
 
34
34
  Do not edit the class manually.
@@ -41,92 +41,92 @@ class V1ECRRegistryConfig(object):
41
41
  and the value is json key in definition.
42
42
  """
43
43
  swagger_types = {
44
- 'lightning_account_id': 'str',
45
- 'lightning_role': 'str',
46
- 'registry_url': 'str'
44
+ 'primary_region': 'str',
45
+ 'project_id': 'str',
46
+ 'regions': 'list[str]'
47
47
  }
48
48
 
49
49
  attribute_map = {
50
- 'lightning_account_id': 'lightningAccountId',
51
- 'lightning_role': 'lightningRole',
52
- 'registry_url': 'registryUrl'
50
+ 'primary_region': 'primaryRegion',
51
+ 'project_id': 'projectId',
52
+ 'regions': 'regions'
53
53
  }
54
54
 
55
- def __init__(self, lightning_account_id: 'str' =None, lightning_role: 'str' =None, registry_url: 'str' =None): # noqa: E501
56
- """V1ECRRegistryConfig - a model defined in Swagger""" # noqa: E501
57
- self._lightning_account_id = None
58
- self._lightning_role = None
59
- self._registry_url = None
55
+ def __init__(self, primary_region: 'str' =None, project_id: 'str' =None, regions: 'list[str]' =None): # noqa: E501
56
+ """V1MithrilDirectV1 - a model defined in Swagger""" # noqa: E501
57
+ self._primary_region = None
58
+ self._project_id = None
59
+ self._regions = None
60
60
  self.discriminator = None
61
- if lightning_account_id is not None:
62
- self.lightning_account_id = lightning_account_id
63
- if lightning_role is not None:
64
- self.lightning_role = lightning_role
65
- if registry_url is not None:
66
- self.registry_url = registry_url
61
+ if primary_region is not None:
62
+ self.primary_region = primary_region
63
+ if project_id is not None:
64
+ self.project_id = project_id
65
+ if regions is not None:
66
+ self.regions = regions
67
67
 
68
68
  @property
69
- def lightning_account_id(self) -> 'str':
70
- """Gets the lightning_account_id of this V1ECRRegistryConfig. # noqa: E501
69
+ def primary_region(self) -> 'str':
70
+ """Gets the primary_region of this V1MithrilDirectV1. # noqa: E501
71
71
 
72
72
 
73
- :return: The lightning_account_id of this V1ECRRegistryConfig. # noqa: E501
73
+ :return: The primary_region of this V1MithrilDirectV1. # noqa: E501
74
74
  :rtype: str
75
75
  """
76
- return self._lightning_account_id
76
+ return self._primary_region
77
77
 
78
- @lightning_account_id.setter
79
- def lightning_account_id(self, lightning_account_id: 'str'):
80
- """Sets the lightning_account_id of this V1ECRRegistryConfig.
78
+ @primary_region.setter
79
+ def primary_region(self, primary_region: 'str'):
80
+ """Sets the primary_region of this V1MithrilDirectV1.
81
81
 
82
82
 
83
- :param lightning_account_id: The lightning_account_id of this V1ECRRegistryConfig. # noqa: E501
83
+ :param primary_region: The primary_region of this V1MithrilDirectV1. # noqa: E501
84
84
  :type: str
85
85
  """
86
86
 
87
- self._lightning_account_id = lightning_account_id
87
+ self._primary_region = primary_region
88
88
 
89
89
  @property
90
- def lightning_role(self) -> 'str':
91
- """Gets the lightning_role of this V1ECRRegistryConfig. # noqa: E501
90
+ def project_id(self) -> 'str':
91
+ """Gets the project_id of this V1MithrilDirectV1. # noqa: E501
92
92
 
93
93
 
94
- :return: The lightning_role of this V1ECRRegistryConfig. # noqa: E501
94
+ :return: The project_id of this V1MithrilDirectV1. # noqa: E501
95
95
  :rtype: str
96
96
  """
97
- return self._lightning_role
97
+ return self._project_id
98
98
 
99
- @lightning_role.setter
100
- def lightning_role(self, lightning_role: 'str'):
101
- """Sets the lightning_role of this V1ECRRegistryConfig.
99
+ @project_id.setter
100
+ def project_id(self, project_id: 'str'):
101
+ """Sets the project_id of this V1MithrilDirectV1.
102
102
 
103
103
 
104
- :param lightning_role: The lightning_role of this V1ECRRegistryConfig. # noqa: E501
104
+ :param project_id: The project_id of this V1MithrilDirectV1. # noqa: E501
105
105
  :type: str
106
106
  """
107
107
 
108
- self._lightning_role = lightning_role
108
+ self._project_id = project_id
109
109
 
110
110
  @property
111
- def registry_url(self) -> 'str':
112
- """Gets the registry_url of this V1ECRRegistryConfig. # noqa: E501
111
+ def regions(self) -> 'list[str]':
112
+ """Gets the regions of this V1MithrilDirectV1. # noqa: E501
113
113
 
114
114
 
115
- :return: The registry_url of this V1ECRRegistryConfig. # noqa: E501
116
- :rtype: str
115
+ :return: The regions of this V1MithrilDirectV1. # noqa: E501
116
+ :rtype: list[str]
117
117
  """
118
- return self._registry_url
118
+ return self._regions
119
119
 
120
- @registry_url.setter
121
- def registry_url(self, registry_url: 'str'):
122
- """Sets the registry_url of this V1ECRRegistryConfig.
120
+ @regions.setter
121
+ def regions(self, regions: 'list[str]'):
122
+ """Sets the regions of this V1MithrilDirectV1.
123
123
 
124
124
 
125
- :param registry_url: The registry_url of this V1ECRRegistryConfig. # noqa: E501
126
- :type: str
125
+ :param regions: The regions of this V1MithrilDirectV1. # noqa: E501
126
+ :type: list[str]
127
127
  """
128
128
 
129
- self._registry_url = registry_url
129
+ self._regions = regions
130
130
 
131
131
  def to_dict(self) -> dict:
132
132
  """Returns the model properties as a dict"""
@@ -149,7 +149,7 @@ class V1ECRRegistryConfig(object):
149
149
  ))
150
150
  else:
151
151
  result[attr] = value
152
- if issubclass(V1ECRRegistryConfig, dict):
152
+ if issubclass(V1MithrilDirectV1, dict):
153
153
  for key, value in self.items():
154
154
  result[key] = value
155
155
 
@@ -163,13 +163,13 @@ class V1ECRRegistryConfig(object):
163
163
  """For `print` and `pprint`"""
164
164
  return self.to_str()
165
165
 
166
- def __eq__(self, other: 'V1ECRRegistryConfig') -> bool:
166
+ def __eq__(self, other: 'V1MithrilDirectV1') -> bool:
167
167
  """Returns true if both objects are equal"""
168
- if not isinstance(other, V1ECRRegistryConfig):
168
+ if not isinstance(other, V1MithrilDirectV1):
169
169
  return False
170
170
 
171
171
  return self.__dict__ == other.__dict__
172
172
 
173
- def __ne__(self, other: 'V1ECRRegistryConfig') -> bool:
173
+ def __ne__(self, other: 'V1MithrilDirectV1') -> bool:
174
174
  """Returns true if both objects are not equal"""
175
175
  return not self == other
@@ -41,40 +41,14 @@ class V1RefreshContainerRegistryCredentialsResponse(object):
41
41
  and the value is json key in definition.
42
42
  """
43
43
  swagger_types = {
44
- 'refreshed_at': 'datetime'
45
44
  }
46
45
 
47
46
  attribute_map = {
48
- 'refreshed_at': 'refreshedAt'
49
47
  }
50
48
 
51
- def __init__(self, refreshed_at: 'datetime' =None): # noqa: E501
49
+ def __init__(self): # noqa: E501
52
50
  """V1RefreshContainerRegistryCredentialsResponse - a model defined in Swagger""" # noqa: E501
53
- self._refreshed_at = None
54
51
  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
52
 
79
53
  def to_dict(self) -> dict:
80
54
  """Returns the model properties as a dict"""
@@ -43,6 +43,7 @@ class V1SlackNotifier(object):
43
43
  swagger_types = {
44
44
  'api_key': 'str',
45
45
  'channel_id': 'str',
46
+ 'notify_on_ready_for_maintenance': 'bool',
46
47
  'type': 'V1SlackNotifierType',
47
48
  'url': 'str'
48
49
  }
@@ -50,14 +51,16 @@ class V1SlackNotifier(object):
50
51
  attribute_map = {
51
52
  'api_key': 'apiKey',
52
53
  'channel_id': 'channelId',
54
+ 'notify_on_ready_for_maintenance': 'notifyOnReadyForMaintenance',
53
55
  'type': 'type',
54
56
  'url': 'url'
55
57
  }
56
58
 
57
- def __init__(self, api_key: 'str' =None, channel_id: 'str' =None, type: 'V1SlackNotifierType' =None, url: 'str' =None): # noqa: E501
59
+ def __init__(self, api_key: 'str' =None, channel_id: 'str' =None, notify_on_ready_for_maintenance: 'bool' =None, type: 'V1SlackNotifierType' =None, url: 'str' =None): # noqa: E501
58
60
  """V1SlackNotifier - a model defined in Swagger""" # noqa: E501
59
61
  self._api_key = None
60
62
  self._channel_id = None
63
+ self._notify_on_ready_for_maintenance = None
61
64
  self._type = None
62
65
  self._url = None
63
66
  self.discriminator = None
@@ -65,6 +68,8 @@ class V1SlackNotifier(object):
65
68
  self.api_key = api_key
66
69
  if channel_id is not None:
67
70
  self.channel_id = channel_id
71
+ if notify_on_ready_for_maintenance is not None:
72
+ self.notify_on_ready_for_maintenance = notify_on_ready_for_maintenance
68
73
  if type is not None:
69
74
  self.type = type
70
75
  if url is not None:
@@ -112,6 +117,27 @@ class V1SlackNotifier(object):
112
117
 
113
118
  self._channel_id = channel_id
114
119
 
120
+ @property
121
+ def notify_on_ready_for_maintenance(self) -> 'bool':
122
+ """Gets the notify_on_ready_for_maintenance of this V1SlackNotifier. # noqa: E501
123
+
124
+
125
+ :return: The notify_on_ready_for_maintenance of this V1SlackNotifier. # noqa: E501
126
+ :rtype: bool
127
+ """
128
+ return self._notify_on_ready_for_maintenance
129
+
130
+ @notify_on_ready_for_maintenance.setter
131
+ def notify_on_ready_for_maintenance(self, notify_on_ready_for_maintenance: 'bool'):
132
+ """Sets the notify_on_ready_for_maintenance of this V1SlackNotifier.
133
+
134
+
135
+ :param notify_on_ready_for_maintenance: The notify_on_ready_for_maintenance of this V1SlackNotifier. # noqa: E501
136
+ :type: bool
137
+ """
138
+
139
+ self._notify_on_ready_for_maintenance = notify_on_ready_for_maintenance
140
+
115
141
  @property
116
142
  def type(self) -> 'V1SlackNotifierType':
117
143
  """Gets the type of this V1SlackNotifier. # noqa: E501
@@ -0,0 +1,97 @@
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 V1UpdateContainerRegistryResponse(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
+ }
45
+
46
+ attribute_map = {
47
+ }
48
+
49
+ def __init__(self): # noqa: E501
50
+ """V1UpdateContainerRegistryResponse - a model defined in Swagger""" # noqa: E501
51
+ self.discriminator = None
52
+
53
+ def to_dict(self) -> dict:
54
+ """Returns the model properties as a dict"""
55
+ result = {}
56
+
57
+ for attr, _ in six.iteritems(self.swagger_types):
58
+ value = getattr(self, attr)
59
+ if isinstance(value, list):
60
+ result[attr] = list(map(
61
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
62
+ value
63
+ ))
64
+ elif hasattr(value, "to_dict"):
65
+ result[attr] = value.to_dict()
66
+ elif isinstance(value, dict):
67
+ result[attr] = dict(map(
68
+ lambda item: (item[0], item[1].to_dict())
69
+ if hasattr(item[1], "to_dict") else item,
70
+ value.items()
71
+ ))
72
+ else:
73
+ result[attr] = value
74
+ if issubclass(V1UpdateContainerRegistryResponse, dict):
75
+ for key, value in self.items():
76
+ result[key] = value
77
+
78
+ return result
79
+
80
+ def to_str(self) -> str:
81
+ """Returns the string representation of the model"""
82
+ return pprint.pformat(self.to_dict())
83
+
84
+ def __repr__(self) -> str:
85
+ """For `print` and `pprint`"""
86
+ return self.to_str()
87
+
88
+ def __eq__(self, other: 'V1UpdateContainerRegistryResponse') -> bool:
89
+ """Returns true if both objects are equal"""
90
+ if not isinstance(other, V1UpdateContainerRegistryResponse):
91
+ return False
92
+
93
+ return self.__dict__ == other.__dict__
94
+
95
+ def __ne__(self, other: 'V1UpdateContainerRegistryResponse') -> bool:
96
+ """Returns true if both objects are not equal"""
97
+ return not self == other