lightning-sdk 2025.8.18.post0__py3-none-any.whl → 2025.8.19.post0__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.
- lightning_sdk/__init__.py +1 -1
- lightning_sdk/api/studio_api.py +14 -36
- lightning_sdk/api/utils.py +108 -18
- lightning_sdk/lightning_cloud/openapi/__init__.py +1 -0
- lightning_sdk/lightning_cloud/openapi/api/k8_s_cluster_service_api.py +113 -0
- lightning_sdk/lightning_cloud/openapi/models/__init__.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/id_codeconfig_body.py +3 -81
- lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_storage_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/storage_complete_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/uploads_upload_id_body1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_metrics.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_list_aggregated_pod_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_node_metrics.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_cloud_space_instance_config_request.py +3 -81
- lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +1 -105
- {lightning_sdk-2025.8.18.post0.dist-info → lightning_sdk-2025.8.19.post0.dist-info}/METADATA +1 -1
- {lightning_sdk-2025.8.18.post0.dist-info → lightning_sdk-2025.8.19.post0.dist-info}/RECORD +23 -22
- {lightning_sdk-2025.8.18.post0.dist-info → lightning_sdk-2025.8.19.post0.dist-info}/LICENSE +0 -0
- {lightning_sdk-2025.8.18.post0.dist-info → lightning_sdk-2025.8.19.post0.dist-info}/WHEEL +0 -0
- {lightning_sdk-2025.8.18.post0.dist-info → lightning_sdk-2025.8.19.post0.dist-info}/entry_points.txt +0 -0
- {lightning_sdk-2025.8.18.post0.dist-info → lightning_sdk-2025.8.19.post0.dist-info}/top_level.txt +0 -0
lightning_sdk/__init__.py
CHANGED
lightning_sdk/api/studio_api.py
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import os
|
|
3
|
-
import tempfile
|
|
4
3
|
import time
|
|
5
|
-
import
|
|
4
|
+
from pathlib import Path
|
|
6
5
|
from threading import Event, Thread
|
|
7
6
|
from typing import Any, Dict, Generator, List, Mapping, Optional, Tuple, Union
|
|
8
7
|
|
|
@@ -12,6 +11,7 @@ from tqdm import tqdm
|
|
|
12
11
|
|
|
13
12
|
from lightning_sdk.api.utils import (
|
|
14
13
|
_create_app,
|
|
14
|
+
_download_studio_files,
|
|
15
15
|
_DummyBody,
|
|
16
16
|
_DummyResponse,
|
|
17
17
|
_FileUploader,
|
|
@@ -569,46 +569,24 @@ class StudioApi:
|
|
|
569
569
|
progress_bar: bool = True,
|
|
570
570
|
) -> None:
|
|
571
571
|
"""Downloads a given folder from a Studio to a target location."""
|
|
572
|
-
# TODO:
|
|
572
|
+
# TODO: implement resumable downloads
|
|
573
573
|
auth = Auth()
|
|
574
574
|
auth.authenticate()
|
|
575
|
-
token = self._client.auth_service_login(V1LoginRequest(auth.api_key)).token
|
|
576
575
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
"
|
|
581
|
-
}
|
|
576
|
+
prefix = _sanitize_studio_remote_path(path, studio_id)
|
|
577
|
+
# ensure we only download as a directory and not the entire prefix
|
|
578
|
+
if prefix.endswith("/") is False:
|
|
579
|
+
prefix = prefix + "/"
|
|
582
580
|
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
581
|
+
_download_studio_files(
|
|
582
|
+
client=self._client,
|
|
583
|
+
teamspace_id=teamspace_id,
|
|
584
|
+
cluster_id=cloud_account,
|
|
585
|
+
prefix=prefix,
|
|
586
|
+
download_dir=Path(target_path),
|
|
587
|
+
progress_bar=progress_bar,
|
|
587
588
|
)
|
|
588
589
|
|
|
589
|
-
if progress_bar:
|
|
590
|
-
pbar = tqdm(
|
|
591
|
-
desc=f"Downloading {os.path.split(path)[1]}",
|
|
592
|
-
unit="B",
|
|
593
|
-
unit_scale=True,
|
|
594
|
-
unit_divisor=1000,
|
|
595
|
-
)
|
|
596
|
-
|
|
597
|
-
pbar_update = pbar.update
|
|
598
|
-
else:
|
|
599
|
-
pbar_update = lambda x: None
|
|
600
|
-
|
|
601
|
-
if target_path:
|
|
602
|
-
os.makedirs(target_path, exist_ok=True)
|
|
603
|
-
|
|
604
|
-
with tempfile.TemporaryFile() as f:
|
|
605
|
-
for chunk in r.iter_content(chunk_size=4096 * 8):
|
|
606
|
-
f.write(chunk)
|
|
607
|
-
pbar_update(len(chunk))
|
|
608
|
-
|
|
609
|
-
with zipfile.ZipFile(f) as z:
|
|
610
|
-
z.extractall(target_path)
|
|
611
|
-
|
|
612
590
|
def install_plugin(self, studio_id: str, teamspace_id: str, plugin_name: str) -> str:
|
|
613
591
|
"""Installs the given plugin."""
|
|
614
592
|
resp: V1Plugin = self._client.cloud_space_service_install_plugin(
|
lightning_sdk/api/utils.py
CHANGED
|
@@ -6,7 +6,7 @@ import re
|
|
|
6
6
|
from concurrent.futures import ThreadPoolExecutor
|
|
7
7
|
from functools import partial
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
9
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, TypedDict, Union
|
|
10
10
|
|
|
11
11
|
import backoff
|
|
12
12
|
import requests
|
|
@@ -19,6 +19,7 @@ from lightning_sdk.lightning_cloud.openapi import (
|
|
|
19
19
|
ModelsStoreApi,
|
|
20
20
|
ProjectIdStorageBody,
|
|
21
21
|
StorageCompleteBody,
|
|
22
|
+
StorageServiceApi,
|
|
22
23
|
UploadIdCompleteBody,
|
|
23
24
|
UploadIdPartsBody,
|
|
24
25
|
V1CompletedPart,
|
|
@@ -367,38 +368,40 @@ _DOWNLOAD_REQUEST_CHUNK_SIZE = 10 * _BYTES_PER_MB
|
|
|
367
368
|
_DOWNLOAD_MIN_CHUNK_SIZE = 100 * _BYTES_PER_KB
|
|
368
369
|
|
|
369
370
|
|
|
371
|
+
class _RefreshResponse(TypedDict):
|
|
372
|
+
url: str
|
|
373
|
+
size: int
|
|
374
|
+
|
|
375
|
+
|
|
370
376
|
class _FileDownloader:
|
|
371
377
|
def __init__(
|
|
372
378
|
self,
|
|
373
|
-
client: LightningClient,
|
|
374
|
-
model_id: str,
|
|
375
|
-
version: str,
|
|
376
379
|
teamspace_id: str,
|
|
377
380
|
remote_path: str,
|
|
378
381
|
file_path: str,
|
|
379
382
|
executor: ThreadPoolExecutor,
|
|
380
383
|
num_workers: int = 20,
|
|
381
384
|
progress_bar: Optional[tqdm] = None,
|
|
385
|
+
url: Optional[str] = None,
|
|
386
|
+
size: Optional[int] = None,
|
|
387
|
+
refresh_fn: Optional[Callable[[], _RefreshResponse]] = None,
|
|
382
388
|
) -> None:
|
|
383
|
-
self.api = ModelsStoreApi(client.api_client)
|
|
384
|
-
self.model_id = model_id
|
|
385
|
-
self.version = version
|
|
386
389
|
self.teamspace_id = teamspace_id
|
|
387
390
|
self.local_path = file_path
|
|
388
391
|
self.remote_path = remote_path
|
|
389
392
|
self.progress_bar = progress_bar
|
|
390
393
|
self.num_workers = num_workers
|
|
391
|
-
self._url =
|
|
392
|
-
self._size =
|
|
394
|
+
self._url = url
|
|
395
|
+
self._size = size
|
|
393
396
|
self.executor = executor
|
|
397
|
+
self.refresh_fn = refresh_fn
|
|
394
398
|
|
|
395
399
|
@backoff.on_exception(backoff.expo, ApiException, max_tries=10)
|
|
396
400
|
def refresh(self) -> None:
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
self._size = int(response.size)
|
|
401
|
+
if self.refresh_fn is not None:
|
|
402
|
+
response = self.refresh_fn()
|
|
403
|
+
self._url = response["url"]
|
|
404
|
+
self._size = response["size"]
|
|
402
405
|
|
|
403
406
|
@property
|
|
404
407
|
def url(self) -> str:
|
|
@@ -413,6 +416,11 @@ class _FileDownloader:
|
|
|
413
416
|
return
|
|
414
417
|
self.progress_bar.update(n)
|
|
415
418
|
|
|
419
|
+
def update_filename(self, desc: str) -> None:
|
|
420
|
+
if self.progress_bar is None:
|
|
421
|
+
return
|
|
422
|
+
self.progress_bar.set_description(f"{(desc[:72] + '...') if len(desc) > 75 else desc:<75.75}")
|
|
423
|
+
|
|
416
424
|
@backoff.on_exception(backoff.expo, (requests.exceptions.HTTPError), max_tries=10)
|
|
417
425
|
def _download_chunk(self, filename: str, start_end: Tuple[int]) -> None:
|
|
418
426
|
start, end = start_end
|
|
@@ -447,6 +455,8 @@ class _FileDownloader:
|
|
|
447
455
|
f.write(b"\x00" * remaining_size)
|
|
448
456
|
|
|
449
457
|
def _multipart_download(self, filename: str, num_workers: int) -> None:
|
|
458
|
+
self.update_filename(f"Downloading {self.remote_path}")
|
|
459
|
+
|
|
450
460
|
num_chunks = num_workers
|
|
451
461
|
chunk_size = math.ceil(self.size / num_chunks)
|
|
452
462
|
|
|
@@ -464,7 +474,8 @@ class _FileDownloader:
|
|
|
464
474
|
concurrent.futures.wait(futures)
|
|
465
475
|
|
|
466
476
|
def download(self) -> None:
|
|
467
|
-
self.
|
|
477
|
+
if self.url is None:
|
|
478
|
+
self.refresh()
|
|
468
479
|
|
|
469
480
|
tmp_filename = f"{self.local_path}.download"
|
|
470
481
|
|
|
@@ -539,6 +550,15 @@ def _download_model_files(
|
|
|
539
550
|
mininterval=1,
|
|
540
551
|
)
|
|
541
552
|
|
|
553
|
+
def refresh_fn(filename: str) -> _RefreshResponse:
|
|
554
|
+
resp = api.models_store_get_model_file_url(
|
|
555
|
+
project_id=response.project_id,
|
|
556
|
+
model_id=response.model_id,
|
|
557
|
+
version=response.version,
|
|
558
|
+
filepath=filename,
|
|
559
|
+
)
|
|
560
|
+
return {"url": resp.url, "size": int(resp.size)}
|
|
561
|
+
|
|
542
562
|
with ThreadPoolExecutor(max_workers=min(num_workers, len(response.filepaths))) as file_executor, ThreadPoolExecutor(
|
|
543
563
|
max_workers=num_workers
|
|
544
564
|
) as part_executor:
|
|
@@ -549,15 +569,13 @@ def _download_model_files(
|
|
|
549
569
|
local_file.parent.mkdir(parents=True, exist_ok=True)
|
|
550
570
|
|
|
551
571
|
file_downloader = _FileDownloader(
|
|
552
|
-
client=client,
|
|
553
|
-
model_id=response.model_id,
|
|
554
|
-
version=response.version,
|
|
555
572
|
teamspace_id=response.project_id,
|
|
556
573
|
remote_path=filepath,
|
|
557
574
|
file_path=str(local_file),
|
|
558
575
|
num_workers=num_workers,
|
|
559
576
|
progress_bar=pbar,
|
|
560
577
|
executor=part_executor,
|
|
578
|
+
refresh_fn=lambda f=filepath: refresh_fn(f),
|
|
561
579
|
)
|
|
562
580
|
|
|
563
581
|
futures.append(file_executor.submit(file_downloader.download))
|
|
@@ -568,6 +586,78 @@ def _download_model_files(
|
|
|
568
586
|
return response.filepaths
|
|
569
587
|
|
|
570
588
|
|
|
589
|
+
def _download_studio_files(
|
|
590
|
+
client: LightningClient,
|
|
591
|
+
teamspace_id: str,
|
|
592
|
+
cluster_id: str,
|
|
593
|
+
prefix: str,
|
|
594
|
+
download_dir: Path,
|
|
595
|
+
progress_bar: bool,
|
|
596
|
+
num_workers: int = os.cpu_count() * 4,
|
|
597
|
+
) -> None:
|
|
598
|
+
api = StorageServiceApi(client.api_client)
|
|
599
|
+
response = None
|
|
600
|
+
|
|
601
|
+
pbar = None
|
|
602
|
+
if progress_bar:
|
|
603
|
+
pbar = tqdm(
|
|
604
|
+
desc="Downloading files",
|
|
605
|
+
unit="B",
|
|
606
|
+
unit_scale=True,
|
|
607
|
+
unit_divisor=1000,
|
|
608
|
+
position=-1,
|
|
609
|
+
mininterval=1,
|
|
610
|
+
)
|
|
611
|
+
|
|
612
|
+
def refresh_fn(filename: str) -> _RefreshResponse:
|
|
613
|
+
resp = api.storage_service_list_project_artifacts(
|
|
614
|
+
project_id=teamspace_id,
|
|
615
|
+
cluster_id=cluster_id,
|
|
616
|
+
page_token="",
|
|
617
|
+
include_download_url=True,
|
|
618
|
+
prefix=prefix + filename,
|
|
619
|
+
page_size=1,
|
|
620
|
+
)
|
|
621
|
+
return {"url": resp.artifacts[0].url, "size": int(resp.artifacts[0].size_bytes)}
|
|
622
|
+
|
|
623
|
+
with ThreadPoolExecutor(max_workers=num_workers) as file_executor, ThreadPoolExecutor(
|
|
624
|
+
max_workers=num_workers
|
|
625
|
+
) as part_executor:
|
|
626
|
+
while response is None or (response is not None and response.next_page_token != ""):
|
|
627
|
+
response = api.storage_service_list_project_artifacts(
|
|
628
|
+
project_id=teamspace_id,
|
|
629
|
+
cluster_id=cluster_id,
|
|
630
|
+
page_token=response.next_page_token if response is not None else "",
|
|
631
|
+
include_download_url=True,
|
|
632
|
+
prefix=prefix,
|
|
633
|
+
page_size=1000,
|
|
634
|
+
)
|
|
635
|
+
|
|
636
|
+
page_futures = []
|
|
637
|
+
for file in response.artifacts:
|
|
638
|
+
local_file = download_dir / file.filename
|
|
639
|
+
local_file.parent.mkdir(parents=True, exist_ok=True)
|
|
640
|
+
|
|
641
|
+
file_downloader = _FileDownloader(
|
|
642
|
+
teamspace_id=teamspace_id,
|
|
643
|
+
remote_path=file.filename,
|
|
644
|
+
file_path=str(local_file),
|
|
645
|
+
num_workers=num_workers,
|
|
646
|
+
progress_bar=pbar,
|
|
647
|
+
executor=part_executor,
|
|
648
|
+
url=file.url,
|
|
649
|
+
size=int(file.size_bytes),
|
|
650
|
+
refresh_fn=lambda f=file: refresh_fn(f.filename),
|
|
651
|
+
)
|
|
652
|
+
|
|
653
|
+
page_futures.append(file_executor.submit(file_downloader.download))
|
|
654
|
+
|
|
655
|
+
if page_futures:
|
|
656
|
+
concurrent.futures.wait(page_futures)
|
|
657
|
+
|
|
658
|
+
pbar.set_description("Download complete")
|
|
659
|
+
|
|
660
|
+
|
|
571
661
|
def _create_app(
|
|
572
662
|
client: CloudSpaceServiceApi,
|
|
573
663
|
studio_id: str,
|
|
@@ -638,6 +638,7 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_like_status import V1LikeSt
|
|
|
638
638
|
from lightning_sdk.lightning_cloud.openapi.models.v1_list_affiliate_links_response import V1ListAffiliateLinksResponse
|
|
639
639
|
from lightning_sdk.lightning_cloud.openapi.models.v1_list_agent_job_artifacts_response import V1ListAgentJobArtifactsResponse
|
|
640
640
|
from lightning_sdk.lightning_cloud.openapi.models.v1_list_agent_jobs_response import V1ListAgentJobsResponse
|
|
641
|
+
from lightning_sdk.lightning_cloud.openapi.models.v1_list_aggregated_pod_metrics_response import V1ListAggregatedPodMetricsResponse
|
|
641
642
|
from lightning_sdk.lightning_cloud.openapi.models.v1_list_assistants_response import V1ListAssistantsResponse
|
|
642
643
|
from lightning_sdk.lightning_cloud.openapi.models.v1_list_blog_posts_response import V1ListBlogPostsResponse
|
|
643
644
|
from lightning_sdk.lightning_cloud.openapi.models.v1_list_cloud_space_apps_response import V1ListCloudSpaceAppsResponse
|
|
@@ -160,6 +160,119 @@ class K8SClusterServiceApi(object):
|
|
|
160
160
|
_request_timeout=params.get('_request_timeout'),
|
|
161
161
|
collection_formats=collection_formats)
|
|
162
162
|
|
|
163
|
+
def k8_s_cluster_service_list_aggregated_pod_metrics(self, project_id: 'str', cluster_id: 'str', **kwargs) -> 'V1ListAggregatedPodMetricsResponse': # noqa: E501
|
|
164
|
+
"""k8_s_cluster_service_list_aggregated_pod_metrics # noqa: E501
|
|
165
|
+
|
|
166
|
+
This method makes a synchronous HTTP request by default. To make an
|
|
167
|
+
asynchronous HTTP request, please pass async_req=True
|
|
168
|
+
>>> thread = api.k8_s_cluster_service_list_aggregated_pod_metrics(project_id, cluster_id, async_req=True)
|
|
169
|
+
>>> result = thread.get()
|
|
170
|
+
|
|
171
|
+
:param async_req bool
|
|
172
|
+
:param str project_id: (required)
|
|
173
|
+
:param str cluster_id: (required)
|
|
174
|
+
:param str namespace:
|
|
175
|
+
:param datetime start: Date range.
|
|
176
|
+
:param datetime end:
|
|
177
|
+
:return: V1ListAggregatedPodMetricsResponse
|
|
178
|
+
If the method is called asynchronously,
|
|
179
|
+
returns the request thread.
|
|
180
|
+
"""
|
|
181
|
+
kwargs['_return_http_data_only'] = True
|
|
182
|
+
if kwargs.get('async_req'):
|
|
183
|
+
return self.k8_s_cluster_service_list_aggregated_pod_metrics_with_http_info(project_id, cluster_id, **kwargs) # noqa: E501
|
|
184
|
+
else:
|
|
185
|
+
(data) = self.k8_s_cluster_service_list_aggregated_pod_metrics_with_http_info(project_id, cluster_id, **kwargs) # noqa: E501
|
|
186
|
+
return data
|
|
187
|
+
|
|
188
|
+
def k8_s_cluster_service_list_aggregated_pod_metrics_with_http_info(self, project_id: 'str', cluster_id: 'str', **kwargs) -> 'V1ListAggregatedPodMetricsResponse': # noqa: E501
|
|
189
|
+
"""k8_s_cluster_service_list_aggregated_pod_metrics # noqa: E501
|
|
190
|
+
|
|
191
|
+
This method makes a synchronous HTTP request by default. To make an
|
|
192
|
+
asynchronous HTTP request, please pass async_req=True
|
|
193
|
+
>>> thread = api.k8_s_cluster_service_list_aggregated_pod_metrics_with_http_info(project_id, cluster_id, async_req=True)
|
|
194
|
+
>>> result = thread.get()
|
|
195
|
+
|
|
196
|
+
:param async_req bool
|
|
197
|
+
:param str project_id: (required)
|
|
198
|
+
:param str cluster_id: (required)
|
|
199
|
+
:param str namespace:
|
|
200
|
+
:param datetime start: Date range.
|
|
201
|
+
:param datetime end:
|
|
202
|
+
:return: V1ListAggregatedPodMetricsResponse
|
|
203
|
+
If the method is called asynchronously,
|
|
204
|
+
returns the request thread.
|
|
205
|
+
"""
|
|
206
|
+
|
|
207
|
+
all_params = ['project_id', 'cluster_id', 'namespace', 'start', 'end'] # noqa: E501
|
|
208
|
+
all_params.append('async_req')
|
|
209
|
+
all_params.append('_return_http_data_only')
|
|
210
|
+
all_params.append('_preload_content')
|
|
211
|
+
all_params.append('_request_timeout')
|
|
212
|
+
|
|
213
|
+
params = locals()
|
|
214
|
+
for key, val in six.iteritems(params['kwargs']):
|
|
215
|
+
if key not in all_params:
|
|
216
|
+
raise TypeError(
|
|
217
|
+
"Got an unexpected keyword argument '%s'"
|
|
218
|
+
" to method k8_s_cluster_service_list_aggregated_pod_metrics" % key
|
|
219
|
+
)
|
|
220
|
+
params[key] = val
|
|
221
|
+
del params['kwargs']
|
|
222
|
+
# verify the required parameter 'project_id' is set
|
|
223
|
+
if ('project_id' not in params or
|
|
224
|
+
params['project_id'] is None):
|
|
225
|
+
raise ValueError("Missing the required parameter `project_id` when calling `k8_s_cluster_service_list_aggregated_pod_metrics`") # noqa: E501
|
|
226
|
+
# verify the required parameter 'cluster_id' is set
|
|
227
|
+
if ('cluster_id' not in params or
|
|
228
|
+
params['cluster_id'] is None):
|
|
229
|
+
raise ValueError("Missing the required parameter `cluster_id` when calling `k8_s_cluster_service_list_aggregated_pod_metrics`") # noqa: E501
|
|
230
|
+
|
|
231
|
+
collection_formats = {}
|
|
232
|
+
|
|
233
|
+
path_params = {}
|
|
234
|
+
if 'project_id' in params:
|
|
235
|
+
path_params['projectId'] = params['project_id'] # noqa: E501
|
|
236
|
+
if 'cluster_id' in params:
|
|
237
|
+
path_params['clusterId'] = params['cluster_id'] # noqa: E501
|
|
238
|
+
|
|
239
|
+
query_params = []
|
|
240
|
+
if 'namespace' in params:
|
|
241
|
+
query_params.append(('namespace', params['namespace'])) # noqa: E501
|
|
242
|
+
if 'start' in params:
|
|
243
|
+
query_params.append(('start', params['start'])) # noqa: E501
|
|
244
|
+
if 'end' in params:
|
|
245
|
+
query_params.append(('end', params['end'])) # noqa: E501
|
|
246
|
+
|
|
247
|
+
header_params = {}
|
|
248
|
+
|
|
249
|
+
form_params = []
|
|
250
|
+
local_var_files = {}
|
|
251
|
+
|
|
252
|
+
body_params = None
|
|
253
|
+
# HTTP header `Accept`
|
|
254
|
+
header_params['Accept'] = self.api_client.select_header_accept(
|
|
255
|
+
['application/json']) # noqa: E501
|
|
256
|
+
|
|
257
|
+
# Authentication setting
|
|
258
|
+
auth_settings = [] # noqa: E501
|
|
259
|
+
|
|
260
|
+
return self.api_client.call_api(
|
|
261
|
+
'/v1/projects/{projectId}/clusters/{clusterId}/aggregated-metrics/pods', 'GET',
|
|
262
|
+
path_params,
|
|
263
|
+
query_params,
|
|
264
|
+
header_params,
|
|
265
|
+
body=body_params,
|
|
266
|
+
post_params=form_params,
|
|
267
|
+
files=local_var_files,
|
|
268
|
+
response_type='V1ListAggregatedPodMetricsResponse', # noqa: E501
|
|
269
|
+
auth_settings=auth_settings,
|
|
270
|
+
async_req=params.get('async_req'),
|
|
271
|
+
_return_http_data_only=params.get('_return_http_data_only'),
|
|
272
|
+
_preload_content=params.get('_preload_content', True),
|
|
273
|
+
_request_timeout=params.get('_request_timeout'),
|
|
274
|
+
collection_formats=collection_formats)
|
|
275
|
+
|
|
163
276
|
def k8_s_cluster_service_list_cluster_metrics(self, project_id: 'str', cluster_id: 'str', **kwargs) -> 'V1ListClusterMetricsResponse': # noqa: E501
|
|
164
277
|
"""k8_s_cluster_service_list_cluster_metrics # noqa: E501
|
|
165
278
|
|
|
@@ -590,6 +590,7 @@ from lightning_sdk.lightning_cloud.openapi.models.v1_like_status import V1LikeSt
|
|
|
590
590
|
from lightning_sdk.lightning_cloud.openapi.models.v1_list_affiliate_links_response import V1ListAffiliateLinksResponse
|
|
591
591
|
from lightning_sdk.lightning_cloud.openapi.models.v1_list_agent_job_artifacts_response import V1ListAgentJobArtifactsResponse
|
|
592
592
|
from lightning_sdk.lightning_cloud.openapi.models.v1_list_agent_jobs_response import V1ListAgentJobsResponse
|
|
593
|
+
from lightning_sdk.lightning_cloud.openapi.models.v1_list_aggregated_pod_metrics_response import V1ListAggregatedPodMetricsResponse
|
|
593
594
|
from lightning_sdk.lightning_cloud.openapi.models.v1_list_assistants_response import V1ListAssistantsResponse
|
|
594
595
|
from lightning_sdk.lightning_cloud.openapi.models.v1_list_blog_posts_response import V1ListBlogPostsResponse
|
|
595
596
|
from lightning_sdk.lightning_cloud.openapi.models.v1_list_cloud_space_apps_response import V1ListCloudSpaceAppsResponse
|
|
@@ -43,47 +43,32 @@ class IdCodeconfigBody(object):
|
|
|
43
43
|
swagger_types = {
|
|
44
44
|
'compute_config': 'V1UserRequestedComputeConfig',
|
|
45
45
|
'data_connection_mounts': 'list[V1DataConnectionMount]',
|
|
46
|
-
'disable_auto_shutdown': 'bool',
|
|
47
46
|
'ide': 'str',
|
|
48
|
-
'
|
|
49
|
-
'port_plugin_port': 'str',
|
|
50
|
-
'switch_to_default_machine_on_idle': 'bool'
|
|
47
|
+
'port_plugin_port': 'str'
|
|
51
48
|
}
|
|
52
49
|
|
|
53
50
|
attribute_map = {
|
|
54
51
|
'compute_config': 'computeConfig',
|
|
55
52
|
'data_connection_mounts': 'dataConnectionMounts',
|
|
56
|
-
'disable_auto_shutdown': 'disableAutoShutdown',
|
|
57
53
|
'ide': 'ide',
|
|
58
|
-
'
|
|
59
|
-
'port_plugin_port': 'portPluginPort',
|
|
60
|
-
'switch_to_default_machine_on_idle': 'switchToDefaultMachineOnIdle'
|
|
54
|
+
'port_plugin_port': 'portPluginPort'
|
|
61
55
|
}
|
|
62
56
|
|
|
63
|
-
def __init__(self, compute_config: 'V1UserRequestedComputeConfig' =None, data_connection_mounts: 'list[V1DataConnectionMount]' =None,
|
|
57
|
+
def __init__(self, compute_config: 'V1UserRequestedComputeConfig' =None, data_connection_mounts: 'list[V1DataConnectionMount]' =None, ide: 'str' =None, port_plugin_port: 'str' =None): # noqa: E501
|
|
64
58
|
"""IdCodeconfigBody - a model defined in Swagger""" # noqa: E501
|
|
65
59
|
self._compute_config = None
|
|
66
60
|
self._data_connection_mounts = None
|
|
67
|
-
self._disable_auto_shutdown = None
|
|
68
61
|
self._ide = None
|
|
69
|
-
self._idle_shutdown_seconds = None
|
|
70
62
|
self._port_plugin_port = None
|
|
71
|
-
self._switch_to_default_machine_on_idle = None
|
|
72
63
|
self.discriminator = None
|
|
73
64
|
if compute_config is not None:
|
|
74
65
|
self.compute_config = compute_config
|
|
75
66
|
if data_connection_mounts is not None:
|
|
76
67
|
self.data_connection_mounts = data_connection_mounts
|
|
77
|
-
if disable_auto_shutdown is not None:
|
|
78
|
-
self.disable_auto_shutdown = disable_auto_shutdown
|
|
79
68
|
if ide is not None:
|
|
80
69
|
self.ide = ide
|
|
81
|
-
if idle_shutdown_seconds is not None:
|
|
82
|
-
self.idle_shutdown_seconds = idle_shutdown_seconds
|
|
83
70
|
if port_plugin_port is not None:
|
|
84
71
|
self.port_plugin_port = port_plugin_port
|
|
85
|
-
if switch_to_default_machine_on_idle is not None:
|
|
86
|
-
self.switch_to_default_machine_on_idle = switch_to_default_machine_on_idle
|
|
87
72
|
|
|
88
73
|
@property
|
|
89
74
|
def compute_config(self) -> 'V1UserRequestedComputeConfig':
|
|
@@ -127,27 +112,6 @@ class IdCodeconfigBody(object):
|
|
|
127
112
|
|
|
128
113
|
self._data_connection_mounts = data_connection_mounts
|
|
129
114
|
|
|
130
|
-
@property
|
|
131
|
-
def disable_auto_shutdown(self) -> 'bool':
|
|
132
|
-
"""Gets the disable_auto_shutdown of this IdCodeconfigBody. # noqa: E501
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
:return: The disable_auto_shutdown of this IdCodeconfigBody. # noqa: E501
|
|
136
|
-
:rtype: bool
|
|
137
|
-
"""
|
|
138
|
-
return self._disable_auto_shutdown
|
|
139
|
-
|
|
140
|
-
@disable_auto_shutdown.setter
|
|
141
|
-
def disable_auto_shutdown(self, disable_auto_shutdown: 'bool'):
|
|
142
|
-
"""Sets the disable_auto_shutdown of this IdCodeconfigBody.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
:param disable_auto_shutdown: The disable_auto_shutdown of this IdCodeconfigBody. # noqa: E501
|
|
146
|
-
:type: bool
|
|
147
|
-
"""
|
|
148
|
-
|
|
149
|
-
self._disable_auto_shutdown = disable_auto_shutdown
|
|
150
|
-
|
|
151
115
|
@property
|
|
152
116
|
def ide(self) -> 'str':
|
|
153
117
|
"""Gets the ide of this IdCodeconfigBody. # noqa: E501
|
|
@@ -169,27 +133,6 @@ class IdCodeconfigBody(object):
|
|
|
169
133
|
|
|
170
134
|
self._ide = ide
|
|
171
135
|
|
|
172
|
-
@property
|
|
173
|
-
def idle_shutdown_seconds(self) -> 'int':
|
|
174
|
-
"""Gets the idle_shutdown_seconds of this IdCodeconfigBody. # noqa: E501
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
:return: The idle_shutdown_seconds of this IdCodeconfigBody. # noqa: E501
|
|
178
|
-
:rtype: int
|
|
179
|
-
"""
|
|
180
|
-
return self._idle_shutdown_seconds
|
|
181
|
-
|
|
182
|
-
@idle_shutdown_seconds.setter
|
|
183
|
-
def idle_shutdown_seconds(self, idle_shutdown_seconds: 'int'):
|
|
184
|
-
"""Sets the idle_shutdown_seconds of this IdCodeconfigBody.
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
:param idle_shutdown_seconds: The idle_shutdown_seconds of this IdCodeconfigBody. # noqa: E501
|
|
188
|
-
:type: int
|
|
189
|
-
"""
|
|
190
|
-
|
|
191
|
-
self._idle_shutdown_seconds = idle_shutdown_seconds
|
|
192
|
-
|
|
193
136
|
@property
|
|
194
137
|
def port_plugin_port(self) -> 'str':
|
|
195
138
|
"""Gets the port_plugin_port of this IdCodeconfigBody. # noqa: E501
|
|
@@ -211,27 +154,6 @@ class IdCodeconfigBody(object):
|
|
|
211
154
|
|
|
212
155
|
self._port_plugin_port = port_plugin_port
|
|
213
156
|
|
|
214
|
-
@property
|
|
215
|
-
def switch_to_default_machine_on_idle(self) -> 'bool':
|
|
216
|
-
"""Gets the switch_to_default_machine_on_idle of this IdCodeconfigBody. # noqa: E501
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
:return: The switch_to_default_machine_on_idle of this IdCodeconfigBody. # noqa: E501
|
|
220
|
-
:rtype: bool
|
|
221
|
-
"""
|
|
222
|
-
return self._switch_to_default_machine_on_idle
|
|
223
|
-
|
|
224
|
-
@switch_to_default_machine_on_idle.setter
|
|
225
|
-
def switch_to_default_machine_on_idle(self, switch_to_default_machine_on_idle: 'bool'):
|
|
226
|
-
"""Sets the switch_to_default_machine_on_idle of this IdCodeconfigBody.
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
:param switch_to_default_machine_on_idle: The switch_to_default_machine_on_idle of this IdCodeconfigBody. # noqa: E501
|
|
230
|
-
:type: bool
|
|
231
|
-
"""
|
|
232
|
-
|
|
233
|
-
self._switch_to_default_machine_on_idle = switch_to_default_machine_on_idle
|
|
234
|
-
|
|
235
157
|
def to_dict(self) -> dict:
|
|
236
158
|
"""Returns the model properties as a dict"""
|
|
237
159
|
result = {}
|
|
@@ -73,6 +73,7 @@ class OrgsIdBody(object):
|
|
|
73
73
|
'preferred_cluster': 'str',
|
|
74
74
|
'preferred_deployment_provider': 'str',
|
|
75
75
|
'preferred_studio_provider': 'str',
|
|
76
|
+
'show_model_apis_tab': 'bool',
|
|
76
77
|
'start_studios_on_spot_instance': 'bool',
|
|
77
78
|
'switch_to_default_machine_on_idle': 'bool',
|
|
78
79
|
'teamspace_default_credits': 'float',
|
|
@@ -113,6 +114,7 @@ class OrgsIdBody(object):
|
|
|
113
114
|
'preferred_cluster': 'preferredCluster',
|
|
114
115
|
'preferred_deployment_provider': 'preferredDeploymentProvider',
|
|
115
116
|
'preferred_studio_provider': 'preferredStudioProvider',
|
|
117
|
+
'show_model_apis_tab': 'showModelApisTab',
|
|
116
118
|
'start_studios_on_spot_instance': 'startStudiosOnSpotInstance',
|
|
117
119
|
'switch_to_default_machine_on_idle': 'switchToDefaultMachineOnIdle',
|
|
118
120
|
'teamspace_default_credits': 'teamspaceDefaultCredits',
|
|
@@ -120,7 +122,7 @@ class OrgsIdBody(object):
|
|
|
120
122
|
'workload_max_run_duration': 'workloadMaxRunDuration'
|
|
121
123
|
}
|
|
122
124
|
|
|
123
|
-
def __init__(self, alerts_config: 'V1AlertsConfig' =None, allow_budgeting: 'bool' =None, allow_credits_auto_replenish: 'bool' =None, allow_external_project_duplication: 'bool' =None, allow_guest: 'bool' =None, allow_marketplace: 'bool' =None, allow_member_invitations: 'bool' =None, allow_member_teamspace_creation: 'bool' =None, auto_invite_by_domain: 'bool' =None, auto_join_domains: 'list[str]' =None, auto_replenish_amount: 'float' =None, auto_replenish_threshold: 'float' =None, auto_switch_machine: 'bool' =None, default_machine_type: 'str' =None, default_project_id: 'str' =None, description: 'str' =None, disallow_aws_saas: 'bool' =None, disallow_dgx_saas: 'bool' =None, disallow_gcp_saas: 'bool' =None, disallow_lambda_saas: 'bool' =None, disallow_lightning_saas: 'bool' =None, disallow_nebius_saas: 'bool' =None, disallow_voltage_park_saas: 'bool' =None, disallow_vultr_saas: 'bool' =None, display_name: 'str' =None, domain: 'str' =None, email: 'str' =None, featured_gallery: 'bool' =None, location: 'str' =None, preferred_cluster: 'str' =None, preferred_deployment_provider: 'str' =None, preferred_studio_provider: 'str' =None, start_studios_on_spot_instance: 'bool' =None, switch_to_default_machine_on_idle: 'bool' =None, teamspace_default_credits: 'float' =None, twitter_username: 'str' =None, workload_max_run_duration: 'str' =None): # noqa: E501
|
|
125
|
+
def __init__(self, alerts_config: 'V1AlertsConfig' =None, allow_budgeting: 'bool' =None, allow_credits_auto_replenish: 'bool' =None, allow_external_project_duplication: 'bool' =None, allow_guest: 'bool' =None, allow_marketplace: 'bool' =None, allow_member_invitations: 'bool' =None, allow_member_teamspace_creation: 'bool' =None, auto_invite_by_domain: 'bool' =None, auto_join_domains: 'list[str]' =None, auto_replenish_amount: 'float' =None, auto_replenish_threshold: 'float' =None, auto_switch_machine: 'bool' =None, default_machine_type: 'str' =None, default_project_id: 'str' =None, description: 'str' =None, disallow_aws_saas: 'bool' =None, disallow_dgx_saas: 'bool' =None, disallow_gcp_saas: 'bool' =None, disallow_lambda_saas: 'bool' =None, disallow_lightning_saas: 'bool' =None, disallow_nebius_saas: 'bool' =None, disallow_voltage_park_saas: 'bool' =None, disallow_vultr_saas: 'bool' =None, display_name: 'str' =None, domain: 'str' =None, email: 'str' =None, featured_gallery: 'bool' =None, location: 'str' =None, preferred_cluster: 'str' =None, preferred_deployment_provider: 'str' =None, preferred_studio_provider: 'str' =None, show_model_apis_tab: 'bool' =None, start_studios_on_spot_instance: 'bool' =None, switch_to_default_machine_on_idle: 'bool' =None, teamspace_default_credits: 'float' =None, twitter_username: 'str' =None, workload_max_run_duration: 'str' =None): # noqa: E501
|
|
124
126
|
"""OrgsIdBody - a model defined in Swagger""" # noqa: E501
|
|
125
127
|
self._alerts_config = None
|
|
126
128
|
self._allow_budgeting = None
|
|
@@ -154,6 +156,7 @@ class OrgsIdBody(object):
|
|
|
154
156
|
self._preferred_cluster = None
|
|
155
157
|
self._preferred_deployment_provider = None
|
|
156
158
|
self._preferred_studio_provider = None
|
|
159
|
+
self._show_model_apis_tab = None
|
|
157
160
|
self._start_studios_on_spot_instance = None
|
|
158
161
|
self._switch_to_default_machine_on_idle = None
|
|
159
162
|
self._teamspace_default_credits = None
|
|
@@ -224,6 +227,8 @@ class OrgsIdBody(object):
|
|
|
224
227
|
self.preferred_deployment_provider = preferred_deployment_provider
|
|
225
228
|
if preferred_studio_provider is not None:
|
|
226
229
|
self.preferred_studio_provider = preferred_studio_provider
|
|
230
|
+
if show_model_apis_tab is not None:
|
|
231
|
+
self.show_model_apis_tab = show_model_apis_tab
|
|
227
232
|
if start_studios_on_spot_instance is not None:
|
|
228
233
|
self.start_studios_on_spot_instance = start_studios_on_spot_instance
|
|
229
234
|
if switch_to_default_machine_on_idle is not None:
|
|
@@ -907,6 +912,27 @@ class OrgsIdBody(object):
|
|
|
907
912
|
|
|
908
913
|
self._preferred_studio_provider = preferred_studio_provider
|
|
909
914
|
|
|
915
|
+
@property
|
|
916
|
+
def show_model_apis_tab(self) -> 'bool':
|
|
917
|
+
"""Gets the show_model_apis_tab of this OrgsIdBody. # noqa: E501
|
|
918
|
+
|
|
919
|
+
|
|
920
|
+
:return: The show_model_apis_tab of this OrgsIdBody. # noqa: E501
|
|
921
|
+
:rtype: bool
|
|
922
|
+
"""
|
|
923
|
+
return self._show_model_apis_tab
|
|
924
|
+
|
|
925
|
+
@show_model_apis_tab.setter
|
|
926
|
+
def show_model_apis_tab(self, show_model_apis_tab: 'bool'):
|
|
927
|
+
"""Sets the show_model_apis_tab of this OrgsIdBody.
|
|
928
|
+
|
|
929
|
+
|
|
930
|
+
:param show_model_apis_tab: The show_model_apis_tab of this OrgsIdBody. # noqa: E501
|
|
931
|
+
:type: bool
|
|
932
|
+
"""
|
|
933
|
+
|
|
934
|
+
self._show_model_apis_tab = show_model_apis_tab
|
|
935
|
+
|
|
910
936
|
@property
|
|
911
937
|
def start_studios_on_spot_instance(self) -> 'bool':
|
|
912
938
|
"""Gets the start_studios_on_spot_instance of this OrgsIdBody. # noqa: E501
|