lightning-sdk 0.1.3__py3-none-any.whl → 0.1.46__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 (498) hide show
  1. lightning_sdk/__init__.py +12 -2
  2. lightning_sdk/agents.py +46 -0
  3. lightning_sdk/ai_hub.py +185 -0
  4. lightning_sdk/api/__init__.py +4 -0
  5. lightning_sdk/api/agents_api.py +107 -0
  6. lightning_sdk/api/ai_hub_api.py +130 -0
  7. lightning_sdk/api/deployment_api.py +574 -0
  8. lightning_sdk/api/job_api.py +308 -0
  9. lightning_sdk/api/mmt_api.py +188 -0
  10. lightning_sdk/api/org_api.py +1 -3
  11. lightning_sdk/api/studio_api.py +172 -81
  12. lightning_sdk/api/teamspace_api.py +219 -20
  13. lightning_sdk/api/user_api.py +24 -9
  14. lightning_sdk/api/utils.py +429 -48
  15. lightning_sdk/cli/ai_hub.py +49 -0
  16. lightning_sdk/cli/download.py +132 -0
  17. lightning_sdk/cli/entrypoint.py +11 -3
  18. lightning_sdk/cli/run.py +206 -0
  19. lightning_sdk/cli/serve.py +218 -0
  20. lightning_sdk/cli/studios_menu.py +78 -0
  21. lightning_sdk/cli/upload.py +79 -89
  22. lightning_sdk/constants.py +29 -1
  23. lightning_sdk/deployment/__init__.py +25 -0
  24. lightning_sdk/deployment/deployment.py +389 -0
  25. lightning_sdk/helpers.py +49 -0
  26. lightning_sdk/job/__init__.py +5 -0
  27. lightning_sdk/job/base.py +295 -0
  28. lightning_sdk/job/job.py +266 -0
  29. lightning_sdk/job/v1.py +241 -0
  30. lightning_sdk/job/v2.py +193 -0
  31. lightning_sdk/job/work.py +72 -0
  32. lightning_sdk/lightning_cloud/__version__.py +1 -1
  33. lightning_sdk/lightning_cloud/cli/__main__.py +15 -13
  34. lightning_sdk/lightning_cloud/env.py +1 -0
  35. lightning_sdk/lightning_cloud/login.py +12 -8
  36. lightning_sdk/lightning_cloud/openapi/__init__.py +288 -42
  37. lightning_sdk/lightning_cloud/openapi/api/__init__.py +10 -0
  38. lightning_sdk/lightning_cloud/openapi/api/analytics_service_api.py +141 -0
  39. lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py +1075 -227
  40. lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py +9 -1
  41. lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +992 -233
  42. lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +883 -120
  43. lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +10 -5
  44. lightning_sdk/lightning_cloud/openapi/api/deployment_templates_service_api.py +756 -0
  45. lightning_sdk/lightning_cloud/openapi/api/endpoint_service_api.py +422 -1
  46. lightning_sdk/lightning_cloud/openapi/api/experiments_service_api.py +242 -0
  47. lightning_sdk/lightning_cloud/openapi/api/file_system_service_api.py +674 -0
  48. lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +3823 -0
  49. lightning_sdk/lightning_cloud/openapi/api/lightningapp_instance_service_api.py +158 -594
  50. lightning_sdk/lightning_cloud/openapi/api/lightningapp_v2_service_api.py +0 -1086
  51. lightning_sdk/lightning_cloud/openapi/api/lightningwork_service_api.py +113 -0
  52. lightning_sdk/lightning_cloud/openapi/api/lit_logger_service_api.py +1753 -0
  53. lightning_sdk/lightning_cloud/openapi/api/lit_registry_service_api.py +242 -0
  54. lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +1423 -108
  55. lightning_sdk/lightning_cloud/openapi/api/organizations_service_api.py +421 -1
  56. lightning_sdk/lightning_cloud/openapi/api/profiler_service_api.py +663 -0
  57. lightning_sdk/lightning_cloud/openapi/api/projects_service_api.py +5 -1
  58. lightning_sdk/lightning_cloud/openapi/api/secret_service_api.py +478 -1
  59. lightning_sdk/lightning_cloud/openapi/api/slurm_jobs_user_service_api.py +9 -5
  60. lightning_sdk/lightning_cloud/openapi/api/snowflake_service_api.py +686 -0
  61. lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +1094 -0
  62. lightning_sdk/lightning_cloud/openapi/api/studio_jobs_service_api.py +4 -4
  63. lightning_sdk/lightning_cloud/openapi/api/user_service_api.py +1081 -34
  64. lightning_sdk/lightning_cloud/openapi/models/__init__.py +278 -40
  65. lightning_sdk/lightning_cloud/openapi/models/affiliatelinks_id_body.py +149 -0
  66. lightning_sdk/lightning_cloud/openapi/models/agentmanagedendpoints_id_body.py +305 -0
  67. lightning_sdk/lightning_cloud/openapi/models/{assistants_id_body.py → agents_id_body.py} +201 -71
  68. lightning_sdk/lightning_cloud/openapi/models/app_id_works_body.py +149 -0
  69. lightning_sdk/lightning_cloud/openapi/models/approveautojoindomain_domain_body.py +123 -0
  70. lightning_sdk/lightning_cloud/openapi/models/apps_id_body1.py +107 -3
  71. lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +1 -27
  72. lightning_sdk/lightning_cloud/openapi/models/{v1_get_cluster_health_response.py → captures_id_body.py} +16 -16
  73. lightning_sdk/lightning_cloud/openapi/models/cloud_space_id_versionpublications_body1.py +27 -1
  74. lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_runs_body.py +27 -1
  75. lightning_sdk/lightning_cloud/openapi/models/cloudspaces_id_body.py +58 -6
  76. lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityblock_body.py +253 -0
  77. lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityreservations_body.py +55 -3
  78. lightning_sdk/lightning_cloud/openapi/models/cluster_id_proxies_body.py +123 -0
  79. lightning_sdk/lightning_cloud/openapi/models/create.py +157 -1
  80. lightning_sdk/lightning_cloud/openapi/models/create_deployment_request_defines_a_spec_for_the_job_that_allows_for_autoscaling_jobs.py +383 -0
  81. lightning_sdk/lightning_cloud/openapi/models/deployments_id_body.py +565 -0
  82. lightning_sdk/lightning_cloud/openapi/models/deploymenttemplates_id_body.py +513 -0
  83. lightning_sdk/lightning_cloud/openapi/models/endpoints_id_body.py +43 -17
  84. lightning_sdk/lightning_cloud/openapi/models/experiment_name_variant_name_body.py +123 -0
  85. lightning_sdk/lightning_cloud/openapi/models/externalv1_cloud_space_instance_status.py +107 -1
  86. lightning_sdk/lightning_cloud/openapi/models/externalv1_lightningapp_instance.py +27 -1
  87. lightning_sdk/lightning_cloud/openapi/models/externalv1_user_status.py +27 -1
  88. lightning_sdk/lightning_cloud/openapi/models/fileendpoints_id_body.py +79 -1
  89. lightning_sdk/lightning_cloud/openapi/models/id_codeconfig_body.py +29 -55
  90. lightning_sdk/lightning_cloud/openapi/models/id_engage_body.py +3 -29
  91. lightning_sdk/lightning_cloud/openapi/models/id_engage_body1.py +149 -0
  92. lightning_sdk/lightning_cloud/openapi/models/id_execute_body.py +3 -55
  93. lightning_sdk/lightning_cloud/openapi/models/id_execute_body1.py +175 -0
  94. lightning_sdk/lightning_cloud/openapi/models/id_get_body.py +133 -3
  95. lightning_sdk/lightning_cloud/openapi/models/id_index_body.py +67 -15
  96. lightning_sdk/lightning_cloud/openapi/models/id_index_body2.py +123 -0
  97. lightning_sdk/lightning_cloud/openapi/models/id_index_body3.py +175 -0
  98. lightning_sdk/lightning_cloud/openapi/models/id_reportlogsactivity_body.py +123 -0
  99. lightning_sdk/lightning_cloud/openapi/models/id_start_body.py +29 -3
  100. lightning_sdk/lightning_cloud/openapi/models/id_storage_body.py +52 -26
  101. lightning_sdk/lightning_cloud/openapi/models/id_visibility_body.py +123 -0
  102. lightning_sdk/lightning_cloud/openapi/models/jobs_id_body1.py +27 -1
  103. lightning_sdk/lightning_cloud/openapi/models/jobs_id_body2.py +17 -43
  104. lightning_sdk/lightning_cloud/openapi/models/jobs_id_body3.py +149 -0
  105. lightning_sdk/lightning_cloud/openapi/models/litloggermetrics_id_body.py +175 -0
  106. lightning_sdk/lightning_cloud/openapi/models/litpages_id_body.py +27 -1
  107. lightning_sdk/lightning_cloud/openapi/models/loggermetrics_id_body.py +123 -0
  108. lightning_sdk/lightning_cloud/openapi/models/metrics_stream_id_loggerartifacts_body.py +123 -0
  109. lightning_sdk/lightning_cloud/openapi/models/metricsstream_create_body.py +383 -0
  110. lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_id_list.py → metricsstream_delete_body.py} +10 -10
  111. lightning_sdk/lightning_cloud/openapi/models/metricsstream_id_body.py +175 -0
  112. lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_response.py → model_id_versions_body.py} +25 -51
  113. lightning_sdk/lightning_cloud/openapi/models/model_id_visibility_body.py +123 -0
  114. lightning_sdk/lightning_cloud/openapi/models/models_model_id_body.py +149 -0
  115. lightning_sdk/lightning_cloud/openapi/models/multimachinejobs_id_body.py +123 -0
  116. lightning_sdk/lightning_cloud/openapi/models/org_id_memberships_body.py +27 -1
  117. lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +183 -1
  118. lightning_sdk/lightning_cloud/openapi/models/profiler_captures_body.py +279 -0
  119. lightning_sdk/lightning_cloud/openapi/models/profiler_enabled_body.py +149 -0
  120. lightning_sdk/lightning_cloud/openapi/models/project_id_agentmanagedendpoints_body.py +149 -0
  121. lightning_sdk/lightning_cloud/openapi/models/{project_id_assistants_body.py → project_id_agents_body.py} +159 -55
  122. lightning_sdk/lightning_cloud/openapi/models/project_id_cloudspaces_body.py +71 -19
  123. lightning_sdk/lightning_cloud/openapi/models/project_id_fileendpoints_body.py +27 -1
  124. lightning_sdk/lightning_cloud/openapi/models/project_id_jobs_body.py +175 -0
  125. lightning_sdk/lightning_cloud/openapi/models/project_id_litregistry_body.py +123 -0
  126. lightning_sdk/lightning_cloud/openapi/models/project_id_memberships_body.py +53 -1
  127. lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_request.py → project_id_models_body.py} +70 -70
  128. lightning_sdk/lightning_cloud/openapi/models/project_id_multimachinejobs_body.py +227 -0
  129. lightning_sdk/lightning_cloud/openapi/models/project_id_secrets_body.py +27 -1
  130. lightning_sdk/lightning_cloud/openapi/models/project_id_snowflake_body.py +123 -0
  131. lightning_sdk/lightning_cloud/openapi/models/projects_id_body.py +29 -3
  132. lightning_sdk/lightning_cloud/openapi/models/query_query_id_body.py +175 -0
  133. lightning_sdk/lightning_cloud/openapi/models/secrets_id_body1.py +123 -0
  134. lightning_sdk/lightning_cloud/openapi/models/servers_server_id_body.py +123 -0
  135. lightning_sdk/lightning_cloud/openapi/models/service_artifact_artifact_kind.py +104 -0
  136. lightning_sdk/lightning_cloud/openapi/models/serviceexecution_id_body.py +43 -43
  137. lightning_sdk/lightning_cloud/openapi/models/slurm_jobs_body.py +79 -1
  138. lightning_sdk/lightning_cloud/openapi/models/snowflake_export_body.py +305 -0
  139. lightning_sdk/lightning_cloud/openapi/models/{v1_download_model_response.py → snowflake_query_body.py} +51 -51
  140. lightning_sdk/lightning_cloud/openapi/models/storage_complete_body.py +27 -1
  141. lightning_sdk/lightning_cloud/openapi/models/update.py +105 -1
  142. lightning_sdk/lightning_cloud/openapi/models/upload_id_complete_body.py +149 -0
  143. lightning_sdk/lightning_cloud/openapi/models/upload_id_parts_body.py +149 -0
  144. lightning_sdk/lightning_cloud/openapi/models/user_id_affiliatelinks_body.py +149 -0
  145. lightning_sdk/lightning_cloud/openapi/models/v1_accelerator_quota_info.py +201 -0
  146. lightning_sdk/lightning_cloud/openapi/models/v1_ack_user_storage_violation_response.py +97 -0
  147. lightning_sdk/lightning_cloud/openapi/models/v1_add_job_timing_response.py +97 -0
  148. lightning_sdk/lightning_cloud/openapi/models/v1_affiliate_link.py +435 -0
  149. lightning_sdk/lightning_cloud/openapi/models/v1_agent_job.py +131 -1
  150. lightning_sdk/lightning_cloud/openapi/models/v1_api_pricing_spec.py +149 -0
  151. lightning_sdk/lightning_cloud/openapi/models/v1_app_type.py +104 -0
  152. lightning_sdk/lightning_cloud/openapi/models/v1_append_logger_metrics_response.py +97 -0
  153. lightning_sdk/lightning_cloud/openapi/models/v1_approve_auto_join_domain_response.py +123 -0
  154. lightning_sdk/lightning_cloud/openapi/models/v1_assign_variant_response.py +97 -0
  155. lightning_sdk/lightning_cloud/openapi/models/v1_assistant.py +131 -1
  156. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_item_status.py +253 -0
  157. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_status.py +123 -0
  158. lightning_sdk/lightning_cloud/openapi/models/v1_assistant_model_status.py +104 -0
  159. lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_domain_validation.py +175 -0
  160. lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_org_response.py +149 -0
  161. lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_spec.py +305 -0
  162. lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_target_metric.py +149 -0
  163. lightning_sdk/lightning_cloud/openapi/models/v1_aws_direct_v1.py +133 -3
  164. lightning_sdk/lightning_cloud/openapi/models/v1_batch_update_lightningwork_response.py +97 -0
  165. lightning_sdk/lightning_cloud/openapi/models/v1_body.py +123 -0
  166. lightning_sdk/lightning_cloud/openapi/models/v1_cancellation_metadata.py +149 -0
  167. lightning_sdk/lightning_cloud/openapi/models/v1_capacity_block_offering.py +383 -0
  168. lightning_sdk/lightning_cloud/openapi/models/v1_check_snowflake_connection_response.py +123 -0
  169. lightning_sdk/lightning_cloud/openapi/models/v1_checkbox.py +201 -0
  170. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space.py +136 -6
  171. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_code_version.py +27 -1
  172. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_config.py +1 -53
  173. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_startup_status.py +79 -1
  174. lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_log_service.py → v1_cloud_space_session.py} +49 -49
  175. lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_version.py +53 -1
  176. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +445 -3
  177. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +55 -3
  178. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_names.py +123 -0
  179. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_proxy.py +201 -0
  180. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_resource_tag.py +149 -0
  181. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_security_options.py +357 -0
  182. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +157 -107
  183. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_state.py +1 -0
  184. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_status.py +17 -43
  185. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_tagging_options.py +175 -0
  186. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_type.py +0 -1
  187. lightning_sdk/lightning_cloud/openapi/models/v1_command_argument.py +79 -1
  188. lightning_sdk/lightning_cloud/openapi/models/v1_complete_model_upload_response.py +97 -0
  189. lightning_sdk/lightning_cloud/openapi/models/v1_complete_multi_part_upload_response.py +97 -0
  190. lightning_sdk/lightning_cloud/openapi/models/v1_completed_part.py +149 -0
  191. lightning_sdk/lightning_cloud/openapi/models/v1_conversation.py +15 -15
  192. lightning_sdk/lightning_cloud/openapi/models/v1_conversation_response_chunk.py +26 -26
  193. lightning_sdk/lightning_cloud/openapi/models/v1_count_metrics_streams_response.py +123 -0
  194. lightning_sdk/lightning_cloud/openapi/models/v1_create_checkout_session_request.py +53 -1
  195. lightning_sdk/lightning_cloud/openapi/models/v1_create_cluster_request.py +27 -1
  196. lightning_sdk/lightning_cloud/openapi/models/v1_create_deployment_template_request.py +539 -0
  197. lightning_sdk/lightning_cloud/openapi/models/v1_create_multi_part_upload_response.py +123 -0
  198. lightning_sdk/lightning_cloud/openapi/models/v1_create_organization_request.py +159 -3
  199. lightning_sdk/lightning_cloud/openapi/models/v1_create_project_request.py +27 -1
  200. lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_request.py +201 -0
  201. lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_response.py +123 -0
  202. lightning_sdk/lightning_cloud/openapi/models/v1_create_snowflake_connection_response.py +123 -0
  203. lightning_sdk/lightning_cloud/openapi/models/v1_create_user_secret_request.py +149 -0
  204. lightning_sdk/lightning_cloud/openapi/models/v1_data_connection.py +365 -1
  205. lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_performance_profile.py → v1_data_connection_state.py} +11 -9
  206. lightning_sdk/lightning_cloud/openapi/models/v1_data_path.py +201 -0
  207. lightning_sdk/lightning_cloud/openapi/models/v1_delete_affiliate_link_response.py +97 -0
  208. lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_session_response.py +97 -0
  209. lightning_sdk/lightning_cloud/openapi/models/v1_delete_cluster_proxy_response.py +97 -0
  210. lightning_sdk/lightning_cloud/openapi/models/v1_delete_deployment_release_response.py +97 -0
  211. lightning_sdk/lightning_cloud/openapi/models/{v1_azure_cluster_driver_status.py → v1_delete_deployment_response.py} +6 -6
  212. lightning_sdk/lightning_cloud/openapi/models/v1_delete_index_response.py +97 -0
  213. lightning_sdk/lightning_cloud/openapi/models/{v1_byom_cluster_driver.py → v1_delete_job_response.py} +6 -6
  214. lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_v2_response.py → v1_delete_logger_artifact_response.py} +6 -6
  215. lightning_sdk/lightning_cloud/openapi/models/v1_delete_managed_endpoint_response.py +97 -0
  216. lightning_sdk/lightning_cloud/openapi/models/v1_delete_metrics_stream_response.py +97 -0
  217. lightning_sdk/lightning_cloud/openapi/models/v1_delete_multi_machine_job_response.py +97 -0
  218. lightning_sdk/lightning_cloud/openapi/models/v1_delete_profiler_capture_response.py +97 -0
  219. lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_release_response.py → v1_delete_shared_metrics_stream_response.py} +6 -6
  220. lightning_sdk/lightning_cloud/openapi/models/v1_deployment.py +617 -0
  221. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_api.py +227 -0
  222. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event.py +357 -0
  223. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event_type.py +104 -0
  224. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_metrics.py +149 -0
  225. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_performance.py +305 -0
  226. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_release.py +331 -0
  227. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_spec.py +201 -0
  228. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_state.py +105 -0
  229. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_status.py +279 -0
  230. lightning_sdk/lightning_cloud/openapi/models/{appsv2_id_body.py → v1_deployment_strategy.py} +39 -39
  231. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template.py +721 -0
  232. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_engagement_response.py +97 -0
  233. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_gallery_response.py +591 -0
  234. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter.py +435 -0
  235. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_placement.py +106 -0
  236. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_type.py +106 -0
  237. lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_summary.py +591 -0
  238. lightning_sdk/lightning_cloud/openapi/models/{instance_type_availability.py → v1_deployment_template_type.py} +10 -10
  239. lightning_sdk/lightning_cloud/openapi/models/{v1_get_lightningapp_source_code_download_url_response.py → v1_download_job_logs_response.py} +10 -10
  240. lightning_sdk/lightning_cloud/openapi/models/v1_download_service_execution_artifact_response.py +175 -0
  241. lightning_sdk/lightning_cloud/openapi/models/v1_ebs.py +279 -0
  242. lightning_sdk/lightning_cloud/openapi/models/v1_efs_config.py +201 -0
  243. lightning_sdk/lightning_cloud/openapi/models/v1_endpoint.py +53 -27
  244. lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_auth.py +27 -1
  245. lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_type.py +104 -0
  246. lightning_sdk/lightning_cloud/openapi/models/v1_execute_cloud_space_command_response.py +29 -3
  247. lightning_sdk/lightning_cloud/openapi/models/v1_execute_in_cloud_space_session_response.py +97 -0
  248. lightning_sdk/lightning_cloud/openapi/models/v1_execute_snowflake_query_response.py +149 -0
  249. lightning_sdk/lightning_cloud/openapi/models/v1_experiment.py +409 -0
  250. lightning_sdk/lightning_cloud/openapi/models/v1_export_snowflake_query_response.py +123 -0
  251. lightning_sdk/lightning_cloud/openapi/models/v1_file_endpoint.py +79 -1
  252. lightning_sdk/lightning_cloud/openapi/models/{v1_instance_spec.py → v1_filesystem_app.py} +85 -59
  253. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_cloud_space.py +149 -0
  254. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_dataset.py +123 -0
  255. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_job.py +175 -0
  256. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_slurm_job.py +149 -0
  257. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_snowflake_connection.py +123 -0
  258. lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_work.py +149 -0
  259. lightning_sdk/lightning_cloud/openapi/models/v1_find_capacity_block_offering_response.py +123 -0
  260. lightning_sdk/lightning_cloud/openapi/models/v1_gcp_data_connection.py +27 -1
  261. lightning_sdk/lightning_cloud/openapi/models/v1_gcs_folder_data_connection.py +123 -0
  262. lightning_sdk/lightning_cloud/openapi/models/v1_get_affiliate_link_response.py +123 -0
  263. lightning_sdk/lightning_cloud/openapi/models/{v1_list_cluster_instance_types_response.py → v1_get_deployment_routing_telemetry_aggregated_response.py} +23 -23
  264. lightning_sdk/lightning_cloud/openapi/models/v1_get_deployment_routing_telemetry_response.py +123 -0
  265. lightning_sdk/lightning_cloud/openapi/models/v1_get_folder_index_response.py +27 -1
  266. lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_driver_status.py → v1_get_job_stats_response.py} +39 -39
  267. lightning_sdk/lightning_cloud/openapi/models/v1_get_job_system_metrics_response.py +123 -0
  268. lightning_sdk/lightning_cloud/openapi/models/v1_get_lightningapp_instance_open_ports_response.py +123 -0
  269. lightning_sdk/lightning_cloud/openapi/models/v1_get_logger_metrics_response.py +123 -0
  270. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_upload_urls_response.py +123 -0
  271. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_url_response.py +175 -0
  272. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_response.py +279 -0
  273. lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_url_response.py +149 -0
  274. lightning_sdk/lightning_cloud/openapi/models/{v1_lightningwork_cluster_driver.py → v1_get_project_artifact_response.py} +33 -14
  275. lightning_sdk/lightning_cloud/openapi/models/v1_get_project_balance_response.py +27 -1
  276. lightning_sdk/lightning_cloud/openapi/models/v1_get_project_storage_metadata_response.py +383 -0
  277. lightning_sdk/lightning_cloud/openapi/models/v1_get_service_execution_status_response.py +67 -15
  278. lightning_sdk/lightning_cloud/openapi/models/v1_get_snowflake_query_response.py +149 -0
  279. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_balance_response.py +27 -1
  280. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +105 -1
  281. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_breakdown_response.py +279 -0
  282. lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_response.py +201 -0
  283. lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1.py +163 -3
  284. lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1_status.py +123 -0
  285. lightning_sdk/lightning_cloud/openapi/models/v1_header.py +175 -0
  286. lightning_sdk/lightning_cloud/openapi/models/{v1_external_kubeconfig.py → v1_health_check_exec.py} +21 -21
  287. lightning_sdk/lightning_cloud/openapi/models/v1_health_check_http_get.py +149 -0
  288. lightning_sdk/lightning_cloud/openapi/models/v1_ids_logger_metrics.py +123 -0
  289. lightning_sdk/lightning_cloud/openapi/models/v1_input.py +175 -0
  290. lightning_sdk/lightning_cloud/openapi/models/v1_interrupt_server_response.py +97 -0
  291. lightning_sdk/lightning_cloud/openapi/models/v1_job.py +697 -0
  292. lightning_sdk/lightning_cloud/openapi/models/v1_job_health_check_config.py +253 -0
  293. lightning_sdk/lightning_cloud/openapi/models/v1_job_log_entry.py +175 -0
  294. lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_page.py +227 -0
  295. lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_response.py +149 -0
  296. lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +669 -0
  297. lightning_sdk/lightning_cloud/openapi/models/v1_job_timing.py +201 -0
  298. lightning_sdk/lightning_cloud/openapi/models/v1_joinable_organization.py +331 -0
  299. lightning_sdk/lightning_cloud/openapi/models/v1_knowledge_configuration.py +279 -0
  300. lightning_sdk/lightning_cloud/openapi/models/v1_lambda_labs_direct_v1.py +125 -0
  301. lightning_sdk/lightning_cloud/openapi/models/v1_lightning_run.py +27 -1
  302. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_spec.py +105 -27
  303. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_status.py +53 -1
  304. lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_spec.py +27 -27
  305. lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_status.py +81 -3
  306. lightning_sdk/lightning_cloud/openapi/models/v1_list_affiliate_links_response.py +123 -0
  307. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_python_versions_response.py +123 -0
  308. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_sessions_response.py +123 -0
  309. lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_tags_response.py +6 -6
  310. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_availabilities_response.py +123 -0
  311. lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_proxies_response.py +123 -0
  312. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_events_response.py +123 -0
  313. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_releases_response.py +123 -0
  314. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_tags_response.py +123 -0
  315. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_templates_response.py +175 -0
  316. lightning_sdk/lightning_cloud/openapi/models/v1_list_deployments_response.py +123 -0
  317. lightning_sdk/lightning_cloud/openapi/models/v1_list_experiments_response.py +149 -0
  318. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_apps_response.py +123 -0
  319. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_cloud_spaces_response.py +123 -0
  320. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_datasets_response.py +123 -0
  321. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_jobs_response.py +123 -0
  322. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_slurm_jobs_response.py +123 -0
  323. lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_snowflake_response.py +123 -0
  324. lightning_sdk/lightning_cloud/openapi/models/{v1_list_lightningapps_v2_response.py → v1_list_jobs_response.py} +31 -31
  325. lightning_sdk/lightning_cloud/openapi/models/v1_list_joinable_organizations_response.py +123 -0
  326. lightning_sdk/lightning_cloud/openapi/models/v1_list_logger_artifact_response.py +123 -0
  327. lightning_sdk/lightning_cloud/openapi/models/v1_list_metrics_streams_response.py +123 -0
  328. lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_job_events_response.py +123 -0
  329. lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_jobs_response.py +123 -0
  330. lightning_sdk/lightning_cloud/openapi/models/v1_list_new_features_for_user_response.py +123 -0
  331. lightning_sdk/lightning_cloud/openapi/models/v1_list_profiler_captures_response.py +123 -0
  332. lightning_sdk/lightning_cloud/openapi/models/v1_list_project_locked_resources_response.py +123 -0
  333. lightning_sdk/lightning_cloud/openapi/models/v1_list_published_cloud_spaces_response.py +3 -29
  334. lightning_sdk/lightning_cloud/openapi/models/v1_list_published_deployment_templates_response.py +175 -0
  335. lightning_sdk/lightning_cloud/openapi/models/v1_list_service_execution_lightningapp_instances_response.py +175 -0
  336. lightning_sdk/lightning_cloud/openapi/models/v1_lit_page.py +27 -1
  337. lightning_sdk/lightning_cloud/openapi/models/v1_lit_registry_project.py +227 -0
  338. lightning_sdk/lightning_cloud/openapi/models/v1_lit_repository.py +279 -0
  339. lightning_sdk/lightning_cloud/openapi/models/v1_locked_resource.py +227 -0
  340. lightning_sdk/lightning_cloud/openapi/models/v1_logger_artifact.py +227 -0
  341. lightning_sdk/lightning_cloud/openapi/models/v1_machines_selector.py +149 -0
  342. lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_request.py +81 -3
  343. lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_response.py +53 -1
  344. lightning_sdk/lightning_cloud/openapi/models/v1_managed_endpoint.py +175 -19
  345. lightning_sdk/lightning_cloud/openapi/models/v1_managed_model.py +305 -0
  346. lightning_sdk/lightning_cloud/openapi/models/v1_managed_model_abilities.py +175 -0
  347. lightning_sdk/lightning_cloud/openapi/models/v1_membership.py +79 -1
  348. lightning_sdk/lightning_cloud/openapi/models/v1_message.py +138 -8
  349. lightning_sdk/lightning_cloud/openapi/models/v1_message_content.py +6 -6
  350. lightning_sdk/lightning_cloud/openapi/models/v1_message_content_type.py +103 -0
  351. lightning_sdk/lightning_cloud/openapi/models/v1_metadata.py +131 -1
  352. lightning_sdk/lightning_cloud/openapi/models/v1_metric_value.py +175 -0
  353. lightning_sdk/lightning_cloud/openapi/models/v1_metrics.py +175 -0
  354. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_stream.py +799 -0
  355. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tags.py +201 -0
  356. lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tracker.py +383 -0
  357. lightning_sdk/lightning_cloud/openapi/models/v1_model.py +95 -17
  358. lightning_sdk/lightning_cloud/openapi/models/v1_model_file.py +175 -0
  359. lightning_sdk/lightning_cloud/openapi/models/v1_model_version_archive.py +131 -1
  360. lightning_sdk/lightning_cloud/openapi/models/v1_mount_target.py +201 -0
  361. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job.py +487 -0
  362. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_event.py +331 -0
  363. lightning_sdk/lightning_cloud/openapi/models/{get_cluster_health_response_health_status.py → v1_multi_machine_job_event_type.py} +9 -9
  364. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance.py +149 -0
  365. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance_strategy.py +105 -0
  366. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_state.py +108 -0
  367. lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_status.py +305 -0
  368. lightning_sdk/lightning_cloud/openapi/models/v1_named_get_logger_metrics.py +123 -0
  369. lightning_sdk/lightning_cloud/openapi/models/v1_new_feature.py +383 -0
  370. lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_request.py +175 -0
  371. lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_response.py +97 -0
  372. lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +209 -1
  373. lightning_sdk/lightning_cloud/openapi/models/v1_parameterization_spec.py +227 -0
  374. lightning_sdk/lightning_cloud/openapi/models/v1_path_telemetry.py +123 -0
  375. lightning_sdk/lightning_cloud/openapi/models/v1_phase_type.py +104 -0
  376. lightning_sdk/lightning_cloud/openapi/models/v1_profiler_capture.py +357 -0
  377. lightning_sdk/lightning_cloud/openapi/models/v1_profiler_enabled_response.py +123 -0
  378. lightning_sdk/lightning_cloud/openapi/models/v1_project.py +131 -1
  379. lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +263 -3
  380. lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +29 -3
  381. lightning_sdk/lightning_cloud/openapi/models/v1_project_storage.py +279 -0
  382. lightning_sdk/lightning_cloud/openapi/models/v1_published_cloud_space_response.py +188 -6
  383. lightning_sdk/lightning_cloud/openapi/models/v1_purchase_capacity_block_response.py +175 -0
  384. lightning_sdk/lightning_cloud/openapi/models/v1_query_param.py +175 -0
  385. lightning_sdk/lightning_cloud/openapi/models/v1_query_result.py +123 -0
  386. lightning_sdk/lightning_cloud/openapi/models/v1_query_result_row.py +123 -0
  387. lightning_sdk/lightning_cloud/openapi/models/v1_refresh_path_response.py +97 -0
  388. lightning_sdk/lightning_cloud/openapi/models/v1_regional_load_balancer.py +149 -0
  389. lightning_sdk/lightning_cloud/openapi/models/v1_report_logs_activity_response.py +97 -0
  390. lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_request.py +175 -0
  391. lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_response.py +97 -0
  392. lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_tag.py → v1_resource_tag.py} +18 -18
  393. lightning_sdk/lightning_cloud/openapi/models/v1_resource_visibility.py +123 -0
  394. lightning_sdk/lightning_cloud/openapi/models/v1_resources.py +37 -11
  395. lightning_sdk/lightning_cloud/openapi/models/v1_restore_deployment_release_response.py +97 -0
  396. lightning_sdk/lightning_cloud/openapi/models/v1_rolling_update_strategy.py +149 -0
  397. lightning_sdk/lightning_cloud/openapi/models/v1_rule_condition.py +29 -3
  398. lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +11 -0
  399. lightning_sdk/lightning_cloud/openapi/models/v1_s3_folder_data_connection.py +123 -0
  400. lightning_sdk/lightning_cloud/openapi/models/v1_search_job_logs_response.py +149 -0
  401. lightning_sdk/lightning_cloud/openapi/models/v1_secret.py +107 -3
  402. lightning_sdk/lightning_cloud/openapi/models/{v1_lightningapp_cluster_driver.py → v1_secret_type.py} +10 -9
  403. lightning_sdk/lightning_cloud/openapi/models/v1_select.py +149 -0
  404. lightning_sdk/lightning_cloud/openapi/models/v1_server_check_in_response.py +97 -0
  405. lightning_sdk/lightning_cloud/openapi/models/v1_service_artifact.py +201 -0
  406. lightning_sdk/lightning_cloud/openapi/models/v1_service_execution.py +43 -43
  407. lightning_sdk/lightning_cloud/openapi/models/v1_should_start_syncing_response.py +123 -0
  408. lightning_sdk/lightning_cloud/openapi/models/v1_signed_url.py +149 -0
  409. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_job.py +131 -1
  410. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_node.py +53 -1
  411. lightning_sdk/lightning_cloud/openapi/models/v1_slurm_v1.py +27 -1
  412. lightning_sdk/lightning_cloud/openapi/models/v1_snowflake_data_connection.py +253 -0
  413. lightning_sdk/lightning_cloud/openapi/models/v1_status_code_telemetry.py +123 -0
  414. lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset.py +253 -0
  415. lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset_type.py +105 -0
  416. lightning_sdk/lightning_cloud/openapi/models/v1_studio_job_app.py +1 -0
  417. lightning_sdk/lightning_cloud/openapi/models/v1_system_info.py +617 -0
  418. lightning_sdk/lightning_cloud/openapi/models/v1_telemetry.py +331 -0
  419. lightning_sdk/lightning_cloud/openapi/models/v1_timestamp_code_telemetry.py +123 -0
  420. lightning_sdk/lightning_cloud/openapi/models/v1_transaction.py +27 -1
  421. lightning_sdk/lightning_cloud/openapi/models/v1_transfer_user_balance_request.py +27 -1
  422. lightning_sdk/lightning_cloud/openapi/models/v1_update_billing_subscription_request.py +27 -1
  423. lightning_sdk/lightning_cloud/openapi/models/v1_update_cluster_accelerators_request.py +149 -0
  424. lightning_sdk/lightning_cloud/openapi/models/v1_update_index_response.py +97 -0
  425. lightning_sdk/lightning_cloud/openapi/models/v1_update_metrics_stream_visibility_response.py +97 -0
  426. lightning_sdk/lightning_cloud/openapi/models/v1_update_model_visibility_response.py +97 -0
  427. lightning_sdk/lightning_cloud/openapi/models/v1_update_shared_metrics_stream_response.py +97 -0
  428. lightning_sdk/lightning_cloud/openapi/models/v1_update_snowflake_query_response.py +97 -0
  429. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_request.py +53 -1
  430. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_request.py +123 -0
  431. lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_response.py +97 -0
  432. lightning_sdk/lightning_cloud/openapi/models/v1_upstream_cloud_space.py +97 -19
  433. lightning_sdk/lightning_cloud/openapi/models/v1_upstream_job.py +227 -0
  434. lightning_sdk/lightning_cloud/openapi/models/v1_usage.py +27 -1
  435. lightning_sdk/lightning_cloud/openapi/models/v1_usage_details.py +107 -3
  436. lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +1006 -330
  437. lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_compute_config.py +45 -45
  438. lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_flow_compute_config.py +29 -29
  439. lightning_sdk/lightning_cloud/openapi/models/v1_validate_assistant_status_response.py +149 -0
  440. lightning_sdk/lightning_cloud/openapi/models/v1_validate_auto_join_domain_response.py +97 -0
  441. lightning_sdk/lightning_cloud/openapi/models/v1_validate_data_connection_response.py +107 -3
  442. lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_request.py +149 -0
  443. lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_response.py +97 -0
  444. lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_request.py +175 -0
  445. lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_response.py +123 -0
  446. lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_model_response.py +123 -0
  447. lightning_sdk/lightning_cloud/openapi/models/v1_volume.py +175 -0
  448. lightning_sdk/lightning_cloud/openapi/models/v1_vultr_direct_v1.py +125 -0
  449. lightning_sdk/lightning_cloud/openapi/models/validate.py +97 -19
  450. lightning_sdk/lightning_cloud/openapi/models/validateautojoindomain_domain_body.py +123 -0
  451. lightning_sdk/lightning_cloud/openapi/models/version_uploads_body.py +123 -0
  452. lightning_sdk/lightning_cloud/rest_client.py +47 -23
  453. lightning_sdk/lightning_cloud/source_code/logs_socket_api.py +1 -1
  454. lightning_sdk/lightning_cloud/source_code/tar.py +1 -3
  455. lightning_sdk/lightning_cloud/utils/data_connection.py +145 -7
  456. lightning_sdk/machine.py +17 -4
  457. lightning_sdk/mmt/__init__.py +4 -0
  458. lightning_sdk/mmt/base.py +288 -0
  459. lightning_sdk/mmt/mmt.py +282 -0
  460. lightning_sdk/mmt/v1.py +185 -0
  461. lightning_sdk/mmt/v2.py +193 -0
  462. lightning_sdk/models.py +153 -0
  463. lightning_sdk/organization.py +1 -1
  464. lightning_sdk/plugin.py +207 -41
  465. lightning_sdk/services/__init__.py +2 -1
  466. lightning_sdk/services/file_endpoint.py +116 -213
  467. lightning_sdk/services/finetune/__init__.py +13 -15
  468. lightning_sdk/services/utilities.py +99 -26
  469. lightning_sdk/status.py +2 -1
  470. lightning_sdk/studio.py +90 -17
  471. lightning_sdk/teamspace.py +189 -11
  472. lightning_sdk/user.py +1 -1
  473. lightning_sdk/utils/__init__.py +0 -0
  474. lightning_sdk/utils/dynamic.py +61 -0
  475. lightning_sdk/utils/enum.py +116 -0
  476. lightning_sdk/{utils.py → utils/resolve.py} +41 -4
  477. lightning_sdk-0.1.46.dist-info/LICENSE +21 -0
  478. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/METADATA +30 -4
  479. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/RECORD +482 -204
  480. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/WHEEL +1 -1
  481. lightning_sdk/lightning_cloud/openapi/models/app_id_releases_body.py +0 -541
  482. lightning_sdk/lightning_cloud/openapi/models/id_endpoint_body.py +0 -409
  483. lightning_sdk/lightning_cloud/openapi/models/id_get_body1.py +0 -333
  484. lightning_sdk/lightning_cloud/openapi/models/project_id_appsv2_body.py +0 -201
  485. lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_driver_spec.py +0 -1039
  486. lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_secondary_region_spec.py +0 -253
  487. lightning_sdk/lightning_cloud/openapi/models/v1_azure_cluster_driver_spec.py +0 -227
  488. lightning_sdk/lightning_cloud/openapi/models/v1_cluster_driver.py +0 -175
  489. lightning_sdk/lightning_cloud/openapi/models/v1_container_resources.py +0 -201
  490. lightning_sdk/lightning_cloud/openapi/models/v1_eks_custer_driver_status.py +0 -387
  491. lightning_sdk/lightning_cloud/openapi/models/v1_instance_type.py +0 -305
  492. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_driver.py +0 -359
  493. lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_status.py +0 -279
  494. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_release.py +0 -697
  495. lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_v2.py +0 -331
  496. lightning_sdk/services/uploader.py +0 -123
  497. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/entry_points.txt +0 -0
  498. {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/top_level.txt +0 -0
lightning_sdk/studio.py CHANGED
@@ -1,7 +1,9 @@
1
1
  import os
2
+ import warnings
2
3
  from typing import TYPE_CHECKING, Any, Mapping, Optional, Tuple, Union
3
4
 
4
5
  from lightning_sdk.api.studio_api import StudioApi
6
+ from lightning_sdk.api.utils import _machine_to_compute_name
5
7
  from lightning_sdk.constants import _LIGHTNING_DEBUG
6
8
  from lightning_sdk.machine import Machine
7
9
  from lightning_sdk.organization import Organization
@@ -9,7 +11,7 @@ from lightning_sdk.owner import Owner
9
11
  from lightning_sdk.status import Status
10
12
  from lightning_sdk.teamspace import Teamspace
11
13
  from lightning_sdk.user import User
12
- from lightning_sdk.utils import _resolve_teamspace, _setup_logger
14
+ from lightning_sdk.utils.resolve import _resolve_deprecated_cluster, _resolve_teamspace, _setup_logger
13
15
 
14
16
  if TYPE_CHECKING:
15
17
  from lightning_sdk.plugin import Plugin
@@ -28,10 +30,9 @@ class Studio:
28
30
  teamspace: the name of the teamspace the studio is contained by
29
31
  org: the name of the organization owning the :param`teamspace` in case it is owned by an org
30
32
  user: the name of the user owning the :param`teamspace` in case it is owned directly by a user instead of an org
31
- cluster: the name of the cluster, the studio should be created on.
33
+ cloud_account: the name of the cloud account, the studio should be created on.
32
34
  Doesn't matter when the studio already exists.
33
35
  create_ok: whether the studio will be created if it does not yet exist. Defaults to True
34
-
35
36
  Note:
36
37
  Since a teamspace can either be owned by an org or by a user directly,
37
38
  only one of the arguments can be provided.
@@ -47,13 +48,14 @@ class Studio:
47
48
  teamspace: Optional[Union[str, Teamspace]] = None,
48
49
  org: Optional[Union[str, Organization]] = None,
49
50
  user: Optional[Union[str, User]] = None,
50
- cluster: Optional[str] = None,
51
+ cloud_account: Optional[str] = None,
51
52
  create_ok: bool = True,
53
+ cluster: Optional[str] = None, # deprecated in favor of cloud_account
52
54
  ) -> None:
53
55
  self._studio_api = StudioApi()
54
56
 
55
57
  self._teamspace = _resolve_teamspace(teamspace=teamspace, org=org, user=user)
56
- self._cluster = cluster
58
+ self._cloud_account = _resolve_deprecated_cluster(cloud_account, cluster)
57
59
  self._setup_done = False
58
60
 
59
61
  self._plugins = {}
@@ -68,7 +70,9 @@ class Studio:
68
70
  self._studio = self._studio_api.get_studio(name, self._teamspace.id)
69
71
  except ValueError as e:
70
72
  if create_ok:
71
- self._studio = self._studio_api.create_studio(name, self._teamspace.id, cluster=self._cluster)
73
+ self._studio = self._studio_api.create_studio(
74
+ name, self._teamspace.id, cloud_account=self._cloud_account
75
+ )
72
76
  else:
73
77
  raise ValueError(f"Studio {name} does not exist.") from e
74
78
 
@@ -131,14 +135,32 @@ class Studio:
131
135
  return None
132
136
  return self._studio_api.get_machine(self._studio.id, self._teamspace.id)
133
137
 
134
- def start(self, machine: Machine = Machine.CPU) -> None:
138
+ @property
139
+ def interruptible(self) -> bool:
140
+ """Returns whether the Studio is running on a interruptible instance."""
141
+ if self.status != Status.Running:
142
+ return None
143
+
144
+ return self._studio_api.get_interruptible(self._studio.id, self._teamspace.id)
145
+
146
+ @property
147
+ def cluster(self) -> str:
148
+ """Returns the cluster the Studio is running on."""
149
+ warnings.warn("Studio.cluster is deprecated. Use Studio.cloud_account instead", DeprecationWarning)
150
+ return self.cloud_account
151
+
152
+ @property
153
+ def cloud_account(self) -> str:
154
+ return self._studio.cluster_id
155
+
156
+ def start(self, machine: Union[Machine, str] = Machine.CPU, interruptible: bool = False) -> None:
135
157
  """Starts a Studio on the specified machine type (default: CPU-4)."""
136
158
  status = self.status
137
159
  if status == Status.Running:
138
- curr_machine = self.machine
139
- if curr_machine != machine:
160
+ curr_machine = _machine_to_compute_name(self.machine) if self.machine is not None else None
161
+ if curr_machine != _machine_to_compute_name(machine):
140
162
  raise RuntimeError(
141
- f"Requested to start studio on {machine}, but studio is already running on {curr_machine}."
163
+ f"Requested to start studio on {machine}, but studio is already running on {self.machine}."
142
164
  " Consider switching instead!"
143
165
  )
144
166
  _logger.info(f"Studio {self.name} is already running")
@@ -146,7 +168,7 @@ class Studio:
146
168
 
147
169
  if status != Status.Stopped:
148
170
  raise RuntimeError(f"Cannot start a studio that is not stopped. Studio {self.name} is {status}.")
149
- self._studio_api.start_studio(self._studio.id, self._teamspace.id, machine)
171
+ self._studio_api.start_studio(self._studio.id, self._teamspace.id, machine, interruptible=interruptible)
150
172
 
151
173
  self._setup()
152
174
 
@@ -166,11 +188,12 @@ class Studio:
166
188
  kwargs = self._studio_api.duplicate_studio(self._studio.id, self._teamspace.id, self._teamspace.id)
167
189
  return Studio(**kwargs)
168
190
 
169
- def switch_machine(self, machine: Machine) -> None:
191
+ def switch_machine(self, machine: Union[Machine, str], interruptible: bool = False) -> None:
170
192
  """Switches machine to the provided machine type/.
171
193
 
172
194
  Args:
173
195
  machine: the new machine type to switch to
196
+ interruptible: determines whether to switch to an interruptible instance
174
197
 
175
198
  Note:
176
199
  this call is blocking until the new machine is provisioned
@@ -181,7 +204,9 @@ class Studio:
181
204
  raise RuntimeError(
182
205
  f"Cannot switch machine on a studio that is not running. Studio {self.name} is {status}."
183
206
  )
184
- self._studio_api.switch_studio_machine(self._studio.id, self._teamspace.id, machine)
207
+ self._studio_api.switch_studio_machine(
208
+ self._studio.id, self._teamspace.id, machine, interruptible=interruptible
209
+ )
185
210
 
186
211
  def run_with_exit_code(self, *commands: str) -> Tuple[str, int]:
187
212
  """Runs given commands on the Studio while returning output and exit code.
@@ -224,9 +249,9 @@ class Studio:
224
249
  self._studio_api.upload_file(
225
250
  studio_id=self._studio.id,
226
251
  teamspace_id=self._teamspace.id,
227
- cluster_id=self._studio.cluster_id,
252
+ cloud_account=self._studio.cluster_id,
228
253
  file_path=file_path,
229
- remote_path=remote_path,
254
+ remote_path=os.path.normpath(remote_path),
230
255
  progress_bar=progress_bar,
231
256
  )
232
257
 
@@ -240,7 +265,7 @@ class Studio:
240
265
  target_path=file_path,
241
266
  studio_id=self._studio.id,
242
267
  teamspace_id=self._teamspace.id,
243
- cluster_id=self._studio.cluster_id,
268
+ cloud_account=self._studio.cluster_id,
244
269
  )
245
270
 
246
271
  def download_folder(self, remote_path: str, target_path: Optional[str] = None) -> None:
@@ -253,8 +278,53 @@ class Studio:
253
278
  target_path=target_path,
254
279
  studio_id=self._studio.id,
255
280
  teamspace_id=self._teamspace.id,
256
- cluster_id=self._studio.cluster_id,
281
+ cloud_account=self._studio.cluster_id,
282
+ )
283
+
284
+ @property
285
+ def auto_sleep(self) -> bool:
286
+ """Returns if a Studio has auto-sleep enabled."""
287
+ return not self._studio.code_config.disable_auto_shutdown
288
+
289
+ @auto_sleep.setter
290
+ def auto_sleep(self, value: bool) -> None:
291
+ if not value and self.machine == Machine.CPU:
292
+ warnings.warn("Disabling auto-sleep will convert the Studio from free to paid!")
293
+ self._studio_api.update_autoshutdown(self._studio.id, self._teamspace.id, enabled=value, studio=self._studio)
294
+ self._update_studio_reference()
295
+
296
+ @property
297
+ def auto_sleep_time(self) -> int:
298
+ """Returns the time in seconds a Studio has to be idle for auto-sleep to kick in (if enabled)."""
299
+ return self._studio.code_config.idle_shutdown_seconds
300
+
301
+ @auto_sleep_time.setter
302
+ def auto_sleep_time(self, value: int) -> None:
303
+ warnings.warn("Setting auto-sleep time will convert the Studio from free to paid!")
304
+ self._studio_api.update_autoshutdown(
305
+ self._studio.id, self._teamspace.id, idle_shutdown_seconds=value, studio=self._studio
257
306
  )
307
+ self._update_studio_reference()
308
+
309
+ @property
310
+ def auto_shutdown(self) -> bool:
311
+ warnings.warn("auto_shutdown is deprecated. Use auto_sleep instead", DeprecationWarning)
312
+ return self.auto_sleep
313
+
314
+ @auto_shutdown.setter
315
+ def auto_shutdown(self, value: bool) -> None:
316
+ warnings.warn("auto_shutdown is deprecated. Use auto_sleep instead", DeprecationWarning)
317
+ self.auto_sleep = value
318
+
319
+ @property
320
+ def auto_shutdown_time(self) -> int:
321
+ warnings.warn("auto_shutdown_time is deprecated. Use auto_sleep_time instead", DeprecationWarning)
322
+ return self.auto_sleep_time
323
+
324
+ @auto_shutdown_time.setter
325
+ def auto_shutdown_time(self, value: int) -> None:
326
+ warnings.warn("auto_shutdown_time is deprecated. Use auto_sleep_time instead", DeprecationWarning)
327
+ self.auto_sleep_time = value
258
328
 
259
329
  @property
260
330
  def available_plugins(self) -> Mapping[str, str]:
@@ -342,6 +412,9 @@ class Studio:
342
412
  """Returns reader friendly representation."""
343
413
  return repr(self)
344
414
 
415
+ def _update_studio_reference(self) -> None:
416
+ self._studio = self._studio_api.get_studio_by_id(studio_id=self._studio.id, teamspace_id=self._teamspace.id)
417
+
345
418
 
346
419
  def _internal_status_to_external_status(internal_status: str) -> Status:
347
420
  """Converts internal status strings from HTTP requests to external enums."""
@@ -1,10 +1,20 @@
1
+ import warnings
2
+ from pathlib import Path
1
3
  from typing import TYPE_CHECKING, List, Optional, Union
2
4
 
5
+ from lightning_sdk.agents import Agent
3
6
  from lightning_sdk.api import TeamspaceApi
7
+ from lightning_sdk.models import UploadedModelInfo
4
8
  from lightning_sdk.organization import Organization
5
9
  from lightning_sdk.owner import Owner
6
10
  from lightning_sdk.user import User
7
- from lightning_sdk.utils import _get_organizations_for_authed_user, _resolve_org, _resolve_teamspace_name, _resolve_user
11
+ from lightning_sdk.utils.resolve import (
12
+ _get_organizations_for_authed_user,
13
+ _parse_model_and_version,
14
+ _resolve_org,
15
+ _resolve_teamspace_name,
16
+ _resolve_user,
17
+ )
8
18
 
9
19
  if TYPE_CHECKING:
10
20
  from lightning_sdk.studio import Studio
@@ -88,19 +98,33 @@ class Teamspace:
88
98
  from lightning_sdk.studio import Studio
89
99
 
90
100
  studios = []
91
- clusters = self._teamspace_api.list_clusters(teamspace_id=self.id)
101
+ clusters = self._teamspace_api.list_cloud_accounts(teamspace_id=self.id)
92
102
  for cl in clusters:
93
- _studios = self._teamspace_api.list_studios(teamspace_id=self.id, cluster_id=cl.cluster_id)
103
+ _studios = self._teamspace_api.list_studios(teamspace_id=self.id, cloud_account=cl.cluster_id)
94
104
  for s in _studios:
95
105
  studios.append(Studio(name=s.name, teamspace=self, cluster=cl.cluster_name, create_ok=False))
96
106
 
97
107
  return studios
98
108
 
109
+ @property
110
+ def default_cloud_account(self) -> str:
111
+ return self._teamspace.project_settings.preferred_cluster
112
+
113
+ @property
114
+ def cloud_accounts(self) -> List[str]:
115
+ """All cloud accounts associated with that teamspace."""
116
+ clusters = self._teamspace_api.list_cloud_accounts(teamspace_id=self.id)
117
+ return [cl.cluster_name for cl in clusters]
118
+
99
119
  @property
100
120
  def clusters(self) -> List[str]:
101
121
  """All clusters associated with that teamspace."""
102
- clusters = self._teamspace_api.list_clusters(teamspace_id=self.id)
103
- return [cl.cluster_name for cl in clusters]
122
+ warnings.warn(
123
+ "The 'clusters' attribute is deprecated and will be removed in the future. "
124
+ "Please use the 'cloud_accounts' attribute instead.",
125
+ DeprecationWarning,
126
+ )
127
+ return self.cloud_accounts
104
128
 
105
129
  def __eq__(self, other: "Teamspace") -> bool:
106
130
  """Checks whether the provided other object is equal to this one."""
@@ -116,6 +140,161 @@ class Teamspace:
116
140
  """Returns reader friendly representation."""
117
141
  return repr(self)
118
142
 
143
+ def create_agent(
144
+ self,
145
+ name: str,
146
+ api_key: str,
147
+ base_url: str,
148
+ model: str,
149
+ org_id: Optional[str] = "",
150
+ prompt_template: Optional[str] = "",
151
+ description: Optional[str] = "",
152
+ prompt_suggestions: Optional[List[str]] = None,
153
+ file_uploads_enabled: Optional[bool] = None,
154
+ ) -> "Agent":
155
+ agent = self._teamspace_api.create_agent(
156
+ teamspace_id=self.id,
157
+ name=name,
158
+ api_key=api_key,
159
+ base_url=base_url,
160
+ model=model,
161
+ org_id=org_id,
162
+ prompt_template=prompt_template,
163
+ description=description,
164
+ prompt_suggestions=prompt_suggestions,
165
+ file_uploads_enabled=file_uploads_enabled,
166
+ )
167
+ return Agent(agent.id)
168
+
169
+ def upload_model(
170
+ self,
171
+ path: Union[str, Path],
172
+ name: str,
173
+ cloud_account: Optional[str] = None,
174
+ progress_bar: bool = True,
175
+ ) -> UploadedModelInfo:
176
+ """Upload a local checkpoint file to the model store.
177
+
178
+ Args:
179
+ path: Path to the model file or folder to upload.
180
+ name: Name tag of the model to upload.
181
+ cloud_account: The name of the cloud account to store the Model in.
182
+ If not provided, the default cloud account for the Teamspace will be used.
183
+ progress_bar: Whether to show a progress bar for the upload.
184
+ """
185
+ if not path:
186
+ raise ValueError("No path provided to upload")
187
+ if not name:
188
+ raise ValueError("No name provided for the model")
189
+ path = Path(path).resolve()
190
+ if not path.exists():
191
+ raise FileNotFoundError(str(path))
192
+
193
+ cloud_account = (
194
+ self._teamspace_api._determine_cloud_account(self.id) if cloud_account is None else cloud_account
195
+ )
196
+ filepaths = [path] if path.is_file() else [p for p in path.rglob("*") if p.is_file()]
197
+
198
+ if not filepaths:
199
+ raise FileNotFoundError(
200
+ "The path to upload doesn't contain any files. Make sure it points to a file or"
201
+ f" non-empty folder: {path}"
202
+ )
203
+
204
+ root_path = path
205
+ if len(filepaths) == 1:
206
+ root_path = path.parent
207
+
208
+ filenames = ",".join(str(f.relative_to(root_path)) for f in filepaths)
209
+
210
+ model = self._teamspace_api.create_model(
211
+ name=name,
212
+ metadata={"filenames": filenames},
213
+ private=True,
214
+ teamspace_id=self.id,
215
+ cloud_account=cloud_account,
216
+ )
217
+ self._teamspace_api.upload_model_files(
218
+ model_id=model.model_id,
219
+ version=model.version,
220
+ root_path=root_path,
221
+ filepaths=filepaths,
222
+ cloud_account=cloud_account,
223
+ teamspace_id=self.id,
224
+ progress_bar=progress_bar,
225
+ )
226
+ self._teamspace_api.complete_model_upload(
227
+ model_id=model.model_id,
228
+ version=model.version,
229
+ teamspace_id=self.id,
230
+ )
231
+ return UploadedModelInfo(
232
+ name=name,
233
+ version=model.version,
234
+ teamspace=self.name,
235
+ cloud_account=cloud_account,
236
+ )
237
+
238
+ def download_model(
239
+ self,
240
+ name: str,
241
+ download_dir: Optional[str] = None,
242
+ progress_bar: bool = True,
243
+ ) -> str:
244
+ """Download a checkpoint from the model store.
245
+
246
+ Args:
247
+ name: Name tag of the model to download. Can optionally also contain a version tag separated by a colon,
248
+ e.g. 'modelname:v1'.
249
+ download_dir: A path to directory where the model should be downloaded. Defaults
250
+ to the current working directory.
251
+ progress_bar: Whether to show a progress bar for the download.
252
+
253
+ Returns:
254
+ The absolute path to the downloaded model file or folder.
255
+
256
+ """
257
+ if not name:
258
+ raise ValueError("No name provided for the model")
259
+ if download_dir is None:
260
+ download_dir = Path.cwd()
261
+ download_dir = Path(download_dir)
262
+
263
+ name, version = _parse_model_and_version(name)
264
+ model_version = self._teamspace_api.get_model_version(name=name, version=version, teamspace_id=self.id)
265
+ if not model_version.upload_complete:
266
+ raise RuntimeError(
267
+ f"Model {name}:{version} is not fully uploaded yet. Please wait until the upload is complete."
268
+ )
269
+ downloaded_files = self._teamspace_api.download_model_files(
270
+ name=name,
271
+ version=version,
272
+ download_dir=download_dir,
273
+ teamspace_name=self.name,
274
+ teamspace_owner_name=self.owner.name,
275
+ progress_bar=progress_bar,
276
+ )
277
+
278
+ if not downloaded_files:
279
+ raise RuntimeError("No files were downloaded. This shouldn't happen, please report a bug.")
280
+
281
+ if len(downloaded_files) == 1:
282
+ downloaded_file = Path(downloaded_files[0])
283
+ downloaded_path = download_dir / downloaded_file.parts[0]
284
+ return str(downloaded_path.resolve())
285
+ return str(Path(download_dir).resolve())
286
+
287
+ def delete_model(self, name: str) -> None:
288
+ """Delete a model from the model store.
289
+
290
+ Args:
291
+ name: Name tag of the model to delete. Can optionally also contain a version tag separated by a colon,
292
+ e.g. 'entity/modelname:v1'.
293
+
294
+ """
295
+ name, version = _parse_model_and_version(name)
296
+ self._teamspace_api.delete_model(name=name, version=version, teamspace_id=self.id)
297
+
119
298
 
120
299
  def _resolve_valueerror_message(error: ValueError, owner: Owner, teamspace_name: str) -> ValueError:
121
300
  """Resolves the ValueError Message and replaces it with a nicer message."""
@@ -127,18 +306,17 @@ def _resolve_valueerror_message(error: ValueError, owner: Owner, teamspace_name:
127
306
  organizations = _get_organizations_for_authed_user()
128
307
  message = (
129
308
  f"Teamspace {entire_ts_name} does not exist. "
130
- "Is it maybe an organizational Teamspace? You are a member of the following organizations: "
131
- f"{[o.name for o in organizations]}. Maybe specify one of these instead "
132
- "of your user if the Teamspace belongs to the organization."
309
+ f"Is {teamspace_name} an organizational Teamspace? You are a member of the following organizations: "
310
+ f"{[o.name for o in organizations]}. Try specifying the `org` parameter instead "
311
+ "of `user` if the Teamspace belongs to the organization."
133
312
  )
134
313
  else:
135
314
  # organization teamspace owner
136
315
  user = User()
137
316
  message = (
138
317
  f"Teamspace {entire_ts_name} does not exist. "
139
- f"Is it maybe a user Teamspace. You specified org={owner.name}, "
140
- "but maybe the Teamspace is part of your user? "
141
- f"Consider specifying user={user.name} instead of your org."
318
+ f"Is {teamspace_name} a user Teamspace? "
319
+ f"Consider specifying user={user.name} instead of org={owner.name}."
142
320
  )
143
321
 
144
322
  return ValueError(message, *error.args[1:])
lightning_sdk/user.py CHANGED
@@ -2,7 +2,7 @@ from typing import Optional
2
2
 
3
3
  from lightning_sdk.api import UserApi
4
4
  from lightning_sdk.owner import Owner
5
- from lightning_sdk.utils import _resolve_user_name
5
+ from lightning_sdk.utils.resolve import _resolve_user_name
6
6
 
7
7
 
8
8
  class User(Owner):
File without changes
@@ -0,0 +1,61 @@
1
+ from abc import ABCMeta
2
+ from typing import Any, Callable, Tuple, Type
3
+
4
+
5
+ class ConditionBaseMeta(ABCMeta):
6
+ """Metaclass that allows for conditional inheritance.
7
+
8
+ This metaclass is used to conditionally inherit from two base classes
9
+ based on the result of a given condition function.
10
+
11
+ Example usage:
12
+ ```
13
+ def my_condition():
14
+ return some_condition # Define your condition here
15
+
16
+ class A:
17
+ pass
18
+
19
+ class B:
20
+ pass
21
+
22
+ class MyNewClass(metaclass=ConditionBaseMeta, condition_func=my_condition, base_true=A, base_false=B):
23
+ pass
24
+ ```
25
+
26
+ Args:
27
+ cls: The metaclass itself.
28
+ name: The name of the class being created.
29
+ bases: The base classes of the class being created.
30
+ attrs: The attributes of the class being created.
31
+ condition_func: The function that determines which base class to inherit from.
32
+ base_true: The base class to inherit from if the condition function returns True.
33
+ base_false: The base class to inherit from if the condition function returns False.
34
+
35
+ Returns:
36
+ type: The new class with the appropriate base class.
37
+ """
38
+
39
+ def __new__(
40
+ cls,
41
+ name: str,
42
+ bases: Tuple[type, ...],
43
+ attrs: dict,
44
+ condition_func: Callable[[], bool],
45
+ base_true: Type,
46
+ base_false: Type,
47
+ ) -> Type:
48
+ # Helper function to determine the base class
49
+ def get_base() -> type:
50
+ return base_true if condition_func() else base_false
51
+
52
+ base = get_base()
53
+ attrs["_base"] = base
54
+
55
+ # Create the final class, inheriting from both the intermediate base and the original bases
56
+ return super().__new__(cls, name, (base, *bases), attrs)
57
+
58
+ def __getattr__(cls, name: str) -> Any:
59
+ """Get an attribute from the appropriate base class."""
60
+ # Delegate attribute lookup to the appropriate base class
61
+ return getattr(cls._base, name)
@@ -0,0 +1,116 @@
1
+ from enum import Enum, EnumMeta, unique
2
+ from types import MappingProxyType
3
+ from typing import Any, Dict, Iterator, Union
4
+
5
+
6
+ # We silence annotation errors as the function signatures are exactly the same in python core enum.py
7
+ # modified from https://stackoverflow.com/a/62309159
8
+ class OnAccess(EnumMeta):
9
+ """Runs a user-specified function whenever member is accessed."""
10
+
11
+ def __getattribute__(cls, name: str) -> Any: # noqa: N805
12
+ """Called when an attribute is accessed."""
13
+ obj = super().__getattribute__(name)
14
+ if isinstance(obj, Enum) and obj._on_access:
15
+ obj._on_access()
16
+ return _resolve_deprecated_enum_fields(obj)
17
+
18
+ def __getitem__(cls, name: str) -> Any: # noqa: N805
19
+ """Called when an item is accessed."""
20
+ member = super().__getitem__(name)
21
+ if isinstance(member, Enum) and member._on_access:
22
+ member._on_access()
23
+
24
+ return _resolve_deprecated_enum_fields(member)
25
+
26
+ def __call__(
27
+ cls, # noqa: N805
28
+ value, # noqa: ANN001
29
+ names=None, # noqa: ANN001
30
+ *,
31
+ module=None, # noqa: ANN001
32
+ qualname=None, # noqa: ANN001
33
+ type=None, # noqa: A002, ANN001
34
+ start=1, # noqa: ANN001
35
+ ) -> Any:
36
+ obj = super().__call__(value, names, module=module, qualname=qualname, type=type, start=start)
37
+ if isinstance(obj, Enum) and obj._on_access:
38
+ obj._on_access()
39
+ return _resolve_deprecated_enum_fields(obj)
40
+
41
+ @staticmethod
42
+ def _filter_func(member: "DeprecationEnum") -> bool:
43
+ return not member.deprecated
44
+
45
+ def __iter__(cls) -> Iterator["DeprecationEnum"]: # noqa: N805
46
+ """Returns members in definition order.
47
+
48
+ Excludes deprecated members
49
+
50
+ """
51
+ return filter(cls._filter_func, (cls._member_map_[name] for name in cls._member_names_))
52
+
53
+ def __len__(cls) -> int: # noqa: N805
54
+ """Length of the enum excluding deprecated members."""
55
+ return len(cls.__members__)
56
+
57
+ @property
58
+ def __members__(cls) -> Dict[str, "DeprecationEnum"]: # noqa: N805
59
+ """Returns a mapping of member name->value.
60
+
61
+ This mapping lists all enum members, including aliases. Note that this is a read-only view of the internal
62
+ mapping.
63
+
64
+ Excludes deprecated members.
65
+
66
+ """
67
+ return MappingProxyType(
68
+ {name: member for name, member in cls._member_map_.items() if not cls._filter_func(member)}
69
+ )
70
+
71
+ def __reversed__(cls) -> Iterator["DeprecationEnum"]: # noqa: N805
72
+ """Returns members in reverse definition order.
73
+
74
+ Excludes deprecated members
75
+
76
+ """
77
+ return filter(cls._filter_func, (cls._member_map_[name] for name in reversed(cls._member_names_)))
78
+
79
+
80
+ def _resolve_deprecated_enum_fields(value: Union[Any, "DeprecationEnum"]) -> Union[Any, "DeprecationEnum"]:
81
+ """Resolves deprecated enum fields to their preferred values."""
82
+ if getattr(value, "deprecated", False):
83
+ return value.__class__[value.preferred_way]
84
+ return value
85
+
86
+
87
+ # NOTE: even deprecated enums need to have unique values.
88
+ # otherwise the deprecation warning will not be triggered
89
+ # as duplicated values are handled as aliases towards the original value
90
+ # and the original value is not accessed. However, _resolve_deprecated_enum_fields
91
+ # will handle this case and return the preferred value
92
+ @unique
93
+ class DeprecationEnum(Enum, metaclass=OnAccess):
94
+ def __new__(cls, value, *args) -> Any: # noqa: ANN001, ANN002
95
+ member = object.__new__(cls)
96
+ member._value_ = value
97
+ member.deprecated = False
98
+ member._on_access = None
99
+
100
+ if args:
101
+ member.preferred_way = args[0]
102
+ member._on_access = member.deprecate
103
+ member.deprecated = True
104
+
105
+ return member
106
+
107
+ def deprecate(self) -> None:
108
+ import warnings
109
+
110
+ clsname = self.__class__.__name__
111
+
112
+ warnings.warn(
113
+ f"{clsname}.{self.name} is deprecated. Use {clsname}.{self.preferred_way} instead!",
114
+ DeprecationWarning,
115
+ stacklevel=3,
116
+ )