lightning-sdk 2026.1.27__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 (21) hide show
  1. lightning_sdk/__version__.py +1 -1
  2. lightning_sdk/api/studio_api.py +32 -26
  3. lightning_sdk/api/teamspace_api.py +36 -26
  4. lightning_sdk/api/utils.py +61 -1
  5. lightning_sdk/cli/cp/teamspace_uploads.py +4 -2
  6. lightning_sdk/cli/utils/filesystem.py +6 -1
  7. lightning_sdk/lightning_cloud/openapi/__init__.py +3 -0
  8. lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +121 -0
  9. lightning_sdk/lightning_cloud/openapi/api/container_registry_service_api.py +123 -0
  10. lightning_sdk/lightning_cloud/openapi/models/__init__.py +3 -0
  11. lightning_sdk/lightning_cloud/openapi/models/cluster_service_get_cluster_capacity_reservation_body.py +97 -0
  12. lightning_sdk/lightning_cloud/openapi/models/v1_get_cluster_capacity_reservation_response.py +123 -0
  13. lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier.py +27 -1
  14. lightning_sdk/lightning_cloud/openapi/models/v1_update_container_registry_response.py +97 -0
  15. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +1 -53
  16. {lightning_sdk-2026.1.27.dist-info → lightning_sdk-2026.1.30.dist-info}/METADATA +1 -1
  17. {lightning_sdk-2026.1.27.dist-info → lightning_sdk-2026.1.30.dist-info}/RECORD +21 -18
  18. {lightning_sdk-2026.1.27.dist-info → lightning_sdk-2026.1.30.dist-info}/LICENSE +0 -0
  19. {lightning_sdk-2026.1.27.dist-info → lightning_sdk-2026.1.30.dist-info}/WHEEL +0 -0
  20. {lightning_sdk-2026.1.27.dist-info → lightning_sdk-2026.1.30.dist-info}/entry_points.txt +0 -0
  21. {lightning_sdk-2026.1.27.dist-info → lightning_sdk-2026.1.30.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,3 @@
1
1
  """Version information for lightning_sdk."""
2
2
 
3
- __version__ = "2026.01.27"
3
+ __version__ = "2026.01.30"
@@ -13,12 +13,15 @@ import requests
13
13
  from tqdm import tqdm
14
14
 
15
15
  from lightning_sdk.api.utils import (
16
+ _MAX_SIZE_MULTI_PART_CHUNK,
16
17
  _authenticate_and_get_token,
17
18
  _create_app,
18
19
  _DummyBody,
19
20
  _DummyResponse,
21
+ _FileUploader,
20
22
  _machine_to_compute_name,
21
23
  _sanitize_studio_remote_path,
24
+ _SinglePartFileUploader,
22
25
  )
23
26
  from lightning_sdk.api.utils import (
24
27
  _get_cloud_url as _cloud_url,
@@ -722,33 +725,36 @@ class StudioApi:
722
725
  remote_path: str,
723
726
  progress_bar: bool,
724
727
  ) -> None:
725
- """Uploads file to given remote path on the studio."""
726
- token = _authenticate_and_get_token(self._client)
727
-
728
- query_params = {"token": token}
729
- client_host = self._client.api_client.configuration.host
730
- url = f"{client_host}/v1/projects/{teamspace_id}/artifacts/cloudspaces/{studio_id}/blobs/{remote_path}"
731
-
732
- filesize = os.path.getsize(file_path)
733
- with open(file_path, "rb") as f:
734
- if progress_bar:
735
- filesize = os.path.getsize(file_path)
736
- with tqdm.wrapattr(
737
- f,
738
- "read",
739
- desc=f"Uploading {os.path.split(file_path)[1]}",
740
- total=filesize,
741
- unit="B",
742
- unit_scale=True,
743
- unit_divisor=1000,
744
- ) as wrapped_file:
745
- r = requests.put(url, data=wrapped_file, params=query_params, timeout=30)
746
- else:
747
- r = requests.put(url, data=f, params=query_params, timeout=30)
728
+ """Uploads file to given remote path in the studio.
748
729
 
749
- if r.status_code == 200:
750
- return
751
- raise RuntimeError(f"Failed to upload file '{file_path}' to the Studio. Status code: {r.status_code}")
730
+ Uses single-part upload for files <= 5MB, multipart upload for larger files.
731
+ """
732
+ file_size = os.path.getsize(file_path)
733
+ multipart_threshold = int(os.environ.get("LIGHTNING_MULTIPART_THRESHOLD", _MAX_SIZE_MULTI_PART_CHUNK))
734
+
735
+ if file_size <= multipart_threshold:
736
+ token = _authenticate_and_get_token(self._client)
737
+
738
+ query_params = {"token": token}
739
+ client_host = self._client.api_client.configuration.host
740
+ url = f"{client_host}/v1/projects/{teamspace_id}/artifacts/cloudspaces/{studio_id}/blobs/{remote_path}"
741
+
742
+ _SinglePartFileUploader(
743
+ client=self._client,
744
+ file_path=file_path,
745
+ url=url,
746
+ query_params=query_params,
747
+ progress_bar=progress_bar,
748
+ )()
749
+ else:
750
+ _FileUploader(
751
+ client=self._client,
752
+ teamspace_id=teamspace_id,
753
+ cloud_account=cloud_account,
754
+ file_path=file_path,
755
+ remote_path=_sanitize_studio_remote_path(remote_path, studio_id),
756
+ progress_bar=progress_bar,
757
+ )()
752
758
 
753
759
  def download_file(
754
760
  self,
@@ -10,11 +10,15 @@ import requests
10
10
  from tqdm.auto import tqdm
11
11
 
12
12
  from lightning_sdk.api.utils import (
13
+ _MAX_SIZE_MULTI_PART_CHUNK,
13
14
  _authenticate_and_get_token,
14
15
  _download_model_files,
15
16
  _DummyBody,
17
+ _FileUploader,
16
18
  _get_model_version,
17
19
  _ModelFileUploader,
20
+ _resolve_teamspace_remote_path,
21
+ _SinglePartFileUploader,
18
22
  )
19
23
  from lightning_sdk.lightning_cloud.login import Auth
20
24
  from lightning_sdk.lightning_cloud.openapi import (
@@ -451,34 +455,40 @@ class TeamspaceApi:
451
455
  file_path: str,
452
456
  remote_path: str,
453
457
  progress_bar: bool,
458
+ headers: Optional[Dict[str, str]] = None,
454
459
  ) -> None:
455
- """Uploads file to given remote path in the Teamspace drive /Uploads/."""
456
- token = _authenticate_and_get_token(self._client)
460
+ """Uploads file to given remote path in the Teamspace drive.
457
461
 
458
- query_params = {"token": token, "clusterId": cloud_account}
459
- client_host = self._client.api_client.configuration.host
460
- url = f"{client_host}/v1/projects/{teamspace_id}/artifacts/uploads/blobs/{remote_path}"
461
-
462
- filesize = os.path.getsize(file_path)
463
- with open(file_path, "rb") as f:
464
- if progress_bar:
465
- filesize = os.path.getsize(file_path)
466
- with tqdm.wrapattr(
467
- f,
468
- "read",
469
- desc=f"Uploading {os.path.split(file_path)[1]}",
470
- total=filesize,
471
- unit="B",
472
- unit_scale=True,
473
- unit_divisor=1000,
474
- ) as wrapped_file:
475
- r = requests.put(url, data=wrapped_file, params=query_params, timeout=30)
476
- else:
477
- r = requests.put(url, data=f, params=query_params, timeout=30)
478
-
479
- if r.status_code == 200:
480
- return
481
- raise RuntimeError(f"Failed to upload file '{file_path}' to the Teamspace drive. Status code: {r.status_code}")
462
+ Uses single-part upload for files <= 5MB, multipart upload for larger files.
463
+ """
464
+ file_size = os.path.getsize(file_path)
465
+
466
+ multipart_threshold = int(os.environ.get("LIGHTNING_MULTIPART_THRESHOLD", _MAX_SIZE_MULTI_PART_CHUNK))
467
+
468
+ if file_size <= multipart_threshold:
469
+ token = _authenticate_and_get_token(self._client)
470
+
471
+ query_params = {"token": token, "clusterId": cloud_account}
472
+ client_host = self._client.api_client.configuration.host
473
+ url = f"{client_host}/v1/projects/{teamspace_id}/artifacts/blobs/{remote_path}"
474
+
475
+ _SinglePartFileUploader(
476
+ client=self._client,
477
+ file_path=file_path,
478
+ url=url,
479
+ query_params=query_params,
480
+ progress_bar=progress_bar,
481
+ headers=headers,
482
+ )()
483
+ else:
484
+ _FileUploader(
485
+ client=self._client,
486
+ teamspace_id=teamspace_id,
487
+ cloud_account=cloud_account,
488
+ file_path=file_path,
489
+ remote_path=_resolve_teamspace_remote_path(remote_path),
490
+ progress_bar=progress_bar,
491
+ )()
482
492
 
483
493
  def download_file(
484
494
  self,
@@ -59,6 +59,66 @@ _MAX_BATCH_SIZE = 50
59
59
  _MAX_WORKERS = 10
60
60
 
61
61
 
62
+ class _SinglePartFileUploader:
63
+ """A class handling upload files to studio and teamspace drive with new endpoint."""
64
+
65
+ def __init__(
66
+ self,
67
+ client: LightningClient,
68
+ file_path: str,
69
+ url: str,
70
+ query_params: Dict[str, str],
71
+ progress_bar: bool,
72
+ headers: Optional[Dict[str, str]] = None,
73
+ ) -> None:
74
+ self.client = client
75
+ self.local_path = file_path
76
+ self.url = url
77
+ self.query_params = query_params
78
+ self.headers = headers
79
+ self.filesize = os.path.getsize(file_path)
80
+
81
+ if progress_bar:
82
+ self.progress_bar = tqdm(
83
+ desc=f"Uploading {os.path.split(file_path)[1]}",
84
+ total=self.filesize,
85
+ unit="B",
86
+ unit_scale=True,
87
+ unit_divisor=1000,
88
+ position=-1,
89
+ mininterval=1,
90
+ )
91
+ else:
92
+ self.progress_bar = None
93
+
94
+ def __call__(self) -> None:
95
+ self._upload_with_retry()
96
+
97
+ @backoff.on_exception(
98
+ backoff.expo, (requests.exceptions.HTTPError, requests.exceptions.RequestException), max_tries=10
99
+ )
100
+ def _upload_with_retry(self) -> None:
101
+ with open(self.local_path, "rb") as f:
102
+ if self.progress_bar is not None:
103
+ with tqdm.wrapattr(
104
+ f,
105
+ "read",
106
+ desc=f"Uploading {os.path.split(self.local_path)[1]}",
107
+ total=self.filesize,
108
+ unit="B",
109
+ unit_scale=True,
110
+ unit_divisor=1000,
111
+ ) as wrapped_file:
112
+ r = requests.put(
113
+ self.url, data=wrapped_file, params=self.query_params, timeout=30, headers=self.headers
114
+ )
115
+ else:
116
+ r = requests.put(self.url, data=f, params=self.query_params, timeout=30, headers=self.headers)
117
+
118
+ if r.status_code != 200:
119
+ raise RuntimeError(f"Failed to upload file '{self.local_path}'. Status code: {r.status_code}")
120
+
121
+
62
122
  class _FileUploader:
63
123
  """A class handling the upload to studios.
64
124
 
@@ -358,7 +418,7 @@ def _sanitize_studio_remote_path(path: str, studio_id: str) -> str:
358
418
 
359
419
 
360
420
  def _resolve_teamspace_remote_path(path: str) -> str:
361
- return f"/Uploads/{path.replace('/teamspace/uploads/', '')}"
421
+ return f"{path.replace('/teamspace/', '')}"
362
422
 
363
423
 
364
424
  _DOWNLOAD_REQUEST_CHUNK_SIZE = 10 * _BYTES_PER_MB
@@ -4,7 +4,7 @@ from pathlib import Path
4
4
  from rich.console import Console
5
5
 
6
6
  from lightning_sdk.api.utils import _get_cloud_url
7
- from lightning_sdk.cli.utils.filesystem import parse_teamspace_uploads_path, resolve_teamspace
7
+ from lightning_sdk.cli.utils.filesystem import parse_teamspace_uploads_path, path_join, resolve_teamspace
8
8
 
9
9
 
10
10
  def cp_upload(
@@ -20,6 +20,8 @@ def cp_upload(
20
20
 
21
21
  teamspace_path_result = parse_teamspace_uploads_path(teamspace_path)
22
22
 
23
+ teamspace_path_result["destination"] = path_join("Uploads", teamspace_path_result["destination"])
24
+
23
25
  selected_teamspace = resolve_teamspace(teamspace_path_result["teamspace"], teamspace_path_result["owner"])
24
26
  console.print(f"Uploading to {selected_teamspace.owner.name}/{selected_teamspace.name}")
25
27
 
@@ -33,7 +35,7 @@ def cp_upload(
33
35
  if teamspace_path.endswith(("/", "\\")):
34
36
  # if destination ends with / or \, treat it as a directory
35
37
  file_name = os.path.basename(local_file_path)
36
- teamspace_path_result["destination"] = os.path.join(teamspace_path_result["destination"], file_name)
38
+ teamspace_path_result["destination"] = path_join(teamspace_path_result["destination"], file_name)
37
39
  selected_teamspace.upload_file(
38
40
  local_file_path, teamspace_path_result["destination"], cloud_account=cloud_account
39
41
  )
@@ -1,4 +1,5 @@
1
- from typing import Optional, TypedDict
1
+ import os
2
+ from typing import Any, Optional, TypedDict
2
3
 
3
4
  from lightning_sdk.cli.utils.owner_selection import OwnerMenu
4
5
  from lightning_sdk.cli.utils.studio_selection import StudiosMenu
@@ -14,6 +15,10 @@ class PathResult(TypedDict):
14
15
  destination: Optional[str]
15
16
 
16
17
 
18
+ def path_join(*args: Any) -> str:
19
+ return os.path.join(*args).replace("\\", "/")
20
+
21
+
17
22
  def parse_studio_path(studio_path: str) -> PathResult:
18
23
  path_string = studio_path.removeprefix("lit://")
19
24
  if not path_string:
@@ -141,6 +141,7 @@ from lightning_sdk.lightning_cloud.openapi.models.cluster_service_create_machine
141
141
  from lightning_sdk.lightning_cloud.openapi.models.cluster_service_create_org_cluster_capacity_reservation_body import ClusterServiceCreateOrgClusterCapacityReservationBody
142
142
  from lightning_sdk.lightning_cloud.openapi.models.cluster_service_create_project_cluster_body import ClusterServiceCreateProjectClusterBody
143
143
  from lightning_sdk.lightning_cloud.openapi.models.cluster_service_create_server_alert_body import ClusterServiceCreateServerAlertBody
144
+ from lightning_sdk.lightning_cloud.openapi.models.cluster_service_get_cluster_capacity_reservation_body import ClusterServiceGetClusterCapacityReservationBody
144
145
  from lightning_sdk.lightning_cloud.openapi.models.cluster_service_interrupt_server_body import ClusterServiceInterruptServerBody
145
146
  from lightning_sdk.lightning_cloud.openapi.models.cluster_service_purchase_capacity_block_body import ClusterServicePurchaseCapacityBlockBody
146
147
  from lightning_sdk.lightning_cloud.openapi.models.cluster_service_report_machine_system_metrics_body import ClusterServiceReportMachineSystemMetricsBody
@@ -648,6 +649,7 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_get_cloud_space_required_ba
648
649
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_cloud_space_size_response import V1GetCloudSpaceSizeResponse
649
650
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_cloud_space_transfer_estimate_response import V1GetCloudSpaceTransferEstimateResponse
650
651
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_cluster_accelerator_demand_response import V1GetClusterAcceleratorDemandResponse
652
+ from lightning_sdk.lightning_cloud.openapi.models.v1_get_cluster_capacity_reservation_response import V1GetClusterCapacityReservationResponse
651
653
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_cluster_credentials_response import V1GetClusterCredentialsResponse
652
654
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_cluster_health_response import V1GetClusterHealthResponse
653
655
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_deployment_routing_telemetry_aggregated_response import V1GetDeploymentRoutingTelemetryAggregatedResponse
@@ -1139,6 +1141,7 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_update_cloud_space_visibili
1139
1141
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_cluster_accelerators_request import V1UpdateClusterAcceleratorsRequest
1140
1142
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_cluster_accelerators_response import V1UpdateClusterAcceleratorsResponse
1141
1143
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_cluster_availability_request import V1UpdateClusterAvailabilityRequest
1144
+ from lightning_sdk.lightning_cloud.openapi.models.v1_update_container_registry_response import V1UpdateContainerRegistryResponse
1142
1145
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_conversation_like_response import V1UpdateConversationLikeResponse
1143
1146
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_conversation_message_content_response import V1UpdateConversationMessageContentResponse
1144
1147
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_conversation_message_like_response import V1UpdateConversationMessageLikeResponse
@@ -2470,6 +2470,127 @@ class ClusterServiceApi(object):
2470
2470
  _request_timeout=params.get('_request_timeout'),
2471
2471
  collection_formats=collection_formats)
2472
2472
 
2473
+ def cluster_service_get_cluster_capacity_reservation(self, body: 'ClusterServiceGetClusterCapacityReservationBody', project_id: 'str', cluster_id: 'str', id: 'str', **kwargs) -> 'V1GetClusterCapacityReservationResponse': # noqa: E501
2474
+ """capacity reservation # noqa: E501
2475
+
2476
+ This method makes a synchronous HTTP request by default. To make an
2477
+ asynchronous HTTP request, please pass async_req=True
2478
+ >>> thread = api.cluster_service_get_cluster_capacity_reservation(body, project_id, cluster_id, id, async_req=True)
2479
+ >>> result = thread.get()
2480
+
2481
+ :param async_req bool
2482
+ :param ClusterServiceGetClusterCapacityReservationBody body: (required)
2483
+ :param str project_id: (required)
2484
+ :param str cluster_id: (required)
2485
+ :param str id: capacity reservation id (required)
2486
+ :return: V1GetClusterCapacityReservationResponse
2487
+ If the method is called asynchronously,
2488
+ returns the request thread.
2489
+ """
2490
+ kwargs['_return_http_data_only'] = True
2491
+ if kwargs.get('async_req'):
2492
+ return self.cluster_service_get_cluster_capacity_reservation_with_http_info(body, project_id, cluster_id, id, **kwargs) # noqa: E501
2493
+ else:
2494
+ (data) = self.cluster_service_get_cluster_capacity_reservation_with_http_info(body, project_id, cluster_id, id, **kwargs) # noqa: E501
2495
+ return data
2496
+
2497
+ def cluster_service_get_cluster_capacity_reservation_with_http_info(self, body: 'ClusterServiceGetClusterCapacityReservationBody', project_id: 'str', cluster_id: 'str', id: 'str', **kwargs) -> 'V1GetClusterCapacityReservationResponse': # noqa: E501
2498
+ """capacity reservation # noqa: E501
2499
+
2500
+ This method makes a synchronous HTTP request by default. To make an
2501
+ asynchronous HTTP request, please pass async_req=True
2502
+ >>> thread = api.cluster_service_get_cluster_capacity_reservation_with_http_info(body, project_id, cluster_id, id, async_req=True)
2503
+ >>> result = thread.get()
2504
+
2505
+ :param async_req bool
2506
+ :param ClusterServiceGetClusterCapacityReservationBody body: (required)
2507
+ :param str project_id: (required)
2508
+ :param str cluster_id: (required)
2509
+ :param str id: capacity reservation id (required)
2510
+ :return: V1GetClusterCapacityReservationResponse
2511
+ If the method is called asynchronously,
2512
+ returns the request thread.
2513
+ """
2514
+
2515
+ all_params = ['body', 'project_id', 'cluster_id', 'id'] # noqa: E501
2516
+ all_params.append('async_req')
2517
+ all_params.append('_return_http_data_only')
2518
+ all_params.append('_preload_content')
2519
+ all_params.append('_request_timeout')
2520
+
2521
+ params = locals()
2522
+ for key, val in six.iteritems(params['kwargs']):
2523
+ if key not in all_params:
2524
+ raise TypeError(
2525
+ "Got an unexpected keyword argument '%s'"
2526
+ " to method cluster_service_get_cluster_capacity_reservation" % key
2527
+ )
2528
+ params[key] = val
2529
+ del params['kwargs']
2530
+ # verify the required parameter 'body' is set
2531
+ if ('body' not in params or
2532
+ params['body'] is None):
2533
+ raise ValueError("Missing the required parameter `body` when calling `cluster_service_get_cluster_capacity_reservation`") # noqa: E501
2534
+ # verify the required parameter 'project_id' is set
2535
+ if ('project_id' not in params or
2536
+ params['project_id'] is None):
2537
+ raise ValueError("Missing the required parameter `project_id` when calling `cluster_service_get_cluster_capacity_reservation`") # noqa: E501
2538
+ # verify the required parameter 'cluster_id' is set
2539
+ if ('cluster_id' not in params or
2540
+ params['cluster_id'] is None):
2541
+ raise ValueError("Missing the required parameter `cluster_id` when calling `cluster_service_get_cluster_capacity_reservation`") # noqa: E501
2542
+ # verify the required parameter 'id' is set
2543
+ if ('id' not in params or
2544
+ params['id'] is None):
2545
+ raise ValueError("Missing the required parameter `id` when calling `cluster_service_get_cluster_capacity_reservation`") # noqa: E501
2546
+
2547
+ collection_formats = {}
2548
+
2549
+ path_params = {}
2550
+ if 'project_id' in params:
2551
+ path_params['projectId'] = params['project_id'] # noqa: E501
2552
+ if 'cluster_id' in params:
2553
+ path_params['clusterId'] = params['cluster_id'] # noqa: E501
2554
+ if 'id' in params:
2555
+ path_params['id'] = params['id'] # noqa: E501
2556
+
2557
+ query_params = []
2558
+
2559
+ header_params = {}
2560
+
2561
+ form_params = []
2562
+ local_var_files = {}
2563
+
2564
+ body_params = None
2565
+ if 'body' in params:
2566
+ body_params = params['body']
2567
+ # HTTP header `Accept`
2568
+ header_params['Accept'] = self.api_client.select_header_accept(
2569
+ ['application/json']) # noqa: E501
2570
+
2571
+ # HTTP header `Content-Type`
2572
+ header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501
2573
+ ['application/json']) # noqa: E501
2574
+
2575
+ # Authentication setting
2576
+ auth_settings = [] # noqa: E501
2577
+
2578
+ return self.api_client.call_api(
2579
+ '/v1/projects/{projectId}/clusters/{clusterId}/capacity-reservations/{id}', 'POST',
2580
+ path_params,
2581
+ query_params,
2582
+ header_params,
2583
+ body=body_params,
2584
+ post_params=form_params,
2585
+ files=local_var_files,
2586
+ response_type='V1GetClusterCapacityReservationResponse', # noqa: E501
2587
+ auth_settings=auth_settings,
2588
+ async_req=params.get('async_req'),
2589
+ _return_http_data_only=params.get('_return_http_data_only'),
2590
+ _preload_content=params.get('_preload_content', True),
2591
+ _request_timeout=params.get('_request_timeout'),
2592
+ collection_formats=collection_formats)
2593
+
2473
2594
  def cluster_service_get_cluster_credentials(self, **kwargs) -> 'V1GetClusterCredentialsResponse': # noqa: E501
2474
2595
  """cluster_service_get_cluster_credentials # noqa: E501
2475
2596
 
@@ -454,3 +454,126 @@ class ContainerRegistryServiceApi(object):
454
454
  _preload_content=params.get('_preload_content', True),
455
455
  _request_timeout=params.get('_request_timeout'),
456
456
  collection_formats=collection_formats)
457
+
458
+ def container_registry_service_update_container_registry(self, cluster_id: 'str', id: 'str', **kwargs) -> 'V1UpdateContainerRegistryResponse': # noqa: E501
459
+ """container_registry_service_update_container_registry # noqa: E501
460
+
461
+ This method makes a synchronous HTTP request by default. To make an
462
+ asynchronous HTTP request, please pass async_req=True
463
+ >>> thread = api.container_registry_service_update_container_registry(cluster_id, id, async_req=True)
464
+ >>> result = thread.get()
465
+
466
+ :param async_req bool
467
+ :param str cluster_id: (required)
468
+ :param str id: (required)
469
+ :param str org_id:
470
+ :param str url:
471
+ :param str provider:
472
+ :param list[str] scopes_namespaces: for k8s org clusters
473
+ :param list[str] scopes_project_ids: for byoc cloud accounts
474
+ :return: V1UpdateContainerRegistryResponse
475
+ If the method is called asynchronously,
476
+ returns the request thread.
477
+ """
478
+ kwargs['_return_http_data_only'] = True
479
+ if kwargs.get('async_req'):
480
+ return self.container_registry_service_update_container_registry_with_http_info(cluster_id, id, **kwargs) # noqa: E501
481
+ else:
482
+ (data) = self.container_registry_service_update_container_registry_with_http_info(cluster_id, id, **kwargs) # noqa: E501
483
+ return data
484
+
485
+ def container_registry_service_update_container_registry_with_http_info(self, cluster_id: 'str', id: 'str', **kwargs) -> 'V1UpdateContainerRegistryResponse': # noqa: E501
486
+ """container_registry_service_update_container_registry # noqa: E501
487
+
488
+ This method makes a synchronous HTTP request by default. To make an
489
+ asynchronous HTTP request, please pass async_req=True
490
+ >>> thread = api.container_registry_service_update_container_registry_with_http_info(cluster_id, id, async_req=True)
491
+ >>> result = thread.get()
492
+
493
+ :param async_req bool
494
+ :param str cluster_id: (required)
495
+ :param str id: (required)
496
+ :param str org_id:
497
+ :param str url:
498
+ :param str provider:
499
+ :param list[str] scopes_namespaces: for k8s org clusters
500
+ :param list[str] scopes_project_ids: for byoc cloud accounts
501
+ :return: V1UpdateContainerRegistryResponse
502
+ If the method is called asynchronously,
503
+ returns the request thread.
504
+ """
505
+
506
+ all_params = ['cluster_id', 'id', 'org_id', 'url', 'provider', 'scopes_namespaces', 'scopes_project_ids'] # noqa: E501
507
+ all_params.append('async_req')
508
+ all_params.append('_return_http_data_only')
509
+ all_params.append('_preload_content')
510
+ all_params.append('_request_timeout')
511
+
512
+ params = locals()
513
+ for key, val in six.iteritems(params['kwargs']):
514
+ if key not in all_params:
515
+ raise TypeError(
516
+ "Got an unexpected keyword argument '%s'"
517
+ " to method container_registry_service_update_container_registry" % key
518
+ )
519
+ params[key] = val
520
+ del params['kwargs']
521
+ # verify the required parameter 'cluster_id' is set
522
+ if ('cluster_id' not in params or
523
+ params['cluster_id'] is None):
524
+ raise ValueError("Missing the required parameter `cluster_id` when calling `container_registry_service_update_container_registry`") # noqa: E501
525
+ # verify the required parameter 'id' is set
526
+ if ('id' not in params or
527
+ params['id'] is None):
528
+ raise ValueError("Missing the required parameter `id` when calling `container_registry_service_update_container_registry`") # noqa: E501
529
+
530
+ collection_formats = {}
531
+
532
+ path_params = {}
533
+ if 'cluster_id' in params:
534
+ path_params['clusterId'] = params['cluster_id'] # noqa: E501
535
+ if 'id' in params:
536
+ path_params['id'] = params['id'] # noqa: E501
537
+
538
+ query_params = []
539
+ if 'org_id' in params:
540
+ query_params.append(('orgId', params['org_id'])) # noqa: E501
541
+ if 'url' in params:
542
+ query_params.append(('url', params['url'])) # noqa: E501
543
+ if 'provider' in params:
544
+ query_params.append(('provider', params['provider'])) # noqa: E501
545
+ if 'scopes_namespaces' in params:
546
+ query_params.append(('scopes.namespaces', params['scopes_namespaces'])) # noqa: E501
547
+ collection_formats['scopes.namespaces'] = 'multi' # noqa: E501
548
+ if 'scopes_project_ids' in params:
549
+ query_params.append(('scopes.projectIds', params['scopes_project_ids'])) # noqa: E501
550
+ collection_formats['scopes.projectIds'] = 'multi' # noqa: E501
551
+
552
+ header_params = {}
553
+
554
+ form_params = []
555
+ local_var_files = {}
556
+
557
+ body_params = None
558
+ # HTTP header `Accept`
559
+ header_params['Accept'] = self.api_client.select_header_accept(
560
+ ['application/json']) # noqa: E501
561
+
562
+ # Authentication setting
563
+ auth_settings = [] # noqa: E501
564
+
565
+ return self.api_client.call_api(
566
+ '/v1/core/clusters/{clusterId}/container-registries/{id}', 'PATCH',
567
+ path_params,
568
+ query_params,
569
+ header_params,
570
+ body=body_params,
571
+ post_params=form_params,
572
+ files=local_var_files,
573
+ response_type='V1UpdateContainerRegistryResponse', # noqa: E501
574
+ auth_settings=auth_settings,
575
+ async_req=params.get('async_req'),
576
+ _return_http_data_only=params.get('_return_http_data_only'),
577
+ _preload_content=params.get('_preload_content', True),
578
+ _request_timeout=params.get('_request_timeout'),
579
+ collection_formats=collection_formats)
@@ -88,6 +88,7 @@ from lightning_sdk.lightning_cloud.openapi.models.cluster_service_create_machine
88
88
  from lightning_sdk.lightning_cloud.openapi.models.cluster_service_create_org_cluster_capacity_reservation_body import ClusterServiceCreateOrgClusterCapacityReservationBody
89
89
  from lightning_sdk.lightning_cloud.openapi.models.cluster_service_create_project_cluster_body import ClusterServiceCreateProjectClusterBody
90
90
  from lightning_sdk.lightning_cloud.openapi.models.cluster_service_create_server_alert_body import ClusterServiceCreateServerAlertBody
91
+ from lightning_sdk.lightning_cloud.openapi.models.cluster_service_get_cluster_capacity_reservation_body import ClusterServiceGetClusterCapacityReservationBody
91
92
  from lightning_sdk.lightning_cloud.openapi.models.cluster_service_interrupt_server_body import ClusterServiceInterruptServerBody
92
93
  from lightning_sdk.lightning_cloud.openapi.models.cluster_service_purchase_capacity_block_body import ClusterServicePurchaseCapacityBlockBody
93
94
  from lightning_sdk.lightning_cloud.openapi.models.cluster_service_report_machine_system_metrics_body import ClusterServiceReportMachineSystemMetricsBody
@@ -595,6 +596,7 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_get_cloud_space_required_ba
595
596
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_cloud_space_size_response import V1GetCloudSpaceSizeResponse
596
597
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_cloud_space_transfer_estimate_response import V1GetCloudSpaceTransferEstimateResponse
597
598
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_cluster_accelerator_demand_response import V1GetClusterAcceleratorDemandResponse
599
+ from lightning_sdk.lightning_cloud.openapi.models.v1_get_cluster_capacity_reservation_response import V1GetClusterCapacityReservationResponse
598
600
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_cluster_credentials_response import V1GetClusterCredentialsResponse
599
601
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_cluster_health_response import V1GetClusterHealthResponse
600
602
  from lightning_sdk.lightning_cloud.openapi.models.v1_get_deployment_routing_telemetry_aggregated_response import V1GetDeploymentRoutingTelemetryAggregatedResponse
@@ -1086,6 +1088,7 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_update_cloud_space_visibili
1086
1088
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_cluster_accelerators_request import V1UpdateClusterAcceleratorsRequest
1087
1089
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_cluster_accelerators_response import V1UpdateClusterAcceleratorsResponse
1088
1090
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_cluster_availability_request import V1UpdateClusterAvailabilityRequest
1091
+ from lightning_sdk.lightning_cloud.openapi.models.v1_update_container_registry_response import V1UpdateContainerRegistryResponse
1089
1092
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_conversation_like_response import V1UpdateConversationLikeResponse
1090
1093
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_conversation_message_content_response import V1UpdateConversationMessageContentResponse
1091
1094
  from lightning_sdk.lightning_cloud.openapi.models.v1_update_conversation_message_like_response import V1UpdateConversationMessageLikeResponse
@@ -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 ClusterServiceGetClusterCapacityReservationBody(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
+ """ClusterServiceGetClusterCapacityReservationBody - 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(ClusterServiceGetClusterCapacityReservationBody, 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: 'ClusterServiceGetClusterCapacityReservationBody') -> bool:
89
+ """Returns true if both objects are equal"""
90
+ if not isinstance(other, ClusterServiceGetClusterCapacityReservationBody):
91
+ return False
92
+
93
+ return self.__dict__ == other.__dict__
94
+
95
+ def __ne__(self, other: 'ClusterServiceGetClusterCapacityReservationBody') -> bool:
96
+ """Returns true if both objects are not equal"""
97
+ return not self == other
@@ -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 V1GetClusterCapacityReservationResponse(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
+ 'capacity_reservation': 'V1ClusterCapacityReservation'
45
+ }
46
+
47
+ attribute_map = {
48
+ 'capacity_reservation': 'capacityReservation'
49
+ }
50
+
51
+ def __init__(self, capacity_reservation: 'V1ClusterCapacityReservation' =None): # noqa: E501
52
+ """V1GetClusterCapacityReservationResponse - a model defined in Swagger""" # noqa: E501
53
+ self._capacity_reservation = None
54
+ self.discriminator = None
55
+ if capacity_reservation is not None:
56
+ self.capacity_reservation = capacity_reservation
57
+
58
+ @property
59
+ def capacity_reservation(self) -> 'V1ClusterCapacityReservation':
60
+ """Gets the capacity_reservation of this V1GetClusterCapacityReservationResponse. # noqa: E501
61
+
62
+
63
+ :return: The capacity_reservation of this V1GetClusterCapacityReservationResponse. # noqa: E501
64
+ :rtype: V1ClusterCapacityReservation
65
+ """
66
+ return self._capacity_reservation
67
+
68
+ @capacity_reservation.setter
69
+ def capacity_reservation(self, capacity_reservation: 'V1ClusterCapacityReservation'):
70
+ """Sets the capacity_reservation of this V1GetClusterCapacityReservationResponse.
71
+
72
+
73
+ :param capacity_reservation: The capacity_reservation of this V1GetClusterCapacityReservationResponse. # noqa: E501
74
+ :type: V1ClusterCapacityReservation
75
+ """
76
+
77
+ self._capacity_reservation = capacity_reservation
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(V1GetClusterCapacityReservationResponse, 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: 'V1GetClusterCapacityReservationResponse') -> bool:
115
+ """Returns true if both objects are equal"""
116
+ if not isinstance(other, V1GetClusterCapacityReservationResponse):
117
+ return False
118
+
119
+ return self.__dict__ == other.__dict__
120
+
121
+ def __ne__(self, other: 'V1GetClusterCapacityReservationResponse') -> bool:
122
+ """Returns true if both objects are not equal"""
123
+ return not self == other
@@ -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
@@ -80,7 +80,6 @@ class V1UserFeatures(object):
80
80
  'f271': 'bool',
81
81
  'f272': 'bool',
82
82
  'f273': 'bool',
83
- 'f275': 'bool',
84
83
  'f276': 'bool',
85
84
  'f279': 'bool',
86
85
  'f280': 'bool',
@@ -90,7 +89,6 @@ class V1UserFeatures(object):
90
89
  'f287': 'bool',
91
90
  'f288': 'bool',
92
91
  'f289': 'bool',
93
- 'f290': 'bool',
94
92
  'f292': 'bool',
95
93
  'f293': 'bool',
96
94
  'f294': 'bool',
@@ -175,7 +173,6 @@ class V1UserFeatures(object):
175
173
  'f271': 'f271',
176
174
  'f272': 'f272',
177
175
  'f273': 'f273',
178
- 'f275': 'f275',
179
176
  'f276': 'f276',
180
177
  'f279': 'f279',
181
178
  'f280': 'f280',
@@ -185,7 +182,6 @@ class V1UserFeatures(object):
185
182
  'f287': 'f287',
186
183
  'f288': 'f288',
187
184
  'f289': 'f289',
188
- 'f290': 'f290',
189
185
  'f292': 'f292',
190
186
  'f293': 'f293',
191
187
  'f294': 'f294',
@@ -230,7 +226,7 @@ class V1UserFeatures(object):
230
226
  'weka': 'weka'
231
227
  }
232
228
 
233
- 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, f266: 'bool' =None, f268: 'bool' =None, f270: 'bool' =None, f271: 'bool' =None, f272: 'bool' =None, f273: 'bool' =None, f275: 'bool' =None, f276: 'bool' =None, f279: 'bool' =None, f280: 'bool' =None, f281: 'bool' =None, f283: 'bool' =None, f285: 'bool' =None, f287: 'bool' =None, f288: 'bool' =None, f289: 'bool' =None, f290: 'bool' =None, f292: 'bool' =None, f293: 'bool' =None, f294: 'bool' =None, f295: 'bool' =None, f296: 'bool' =None, f297: '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
229
+ 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, f266: 'bool' =None, f268: 'bool' =None, f270: 'bool' =None, f271: 'bool' =None, f272: 'bool' =None, f273: 'bool' =None, f276: 'bool' =None, f279: 'bool' =None, f280: 'bool' =None, f281: 'bool' =None, f283: 'bool' =None, f285: 'bool' =None, f287: 'bool' =None, f288: 'bool' =None, f289: 'bool' =None, f292: 'bool' =None, f293: 'bool' =None, f294: 'bool' =None, f295: 'bool' =None, f296: 'bool' =None, f297: '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
234
230
  """V1UserFeatures - a model defined in Swagger""" # noqa: E501
235
231
  self._affiliate_links = None
236
232
  self._agents_v2 = None
@@ -271,7 +267,6 @@ class V1UserFeatures(object):
271
267
  self._f271 = None
272
268
  self._f272 = None
273
269
  self._f273 = None
274
- self._f275 = None
275
270
  self._f276 = None
276
271
  self._f279 = None
277
272
  self._f280 = None
@@ -281,7 +276,6 @@ class V1UserFeatures(object):
281
276
  self._f287 = None
282
277
  self._f288 = None
283
278
  self._f289 = None
284
- self._f290 = None
285
279
  self._f292 = None
286
280
  self._f293 = None
287
281
  self._f294 = None
@@ -403,8 +397,6 @@ class V1UserFeatures(object):
403
397
  self.f272 = f272
404
398
  if f273 is not None:
405
399
  self.f273 = f273
406
- if f275 is not None:
407
- self.f275 = f275
408
400
  if f276 is not None:
409
401
  self.f276 = f276
410
402
  if f279 is not None:
@@ -423,8 +415,6 @@ class V1UserFeatures(object):
423
415
  self.f288 = f288
424
416
  if f289 is not None:
425
417
  self.f289 = f289
426
- if f290 is not None:
427
- self.f290 = f290
428
418
  if f292 is not None:
429
419
  self.f292 = f292
430
420
  if f293 is not None:
@@ -1329,27 +1319,6 @@ class V1UserFeatures(object):
1329
1319
 
1330
1320
  self._f273 = f273
1331
1321
 
1332
- @property
1333
- def f275(self) -> 'bool':
1334
- """Gets the f275 of this V1UserFeatures. # noqa: E501
1335
-
1336
-
1337
- :return: The f275 of this V1UserFeatures. # noqa: E501
1338
- :rtype: bool
1339
- """
1340
- return self._f275
1341
-
1342
- @f275.setter
1343
- def f275(self, f275: 'bool'):
1344
- """Sets the f275 of this V1UserFeatures.
1345
-
1346
-
1347
- :param f275: The f275 of this V1UserFeatures. # noqa: E501
1348
- :type: bool
1349
- """
1350
-
1351
- self._f275 = f275
1352
-
1353
1322
  @property
1354
1323
  def f276(self) -> 'bool':
1355
1324
  """Gets the f276 of this V1UserFeatures. # noqa: E501
@@ -1539,27 +1508,6 @@ class V1UserFeatures(object):
1539
1508
 
1540
1509
  self._f289 = f289
1541
1510
 
1542
- @property
1543
- def f290(self) -> 'bool':
1544
- """Gets the f290 of this V1UserFeatures. # noqa: E501
1545
-
1546
-
1547
- :return: The f290 of this V1UserFeatures. # noqa: E501
1548
- :rtype: bool
1549
- """
1550
- return self._f290
1551
-
1552
- @f290.setter
1553
- def f290(self, f290: 'bool'):
1554
- """Sets the f290 of this V1UserFeatures.
1555
-
1556
-
1557
- :param f290: The f290 of this V1UserFeatures. # noqa: E501
1558
- :type: bool
1559
- """
1560
-
1561
- self._f290 = f290
1562
-
1563
1511
  @property
1564
1512
  def f292(self) -> 'bool':
1565
1513
  """Gets the f292 of this V1UserFeatures. # noqa: E501
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lightning_sdk
3
- Version: 2026.1.27
3
+ Version: 2026.1.30
4
4
  Summary: SDK to develop using Lightning AI Studios
5
5
  Author-email: Lightning-AI <justus@lightning.ai>
6
6
  License: MIT License
@@ -1,6 +1,6 @@
1
1
  docs/source/conf.py,sha256=r8yX20eC-4mHhMTd0SbQb5TlSWHhO6wnJ0VJ_FBFpag,13249
2
2
  lightning_sdk/__init__.py,sha256=ym1mOWljHxiO4oijOrmtcjf-eIcwYJVFXkDvLduL4FA,1368
3
- lightning_sdk/__version__.py,sha256=5ERuwT3YGdivagK4QUPxkt75-zEuSgGlPyjnZiDIIAk,73
3
+ lightning_sdk/__version__.py,sha256=IDoJTZImpeaGoIY6dwnKxNMAA8TFv8D4AXaBiMvWxpI,73
4
4
  lightning_sdk/agents.py,sha256=Uqsdu4PgswhpeXZzDSbp3hu30MMOhSlCnp8D56MaS_c,1658
5
5
  lightning_sdk/ai_hub.py,sha256=QzCfmX0h2CLn7r0DQyjWg6RnNw26Ey6akiP2Wffl9Ls,7006
6
6
  lightning_sdk/base_studio.py,sha256=yMvZ1dDq_avW3iu98CLEo9W9UL54mx4C6FC43IKLWAE,4691
@@ -34,10 +34,10 @@ lightning_sdk/api/llm_api.py,sha256=8ouowlX-Ld0hRvueIS6fQqaEJLQMYskvhKV5-Z_A6gE,
34
34
  lightning_sdk/api/mmt_api.py,sha256=rn-zYJR31QUCd1EgG2ApHWe3JzTIkg01fDvG8pvSI1k,10864
35
35
  lightning_sdk/api/org_api.py,sha256=FqiEaoGTf4HxAImPgq03jExOjsB6HBOL31ishL37KVo,1111
36
36
  lightning_sdk/api/pipeline_api.py,sha256=YXVVNYVRA3xcmjEHCt2AMwSjspxEeDt5d-kZy2YDvZg,4669
37
- lightning_sdk/api/studio_api.py,sha256=O-QLBw7tjdSAjJ1ToiOw8-_rui0ac1uM5Ls28NdLw_A,49557
38
- lightning_sdk/api/teamspace_api.py,sha256=cXltYmdCTklpldMiMOR6tSWjn0iK-54JPJFIrmzfVY4,26698
37
+ lightning_sdk/api/studio_api.py,sha256=N5t9fMDmSEWyXIk2PSOe1zucjajx10xrQNCRIIjFoIc,49676
38
+ lightning_sdk/api/teamspace_api.py,sha256=diZ1TEe9-Qha64zu3y_yMZixPFc-7MEEqevR2_LzzIQ,26901
39
39
  lightning_sdk/api/user_api.py,sha256=2smSQS9xAm8fbfPgZSbYRCSdQbWplFefcA7KHz1ip1c,4971
40
- lightning_sdk/api/utils.py,sha256=2k9A_leCbz43IiC6ZKSAW7_oojM9CcXnEDkQ6hRdTtw,29990
40
+ lightning_sdk/api/utils.py,sha256=goMpeU53_CYEDtbKEhjyD82jwYhsQ7ZDu4zHcH9Id4o,32058
41
41
  lightning_sdk/cli/__init__.py,sha256=lksw08t_ZIuHOH47LCIqSVHeZ8cUXI2aJWHYhyujYHM,32
42
42
  lightning_sdk/cli/entrypoint.py,sha256=zAa0uLoihZ-H0SwEWfZ_oxMuhEoWkNLFy4gSwhb6D6Q,4251
43
43
  lightning_sdk/cli/groups.py,sha256=o09-zmVO7lnQ7BjcvfXnGxw8OM3w3J-D3v48UNbkJNo,2423
@@ -48,7 +48,7 @@ lightning_sdk/cli/config/get.py,sha256=JXGRNVGxELS6Es2RESgStzTKnjg5rr-M6yOmx2ty9
48
48
  lightning_sdk/cli/config/set.py,sha256=9p8q8nUWGWNcAcflQ3hS_tj-59jY7cmkzccuiZl92h4,3117
49
49
  lightning_sdk/cli/config/show.py,sha256=rcarLUSAmbqyEBMFQ9PPHquURFbUCaxoMeBTG1DOpGs,167
50
50
  lightning_sdk/cli/cp/__init__.py,sha256=v5HQBl6QECl5uC2T55k7z8plvYVaVsViCGkD1MugNVU,2538
51
- lightning_sdk/cli/cp/teamspace_uploads.py,sha256=GUoNR1oQrbdCQtQ_YNdYEvCa_eesPt5S7ZgNdMTOSbE,4044
51
+ lightning_sdk/cli/cp/teamspace_uploads.py,sha256=1A0poe2MS_0E_QWdKPwmAAqbg9z5CmWhYx-D9D10xU4,4155
52
52
  lightning_sdk/cli/job/__init__.py,sha256=HxkswumuGqBnrSHjBElO2CXn9kvH_zVfQEQqd0nwkNU,145
53
53
  lightning_sdk/cli/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
54
  lightning_sdk/cli/legacy/ai_hub.py,sha256=8MxGQC7SZALAsIj0tZ9HMZCeVHESUcve0cNazRzIFbE,1812
@@ -99,7 +99,7 @@ lightning_sdk/cli/studio/switch.py,sha256=x6F1biDtfR0dk1t7X3NSkmfj5jkzGJe6-nvj3S
99
99
  lightning_sdk/cli/utils/__init__.py,sha256=0gHdWY3bqrIyiFiEh_uSBuxWpOykCjqUc8fPEV0z3no,186
100
100
  lightning_sdk/cli/utils/cloud_account_map.py,sha256=7oM7ns4ZJfkxxZhl-GMkxEkkinKbVkskx5dLcyEQiz4,414
101
101
  lightning_sdk/cli/utils/coloring.py,sha256=YEb1LiYb6CekVfCRb83-npAmNgd-7c1LzXuNDo4GLSc,2415
102
- lightning_sdk/cli/utils/filesystem.py,sha256=wEB8t0QLtfwwSZS9NkZJu3WgdzyTpGGOqYdTGRzH9HM,3552
102
+ lightning_sdk/cli/utils/filesystem.py,sha256=Ua0PmYIJDaCFtMDsnQVweUIGpCwDnpdn_6uCGKEMTbM,3653
103
103
  lightning_sdk/cli/utils/get_base_studio.py,sha256=nYzyUTxVG86bzCOwh2QEC97kDkX7nP2ljXD4M1SJm2c,828
104
104
  lightning_sdk/cli/utils/handle_machine_and_gpus_args.py,sha256=5tlBuDAnzpPiau7YQ2jcXB4lPggyManxh_i4oqLUxD4,2280
105
105
  lightning_sdk/cli/utils/logging.py,sha256=Tiv7KtDN7t4-KPIDHahl-rY5uxsicP_cXbLaCUbICCA,4647
@@ -132,7 +132,7 @@ lightning_sdk/lightning_cloud/env.py,sha256=XZXpF4sD9jlB8DY0herTy_8XiUJuDVjxy5AP
132
132
  lightning_sdk/lightning_cloud/login.py,sha256=7kV7N_48MTSO9eYlC0WfbpRgoA-9ID3RRfooKZpfNIQ,19475
133
133
  lightning_sdk/lightning_cloud/rest_client.py,sha256=H2Iv6aZ2FE8elaCpTkuq8rt3sEmpxZEF-7yuLNGXnts,7012
134
134
  lightning_sdk/lightning_cloud/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
- lightning_sdk/lightning_cloud/openapi/__init__.py,sha256=9RQgzp4q45uRXPsAa3CoivCjTAQYZMYh0x9KmBzVfqw,139445
135
+ lightning_sdk/lightning_cloud/openapi/__init__.py,sha256=7rOe2pyOjqbeThzoo8iMblilXKBROtvtDbYHMmi8hGk,139875
136
136
  lightning_sdk/lightning_cloud/openapi/api_client.py,sha256=pUTQMNcZmH4BhpnuAXuT7wnegaxaX26bzdEWjdoLeTo,25630
137
137
  lightning_sdk/lightning_cloud/openapi/configuration.py,sha256=SkBPJ3WZ9SF1LxxWeGKa4UwbGRsk9p3-yL_Kn7l5CSM,7866
138
138
  lightning_sdk/lightning_cloud/openapi/rest.py,sha256=ZPPr6ZkBp6LtuAsiUU7D8Pz8Dt9ECbEM_26Ov74tdpw,13322
@@ -146,8 +146,8 @@ lightning_sdk/lightning_cloud/openapi/api/blog_posts_service_api.py,sha256=Eaegp
146
146
  lightning_sdk/lightning_cloud/openapi/api/cloud_space_environment_template_service_api.py,sha256=OHwcctL2XHbia155BGEA5w6ZrAK4XfR72oxBGwj6cUg,28794
147
147
  lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py,sha256=mpSf3-kKBtglezO9E3BonHAlCaIQ5Qbyk9Is2WNlhko,467831
148
148
  lightning_sdk/lightning_cloud/openapi/api/cloudy_service_api.py,sha256=gMh5xp_ElpZmYbRzLRM1W9TOdRlpzxMMVl96_Ak020A,13151
149
- lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py,sha256=i5goRk_3rZKIWBJGm2QmAV5IyEoaE0eNSMBoEXAAbJA,224565
150
- lightning_sdk/lightning_cloud/openapi/api/container_registry_service_api.py,sha256=vZJsiBKL8uvvyd7dJVE6q5R38tJN-sFaNyVAGVvTvBU,20396
149
+ lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py,sha256=wxG_qBJvF1ih816X7022C5H7eSfBiXs2CjmNr0ZvRf4,230547
150
+ lightning_sdk/lightning_cloud/openapi/api/container_registry_service_api.py,sha256=D1oH70uTAlJijv9kr_P3WczeUu01YvnKITJaYf8McDo,26200
151
151
  lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py,sha256=IhQmKY-kjy26bJc8LIwfAMms4_wCyI8m6CJxT8cPAGU,61269
152
152
  lightning_sdk/lightning_cloud/openapi/api/dataset_service_api.py,sha256=JwO-CZGSrSEKErELw4L7aSNYg-LWLTGhjpoH7QLfj_4,23616
153
153
  lightning_sdk/lightning_cloud/openapi/api/deployment_templates_service_api.py,sha256=Pa6-rGxs2fB5-kIqqdyf3giQJ6dbK6H3UI_QxcAN-r4,32171
@@ -185,7 +185,7 @@ lightning_sdk/lightning_cloud/openapi/api/studio_jobs_service_api.py,sha256=zKaE
185
185
  lightning_sdk/lightning_cloud/openapi/api/user_service_api.py,sha256=W5GQ346xra7X-84vWS90v1ST2NayPdAEh2fpDC5ys3o,68849
186
186
  lightning_sdk/lightning_cloud/openapi/api/virtual_machine_service_api.py,sha256=mAcfunCy_iciFaVWyMjuYAvlVCs0D9kMU3yKmCCCB-Y,24218
187
187
  lightning_sdk/lightning_cloud/openapi/api/volume_service_api.py,sha256=uEa7KA1kOH14bfcUQVRbv5PmGhROlDnuf9ayVpyYEjk,10408
188
- lightning_sdk/lightning_cloud/openapi/models/__init__.py,sha256=MYoccwYLLu7O7jSJh4Wei7BFDX1y5gdIeHVRqOU5VCQ,134383
188
+ lightning_sdk/lightning_cloud/openapi/models/__init__.py,sha256=jymP7vRajXVKzJVZ8IKtcB2PaYZQJF8rOLZMNBxfKkw,134813
189
189
  lightning_sdk/lightning_cloud/openapi/models/agent_service_agent_complete_part_body.py,sha256=s62A2yWnfiW57SODogVlz4QH2fyvvNtBsLT_Ko4mkNw,3088
190
190
  lightning_sdk/lightning_cloud/openapi/models/agent_service_agent_upload_part_body.py,sha256=G4NFLxYvfgl4qG7V2FSSKpyRQDOUejPV4diLLh8Qp5s,3807
191
191
  lightning_sdk/lightning_cloud/openapi/models/agent_service_create_agent_multipart_upload_body.py,sha256=FcWPrspQYox62lBnAAya3KwNcjy3h03vady0rCM-SuM,4682
@@ -253,6 +253,7 @@ lightning_sdk/lightning_cloud/openapi/models/cluster_service_create_machine_body
253
253
  lightning_sdk/lightning_cloud/openapi/models/cluster_service_create_org_cluster_capacity_reservation_body.py,sha256=CvRjFsIcZHcazaM8BWQR7qfGtq3uOwFKy8fM3P5MSd0,15593
254
254
  lightning_sdk/lightning_cloud/openapi/models/cluster_service_create_project_cluster_body.py,sha256=wv5mbzDvXPHo2iXSPg-bcblO91fCLEvHQ0snDfKpUds,4586
255
255
  lightning_sdk/lightning_cloud/openapi/models/cluster_service_create_server_alert_body.py,sha256=w5XlAS5W_1AgTXc1RAcjrDct-TH_eoiUvRK62iYebTQ,6312
256
+ lightning_sdk/lightning_cloud/openapi/models/cluster_service_get_cluster_capacity_reservation_body.py,sha256=RhQZgXgs2fiE93vJDGr7ce7-h8KXrJdVyKRN2Gk8z7o,3172
256
257
  lightning_sdk/lightning_cloud/openapi/models/cluster_service_interrupt_server_body.py,sha256=Cwg5eSBUNaARg93nflOLuH_Dvo4pOMvBnbNZakrBd_k,3088
257
258
  lightning_sdk/lightning_cloud/openapi/models/cluster_service_purchase_capacity_block_body.py,sha256=POJSYvrHJrp1wOF6YVLY64FviNsHPeJOrJtziLw7Rq4,8519
258
259
  lightning_sdk/lightning_cloud/openapi/models/cluster_service_report_machine_system_metrics_body.py,sha256=9WOyIuAOXy24I1p3U9oQvaXI5Todx8dGi7OQI38ehCI,4208
@@ -759,6 +760,7 @@ lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_required_balance
759
760
  lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_size_response.py,sha256=oTyPx69HOhPsyKaoTcTJfKMFwZahlZtRZOPNqoa0g3o,7455
760
761
  lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_transfer_estimate_response.py,sha256=pQgKIaUtiwSNgNEDZeUEq7fe5REryeWRGUhnhasZM5A,5243
761
762
  lightning_sdk/lightning_cloud/openapi/models/v1_get_cluster_accelerator_demand_response.py,sha256=xxRf6ry2wQM3OsUhfn9wUTUjnvJu0Srv9Dn9Mlezafo,3950
763
+ lightning_sdk/lightning_cloud/openapi/models/v1_get_cluster_capacity_reservation_response.py,sha256=yUz5J5aJoWyfPGXGz0kHnD98YAtxe3zGYxvXD2noZHs,4300
762
764
  lightning_sdk/lightning_cloud/openapi/models/v1_get_cluster_credentials_response.py,sha256=5ryHCeO6hkoK-5THe_dGuBk0EnHSD21u-5AzjGzvv5A,3851
763
765
  lightning_sdk/lightning_cloud/openapi/models/v1_get_cluster_health_response.py,sha256=iKFcdicF7ipDej3YB2rQuiTgQ-Xc6yqcEzxg9siNuxE,4850
764
766
  lightning_sdk/lightning_cloud/openapi/models/v1_get_deployment_routing_telemetry_aggregated_response.py,sha256=aKIn0uwmEPINgrrWXdXlYMCV5a8kqW8MWCLg4aHLCG8,4079
@@ -1195,7 +1197,7 @@ lightning_sdk/lightning_cloud/openapi/models/v1_setup_data_connection_response.p
1195
1197
  lightning_sdk/lightning_cloud/openapi/models/v1_shared_filesystem.py,sha256=IJW1NFl23_IuBbHIAsb26Djc8fFEi5IfsprphUGg2Sw,9452
1196
1198
  lightning_sdk/lightning_cloud/openapi/models/v1_should_start_syncing_response.py,sha256=VMFOOarb05lU61dO_rxe6MmakCAHD998YwUKwyRxELQ,3906
1197
1199
  lightning_sdk/lightning_cloud/openapi/models/v1_signed_url.py,sha256=Nb6sQMTv9YEcmsU55ATGwHP48bIPeGq1PxwInN0I5dI,4267
1198
- lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier.py,sha256=0TNodajIuqkRctMhrb0BA_59Lijee1fnd8HTVRFIwH8,5684
1200
+ lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier.py,sha256=sevoSbrd-P2YbJC_SHG7JfrA1X2_u0rCR9UK7UeqQKI,6839
1199
1201
  lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier_type.py,sha256=jDrut6IfA14M_qEJp0dAv6CtTa91HGk_v1iB-BG9GFk,3215
1200
1202
  lightning_sdk/lightning_cloud/openapi/models/v1_sleep_server_response.py,sha256=onEkx3JTz_ZoArxvudZ-kEeprVShuz34zNTnOAAKuIk,3016
1201
1203
  lightning_sdk/lightning_cloud/openapi/models/v1_slurm_cluster_user.py,sha256=E2T72bpygdvdrO4hnCbqY5eUxyxZ32hG_XbG366BghE,6538
@@ -1251,6 +1253,7 @@ lightning_sdk/lightning_cloud/openapi/models/v1_update_cloud_space_visibility_re
1251
1253
  lightning_sdk/lightning_cloud/openapi/models/v1_update_cluster_accelerators_request.py,sha256=Hz8tGrb6oRzTbtf3AC9QL7B2TlqSEPLzHqDfhosCiB0,4867
1252
1254
  lightning_sdk/lightning_cloud/openapi/models/v1_update_cluster_accelerators_response.py,sha256=Eo8HbgCNJkuIG5Ccyl7wPuOk72FhAhkaPGuAltr4tSw,3100
1253
1255
  lightning_sdk/lightning_cloud/openapi/models/v1_update_cluster_availability_request.py,sha256=E8htNmxp_YBjhqK3HLV42a3tdu5F07-Iv0wtEFTPRjg,6603
1256
+ lightning_sdk/lightning_cloud/openapi/models/v1_update_container_registry_response.py,sha256=jWpnJOlM-Hqv1gms4Cfda5VCXB52LynuNVnVppypqKU,3088
1254
1257
  lightning_sdk/lightning_cloud/openapi/models/v1_update_conversation_like_response.py,sha256=Y35TnUACI047cdpIcz-ow7vgdsMRkPTxjnGI4JmrxCU,4561
1255
1258
  lightning_sdk/lightning_cloud/openapi/models/v1_update_conversation_message_content_response.py,sha256=1PgB6MqG9woYYrguOZogp8z6UqeTqDHklpld8yPvuaw,3957
1256
1259
  lightning_sdk/lightning_cloud/openapi/models/v1_update_conversation_message_like_response.py,sha256=q8SU00NIRsHMnvGEW0T8DEyexiEdiVzY-tyuy5ElZ4s,4918
@@ -1287,7 +1290,7 @@ lightning_sdk/lightning_cloud/openapi/models/v1_upstream_open_ai.py,sha256=jt1qQ
1287
1290
  lightning_sdk/lightning_cloud/openapi/models/v1_usage.py,sha256=ozMzoGD9mfZGYy4J5j50Dps19Y6o8cn-aYW_oRMZMy8,16865
1288
1291
  lightning_sdk/lightning_cloud/openapi/models/v1_usage_details.py,sha256=U7qC698Xj5tb3D93ZskG6sDf3lTXE13UTlGeDTvtRU4,14062
1289
1292
  lightning_sdk/lightning_cloud/openapi/models/v1_usage_report.py,sha256=g75WXNnRZKOpic552CkqaJBKBwNrfBHlTtljCxaYBnI,9176
1290
- lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py,sha256=Exn-0kSYHsnqTCvt9qWaUeiKWZf-JcR8tWJ6tEXvy6U,73692
1293
+ lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py,sha256=boxZvL8OlRHJsgzYsELTVjej33uUjiCcWhflIkq_fcc,72462
1291
1294
  lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_compute_config.py,sha256=vJJr0q5zkRKpt2Myn0Zl3H8xmNxeZ5tDHnOW6xx7GNo,14172
1292
1295
  lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_flow_compute_config.py,sha256=doeY2SKGKoVrMPN5It6BEKs_77NUPsrjffnG2FrihD0,5562
1293
1296
  lightning_sdk/lightning_cloud/openapi/models/v1_user_slurm_job_action_response.py,sha256=BdNzXH8Vsf5PHjl9Rd-TVkpAgx1YC9rf8LD0js-ba20,3058
@@ -1352,9 +1355,9 @@ lightning_sdk/utils/logging.py,sha256=yntvShiZArBy9aG3JvQF0Dfq3nLmuP70x1kD7nYoQB
1352
1355
  lightning_sdk/utils/names.py,sha256=1EuXbIh7wldkDp1FG10oz9vIOyWrpGWeFFVy-DQBgzA,18162
1353
1356
  lightning_sdk/utils/progress.py,sha256=bLWw39fzq29PMWoFXaPIVfoS3Ug245950oWOFJ2ZaiU,12596
1354
1357
  lightning_sdk/utils/resolve.py,sha256=dGn9TxCJqlcv1PK0vjncZq-ACvgbAF4JD61GXNrX3bg,10876
1355
- lightning_sdk-2026.1.27.dist-info/LICENSE,sha256=uFIuZwj5z-4TeF2UuacPZ1o17HkvKObT8fY50qN84sg,1064
1356
- lightning_sdk-2026.1.27.dist-info/METADATA,sha256=SW7zl7bx9aY_7fvvnUDJ7e7mGUECBeawF_86F4e8p7Q,4064
1357
- lightning_sdk-2026.1.27.dist-info/WHEEL,sha256=WnJ8fYhv8N4SYVK2lLYNI6N0kVATA7b0piVUNvqIIJE,91
1358
- lightning_sdk-2026.1.27.dist-info/entry_points.txt,sha256=OoZa4Fc8NMs6GSN0cdA1J8e6couzAcL82CbM1yo4f_M,122
1359
- lightning_sdk-2026.1.27.dist-info/top_level.txt,sha256=ps8doKILFXmN7F1mHncShmnQoTxKBRPIcchC8TpoBw4,19
1360
- lightning_sdk-2026.1.27.dist-info/RECORD,,
1358
+ lightning_sdk-2026.1.30.dist-info/LICENSE,sha256=uFIuZwj5z-4TeF2UuacPZ1o17HkvKObT8fY50qN84sg,1064
1359
+ lightning_sdk-2026.1.30.dist-info/METADATA,sha256=Tw7pFyL867jGkvCwjetyLfxGMGQONKRKQrqerP3iPWY,4064
1360
+ lightning_sdk-2026.1.30.dist-info/WHEEL,sha256=WnJ8fYhv8N4SYVK2lLYNI6N0kVATA7b0piVUNvqIIJE,91
1361
+ lightning_sdk-2026.1.30.dist-info/entry_points.txt,sha256=OoZa4Fc8NMs6GSN0cdA1J8e6couzAcL82CbM1yo4f_M,122
1362
+ lightning_sdk-2026.1.30.dist-info/top_level.txt,sha256=ps8doKILFXmN7F1mHncShmnQoTxKBRPIcchC8TpoBw4,19
1363
+ lightning_sdk-2026.1.30.dist-info/RECORD,,