lightning-sdk 2026.1.22__py3-none-any.whl → 2026.1.30__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. lightning_sdk/__version__.py +1 -1
  2. lightning_sdk/api/studio_api.py +38 -39
  3. lightning_sdk/api/teamspace_api.py +189 -72
  4. lightning_sdk/api/utils.py +69 -1
  5. lightning_sdk/cli/cp/__init__.py +14 -11
  6. lightning_sdk/cli/cp/teamspace_uploads.py +95 -0
  7. lightning_sdk/cli/legacy/download.py +29 -98
  8. lightning_sdk/cli/legacy/upload.py +24 -31
  9. lightning_sdk/cli/studio/cp.py +8 -5
  10. lightning_sdk/cli/studio/ls.py +1 -1
  11. lightning_sdk/cli/studio/rm.py +1 -1
  12. lightning_sdk/cli/utils/{studio_filesystem.py → filesystem.py} +49 -6
  13. lightning_sdk/exceptions.py +27 -0
  14. lightning_sdk/lightning_cloud/openapi/__init__.py +17 -12
  15. lightning_sdk/lightning_cloud/openapi/api/__init__.py +1 -0
  16. lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +5 -1
  17. lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +286 -468
  18. lightning_sdk/lightning_cloud/openapi/api/container_registry_service_api.py +579 -0
  19. lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +5 -1
  20. lightning_sdk/lightning_cloud/openapi/api/file_system_service_api.py +11 -11
  21. lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +113 -0
  22. lightning_sdk/lightning_cloud/openapi/api/organizations_service_api.py +113 -0
  23. lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +5 -1
  24. lightning_sdk/lightning_cloud/openapi/models/__init__.py +16 -12
  25. lightning_sdk/lightning_cloud/openapi/models/{cluster_service_refresh_container_registry_credentials_body.py → cluster_service_get_cluster_capacity_reservation_body.py} +6 -6
  26. lightning_sdk/lightning_cloud/openapi/models/{v1_container_registry_integration.py → container_registry_config_ecr.py} +49 -23
  27. lightning_sdk/lightning_cloud/openapi/models/{v1_container_registry_status.py → container_registry_provider.py} +14 -10
  28. lightning_sdk/lightning_cloud/openapi/models/container_registry_service_create_container_registry_body.py +201 -0
  29. lightning_sdk/lightning_cloud/openapi/models/{v1_ecr_registry_config_input.py → container_registry_service_refresh_container_registry_credentials_body.py} +21 -21
  30. lightning_sdk/lightning_cloud/openapi/models/jobs_service_duplicate_deployment_body.py +175 -0
  31. lightning_sdk/lightning_cloud/openapi/models/organizations_service_update_org_role_body.py +175 -0
  32. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_provider.py +1 -0
  33. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +27 -1
  34. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +27 -1
  35. lightning_sdk/lightning_cloud/openapi/models/v1_container_registry.py +63 -89
  36. lightning_sdk/lightning_cloud/openapi/models/{cluster_service_add_container_registry_body.py → v1_container_registry_config.py} +16 -16
  37. lightning_sdk/lightning_cloud/openapi/models/{v1_validate_container_registry_response.py → v1_container_registry_scopes.py} +39 -39
  38. lightning_sdk/lightning_cloud/openapi/models/{cluster_service_validate_container_registry_body.py → v1_create_container_registry_response.py} +6 -6
  39. lightning_sdk/lightning_cloud/openapi/models/v1_delete_org_cluster_capacity_reservation_response.py +97 -0
  40. lightning_sdk/lightning_cloud/openapi/models/v1_describe_org_cluster_capacity_reservation_response.py +201 -0
  41. lightning_sdk/lightning_cloud/openapi/models/v1_generic_job_spec.py +79 -1
  42. lightning_sdk/lightning_cloud/openapi/models/{v1_add_container_registry_response.py → v1_get_cluster_capacity_reservation_response.py} +23 -23
  43. lightning_sdk/lightning_cloud/openapi/models/v1_job.py +27 -1
  44. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1.py +1 -27
  45. lightning_sdk/lightning_cloud/openapi/models/v1_list_container_registries_response.py +6 -6
  46. lightning_sdk/lightning_cloud/openapi/models/{v1_ecr_registry_config.py → v1_mithril_direct_v1.py} +51 -51
  47. lightning_sdk/lightning_cloud/openapi/models/v1_refresh_container_registry_credentials_response.py +1 -27
  48. lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier.py +27 -1
  49. lightning_sdk/lightning_cloud/openapi/models/v1_update_container_registry_response.py +97 -0
  50. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +53 -105
  51. lightning_sdk/lightning_cloud/openapi/rest.py +2 -2
  52. lightning_sdk/teamspace.py +28 -7
  53. {lightning_sdk-2026.1.22.dist-info → lightning_sdk-2026.1.30.dist-info}/METADATA +1 -1
  54. {lightning_sdk-2026.1.22.dist-info → lightning_sdk-2026.1.30.dist-info}/RECORD +59 -53
  55. lightning_sdk/lightning_cloud/openapi/models/v1_container_registry_info.py +0 -281
  56. lightning_sdk/lightning_cloud/openapi/models/v1_ecr_registry_details.py +0 -201
  57. /lightning_sdk/lightning_cloud/openapi/models/{v1_list_filesystem_mmts_response.py → v1_list_filesystem_mm_ts_response.py} +0 -0
  58. {lightning_sdk-2026.1.22.dist-info → lightning_sdk-2026.1.30.dist-info}/LICENSE +0 -0
  59. {lightning_sdk-2026.1.22.dist-info → lightning_sdk-2026.1.30.dist-info}/WHEEL +0 -0
  60. {lightning_sdk-2026.1.22.dist-info → lightning_sdk-2026.1.30.dist-info}/entry_points.txt +0 -0
  61. {lightning_sdk-2026.1.22.dist-info → lightning_sdk-2026.1.30.dist-info}/top_level.txt +0 -0
@@ -74,14 +74,12 @@ class V1UserFeatures(object):
74
74
  'f254': 'bool',
75
75
  'f258': 'bool',
76
76
  'f259': 'bool',
77
- 'f265': 'bool',
78
77
  'f266': 'bool',
79
78
  'f268': 'bool',
80
79
  'f270': 'bool',
81
80
  'f271': 'bool',
82
81
  'f272': 'bool',
83
82
  'f273': 'bool',
84
- 'f275': 'bool',
85
83
  'f276': 'bool',
86
84
  'f279': 'bool',
87
85
  'f280': 'bool',
@@ -91,12 +89,12 @@ class V1UserFeatures(object):
91
89
  'f287': 'bool',
92
90
  'f288': 'bool',
93
91
  'f289': 'bool',
94
- 'f290': 'bool',
95
- 'f291': 'bool',
96
92
  'f292': 'bool',
97
93
  'f293': 'bool',
98
94
  'f294': 'bool',
99
95
  'f295': 'bool',
96
+ 'f296': 'bool',
97
+ 'f297': 'bool',
100
98
  'fair_share': 'bool',
101
99
  'featured_studios_admin': 'bool',
102
100
  'job_artifacts_v2': 'bool',
@@ -169,14 +167,12 @@ class V1UserFeatures(object):
169
167
  'f254': 'f254',
170
168
  'f258': 'f258',
171
169
  'f259': 'f259',
172
- 'f265': 'f265',
173
170
  'f266': 'f266',
174
171
  'f268': 'f268',
175
172
  'f270': 'f270',
176
173
  'f271': 'f271',
177
174
  'f272': 'f272',
178
175
  'f273': 'f273',
179
- 'f275': 'f275',
180
176
  'f276': 'f276',
181
177
  'f279': 'f279',
182
178
  'f280': 'f280',
@@ -186,12 +182,12 @@ class V1UserFeatures(object):
186
182
  'f287': 'f287',
187
183
  'f288': 'f288',
188
184
  'f289': 'f289',
189
- 'f290': 'f290',
190
- 'f291': 'f291',
191
185
  'f292': 'f292',
192
186
  'f293': 'f293',
193
187
  'f294': 'f294',
194
188
  'f295': 'f295',
189
+ 'f296': 'f296',
190
+ 'f297': 'f297',
195
191
  'fair_share': 'fairShare',
196
192
  'featured_studios_admin': 'featuredStudiosAdmin',
197
193
  'job_artifacts_v2': 'jobArtifactsV2',
@@ -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, f265: '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, f291: 'bool' =None, f292: 'bool' =None, f293: 'bool' =None, f294: 'bool' =None, f295: '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
@@ -265,14 +261,12 @@ class V1UserFeatures(object):
265
261
  self._f254 = None
266
262
  self._f258 = None
267
263
  self._f259 = None
268
- self._f265 = None
269
264
  self._f266 = None
270
265
  self._f268 = None
271
266
  self._f270 = None
272
267
  self._f271 = None
273
268
  self._f272 = None
274
269
  self._f273 = None
275
- self._f275 = None
276
270
  self._f276 = None
277
271
  self._f279 = None
278
272
  self._f280 = None
@@ -282,12 +276,12 @@ class V1UserFeatures(object):
282
276
  self._f287 = None
283
277
  self._f288 = None
284
278
  self._f289 = None
285
- self._f290 = None
286
- self._f291 = None
287
279
  self._f292 = None
288
280
  self._f293 = None
289
281
  self._f294 = None
290
282
  self._f295 = None
283
+ self._f296 = None
284
+ self._f297 = None
291
285
  self._fair_share = None
292
286
  self._featured_studios_admin = None
293
287
  self._job_artifacts_v2 = None
@@ -391,8 +385,6 @@ class V1UserFeatures(object):
391
385
  self.f258 = f258
392
386
  if f259 is not None:
393
387
  self.f259 = f259
394
- if f265 is not None:
395
- self.f265 = f265
396
388
  if f266 is not None:
397
389
  self.f266 = f266
398
390
  if f268 is not None:
@@ -405,8 +397,6 @@ class V1UserFeatures(object):
405
397
  self.f272 = f272
406
398
  if f273 is not None:
407
399
  self.f273 = f273
408
- if f275 is not None:
409
- self.f275 = f275
410
400
  if f276 is not None:
411
401
  self.f276 = f276
412
402
  if f279 is not None:
@@ -425,10 +415,6 @@ class V1UserFeatures(object):
425
415
  self.f288 = f288
426
416
  if f289 is not None:
427
417
  self.f289 = f289
428
- if f290 is not None:
429
- self.f290 = f290
430
- if f291 is not None:
431
- self.f291 = f291
432
418
  if f292 is not None:
433
419
  self.f292 = f292
434
420
  if f293 is not None:
@@ -437,6 +423,10 @@ class V1UserFeatures(object):
437
423
  self.f294 = f294
438
424
  if f295 is not None:
439
425
  self.f295 = f295
426
+ if f296 is not None:
427
+ self.f296 = f296
428
+ if f297 is not None:
429
+ self.f297 = f297
440
430
  if fair_share is not None:
441
431
  self.fair_share = fair_share
442
432
  if featured_studios_admin is not None:
@@ -1203,27 +1193,6 @@ class V1UserFeatures(object):
1203
1193
 
1204
1194
  self._f259 = f259
1205
1195
 
1206
- @property
1207
- def f265(self) -> 'bool':
1208
- """Gets the f265 of this V1UserFeatures. # noqa: E501
1209
-
1210
-
1211
- :return: The f265 of this V1UserFeatures. # noqa: E501
1212
- :rtype: bool
1213
- """
1214
- return self._f265
1215
-
1216
- @f265.setter
1217
- def f265(self, f265: 'bool'):
1218
- """Sets the f265 of this V1UserFeatures.
1219
-
1220
-
1221
- :param f265: The f265 of this V1UserFeatures. # noqa: E501
1222
- :type: bool
1223
- """
1224
-
1225
- self._f265 = f265
1226
-
1227
1196
  @property
1228
1197
  def f266(self) -> 'bool':
1229
1198
  """Gets the f266 of this V1UserFeatures. # noqa: E501
@@ -1350,27 +1319,6 @@ class V1UserFeatures(object):
1350
1319
 
1351
1320
  self._f273 = f273
1352
1321
 
1353
- @property
1354
- def f275(self) -> 'bool':
1355
- """Gets the f275 of this V1UserFeatures. # noqa: E501
1356
-
1357
-
1358
- :return: The f275 of this V1UserFeatures. # noqa: E501
1359
- :rtype: bool
1360
- """
1361
- return self._f275
1362
-
1363
- @f275.setter
1364
- def f275(self, f275: 'bool'):
1365
- """Sets the f275 of this V1UserFeatures.
1366
-
1367
-
1368
- :param f275: The f275 of this V1UserFeatures. # noqa: E501
1369
- :type: bool
1370
- """
1371
-
1372
- self._f275 = f275
1373
-
1374
1322
  @property
1375
1323
  def f276(self) -> 'bool':
1376
1324
  """Gets the f276 of this V1UserFeatures. # noqa: E501
@@ -1560,48 +1508,6 @@ class V1UserFeatures(object):
1560
1508
 
1561
1509
  self._f289 = f289
1562
1510
 
1563
- @property
1564
- def f290(self) -> 'bool':
1565
- """Gets the f290 of this V1UserFeatures. # noqa: E501
1566
-
1567
-
1568
- :return: The f290 of this V1UserFeatures. # noqa: E501
1569
- :rtype: bool
1570
- """
1571
- return self._f290
1572
-
1573
- @f290.setter
1574
- def f290(self, f290: 'bool'):
1575
- """Sets the f290 of this V1UserFeatures.
1576
-
1577
-
1578
- :param f290: The f290 of this V1UserFeatures. # noqa: E501
1579
- :type: bool
1580
- """
1581
-
1582
- self._f290 = f290
1583
-
1584
- @property
1585
- def f291(self) -> 'bool':
1586
- """Gets the f291 of this V1UserFeatures. # noqa: E501
1587
-
1588
-
1589
- :return: The f291 of this V1UserFeatures. # noqa: E501
1590
- :rtype: bool
1591
- """
1592
- return self._f291
1593
-
1594
- @f291.setter
1595
- def f291(self, f291: 'bool'):
1596
- """Sets the f291 of this V1UserFeatures.
1597
-
1598
-
1599
- :param f291: The f291 of this V1UserFeatures. # noqa: E501
1600
- :type: bool
1601
- """
1602
-
1603
- self._f291 = f291
1604
-
1605
1511
  @property
1606
1512
  def f292(self) -> 'bool':
1607
1513
  """Gets the f292 of this V1UserFeatures. # noqa: E501
@@ -1686,6 +1592,48 @@ class V1UserFeatures(object):
1686
1592
 
1687
1593
  self._f295 = f295
1688
1594
 
1595
+ @property
1596
+ def f296(self) -> 'bool':
1597
+ """Gets the f296 of this V1UserFeatures. # noqa: E501
1598
+
1599
+
1600
+ :return: The f296 of this V1UserFeatures. # noqa: E501
1601
+ :rtype: bool
1602
+ """
1603
+ return self._f296
1604
+
1605
+ @f296.setter
1606
+ def f296(self, f296: 'bool'):
1607
+ """Sets the f296 of this V1UserFeatures.
1608
+
1609
+
1610
+ :param f296: The f296 of this V1UserFeatures. # noqa: E501
1611
+ :type: bool
1612
+ """
1613
+
1614
+ self._f296 = f296
1615
+
1616
+ @property
1617
+ def f297(self) -> 'bool':
1618
+ """Gets the f297 of this V1UserFeatures. # noqa: E501
1619
+
1620
+
1621
+ :return: The f297 of this V1UserFeatures. # noqa: E501
1622
+ :rtype: bool
1623
+ """
1624
+ return self._f297
1625
+
1626
+ @f297.setter
1627
+ def f297(self, f297: 'bool'):
1628
+ """Sets the f297 of this V1UserFeatures.
1629
+
1630
+
1631
+ :param f297: The f297 of this V1UserFeatures. # noqa: E501
1632
+ :type: bool
1633
+ """
1634
+
1635
+ self._f297 = f297
1636
+
1689
1637
  @property
1690
1638
  def fair_share(self) -> 'bool':
1691
1639
  """Gets the fair_share of this V1UserFeatures. # noqa: E501
@@ -49,11 +49,11 @@ class RESTResponse(io.IOBase):
49
49
 
50
50
  def getheaders(self):
51
51
  """Returns a dictionary of the response headers."""
52
- return self.urllib3_response.headers
52
+ return self.urllib3_response.getheaders()
53
53
 
54
54
  def getheader(self, name, default=None):
55
55
  """Returns a given response header."""
56
- return self.urllib3_response.headers.get(name, default)
56
+ return self.urllib3_response.getheader(name, default)
57
57
 
58
58
 
59
59
  class RESTClientObject(object):
@@ -539,21 +539,37 @@ class Teamspace(metaclass=TrackCallsMeta):
539
539
  return self._teamspace_api.list_model_versions(teamspace_id=self.id, model_name=name)
540
540
 
541
541
  def upload_file(
542
- self, file_path: Union[Path, str], remote_path: Optional[str] = None, progress_bar: bool = True
542
+ self,
543
+ file_path: Union[Path, str],
544
+ remote_path: Optional[str] = None,
545
+ progress_bar: bool = True,
546
+ cloud_account: Optional[str] = None,
543
547
  ) -> None:
544
548
  """Uploads file to given remote path in the Teamspace drive."""
545
549
  if remote_path is None:
546
550
  remote_path = os.path.split(file_path)[1]
547
551
 
552
+ if cloud_account is None:
553
+ warnings.warn(
554
+ f"No cloud account specified. Using teamspace default cloud account: {self.default_cloud_account}."
555
+ )
556
+ cloud_account = self.default_cloud_account
557
+
548
558
  self._teamspace_api.upload_file(
549
559
  teamspace_id=self._teamspace.id,
550
- cloud_account=self.default_cloud_account,
560
+ cloud_account=cloud_account,
551
561
  file_path=file_path,
552
562
  remote_path=os.path.normpath(remote_path),
553
563
  progress_bar=progress_bar,
554
564
  )
555
565
 
556
- def upload_folder(self, folder_path: str, remote_path: Optional[str] = None, progress_bar: bool = True) -> None:
566
+ def upload_folder(
567
+ self,
568
+ folder_path: str,
569
+ remote_path: Optional[str] = None,
570
+ progress_bar: bool = True,
571
+ cloud_account: Optional[str] = None,
572
+ ) -> None:
557
573
  """Uploads a given folder to a remote path in the Teamspace drive."""
558
574
  if folder_path is None:
559
575
  raise ValueError("Cannot upload a folder that is None.")
@@ -575,13 +591,15 @@ class Teamspace(metaclass=TrackCallsMeta):
575
591
  for local_file, remote_path in sorted(all_files, key=lambda p: p[1]):
576
592
  if progress_bar:
577
593
  progress_bar.set_description(f"Uploading {local_file}")
578
- self.upload_file(local_file, remote_path=remote_path, progress_bar=False)
594
+ self.upload_file(local_file, remote_path=remote_path, progress_bar=False, cloud_account=cloud_account)
579
595
  if progress_bar:
580
596
  progress_bar.update(1)
581
597
  if progress_bar:
582
598
  progress_bar.close()
583
599
 
584
- def download_file(self, remote_path: str, file_path: Optional[str] = None) -> None:
600
+ def download_file(
601
+ self, remote_path: str, file_path: Optional[str] = None, cloud_account: Optional[str] = None
602
+ ) -> None:
585
603
  """Downloads a given file in Teamspace drive to a target location."""
586
604
  if file_path is None:
587
605
  file_path = remote_path
@@ -590,9 +608,12 @@ class Teamspace(metaclass=TrackCallsMeta):
590
608
  path=remote_path,
591
609
  target_path=file_path,
592
610
  teamspace_id=self._teamspace.id,
611
+ cloud_account=cloud_account,
593
612
  )
594
613
 
595
- def download_folder(self, remote_path: str, target_path: Optional[str] = None) -> None:
614
+ def download_folder(
615
+ self, remote_path: str, target_path: Optional[str] = None, cloud_account: Optional[str] = None
616
+ ) -> None:
596
617
  """Downloads a folder in the Teamspace drive to a given target path."""
597
618
  if target_path is None:
598
619
  target_path = remote_path
@@ -601,7 +622,7 @@ class Teamspace(metaclass=TrackCallsMeta):
601
622
  path=remote_path,
602
623
  target_path=target_path,
603
624
  teamspace_id=self._teamspace.id,
604
- cloud_account=self.default_cloud_account,
625
+ cloud_account=cloud_account,
605
626
  )
606
627
 
607
628
  def new_folder(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lightning_sdk
3
- Version: 2026.1.22
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