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.
- lightning_sdk/__init__.py +12 -2
- lightning_sdk/agents.py +46 -0
- lightning_sdk/ai_hub.py +185 -0
- lightning_sdk/api/__init__.py +4 -0
- lightning_sdk/api/agents_api.py +107 -0
- lightning_sdk/api/ai_hub_api.py +130 -0
- lightning_sdk/api/deployment_api.py +574 -0
- lightning_sdk/api/job_api.py +308 -0
- lightning_sdk/api/mmt_api.py +188 -0
- lightning_sdk/api/org_api.py +1 -3
- lightning_sdk/api/studio_api.py +172 -81
- lightning_sdk/api/teamspace_api.py +219 -20
- lightning_sdk/api/user_api.py +24 -9
- lightning_sdk/api/utils.py +429 -48
- lightning_sdk/cli/ai_hub.py +49 -0
- lightning_sdk/cli/download.py +132 -0
- lightning_sdk/cli/entrypoint.py +11 -3
- lightning_sdk/cli/run.py +206 -0
- lightning_sdk/cli/serve.py +218 -0
- lightning_sdk/cli/studios_menu.py +78 -0
- lightning_sdk/cli/upload.py +79 -89
- lightning_sdk/constants.py +29 -1
- lightning_sdk/deployment/__init__.py +25 -0
- lightning_sdk/deployment/deployment.py +389 -0
- lightning_sdk/helpers.py +49 -0
- lightning_sdk/job/__init__.py +5 -0
- lightning_sdk/job/base.py +295 -0
- lightning_sdk/job/job.py +266 -0
- lightning_sdk/job/v1.py +241 -0
- lightning_sdk/job/v2.py +193 -0
- lightning_sdk/job/work.py +72 -0
- lightning_sdk/lightning_cloud/__version__.py +1 -1
- lightning_sdk/lightning_cloud/cli/__main__.py +15 -13
- lightning_sdk/lightning_cloud/env.py +1 -0
- lightning_sdk/lightning_cloud/login.py +12 -8
- lightning_sdk/lightning_cloud/openapi/__init__.py +288 -42
- lightning_sdk/lightning_cloud/openapi/api/__init__.py +10 -0
- lightning_sdk/lightning_cloud/openapi/api/analytics_service_api.py +141 -0
- lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py +1075 -227
- lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py +9 -1
- lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +992 -233
- lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +883 -120
- lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +10 -5
- lightning_sdk/lightning_cloud/openapi/api/deployment_templates_service_api.py +756 -0
- lightning_sdk/lightning_cloud/openapi/api/endpoint_service_api.py +422 -1
- lightning_sdk/lightning_cloud/openapi/api/experiments_service_api.py +242 -0
- lightning_sdk/lightning_cloud/openapi/api/file_system_service_api.py +674 -0
- lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +3823 -0
- lightning_sdk/lightning_cloud/openapi/api/lightningapp_instance_service_api.py +158 -594
- lightning_sdk/lightning_cloud/openapi/api/lightningapp_v2_service_api.py +0 -1086
- lightning_sdk/lightning_cloud/openapi/api/lightningwork_service_api.py +113 -0
- lightning_sdk/lightning_cloud/openapi/api/lit_logger_service_api.py +1753 -0
- lightning_sdk/lightning_cloud/openapi/api/lit_registry_service_api.py +242 -0
- lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +1423 -108
- lightning_sdk/lightning_cloud/openapi/api/organizations_service_api.py +421 -1
- lightning_sdk/lightning_cloud/openapi/api/profiler_service_api.py +663 -0
- lightning_sdk/lightning_cloud/openapi/api/projects_service_api.py +5 -1
- lightning_sdk/lightning_cloud/openapi/api/secret_service_api.py +478 -1
- lightning_sdk/lightning_cloud/openapi/api/slurm_jobs_user_service_api.py +9 -5
- lightning_sdk/lightning_cloud/openapi/api/snowflake_service_api.py +686 -0
- lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +1094 -0
- lightning_sdk/lightning_cloud/openapi/api/studio_jobs_service_api.py +4 -4
- lightning_sdk/lightning_cloud/openapi/api/user_service_api.py +1081 -34
- lightning_sdk/lightning_cloud/openapi/models/__init__.py +278 -40
- lightning_sdk/lightning_cloud/openapi/models/affiliatelinks_id_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/agentmanagedendpoints_id_body.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/{assistants_id_body.py → agents_id_body.py} +201 -71
- lightning_sdk/lightning_cloud/openapi/models/app_id_works_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/approveautojoindomain_domain_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/apps_id_body1.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +1 -27
- lightning_sdk/lightning_cloud/openapi/models/{v1_get_cluster_health_response.py → captures_id_body.py} +16 -16
- lightning_sdk/lightning_cloud/openapi/models/cloud_space_id_versionpublications_body1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_runs_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/cloudspaces_id_body.py +58 -6
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityblock_body.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityreservations_body.py +55 -3
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_proxies_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/create.py +157 -1
- lightning_sdk/lightning_cloud/openapi/models/create_deployment_request_defines_a_spec_for_the_job_that_allows_for_autoscaling_jobs.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/deployments_id_body.py +565 -0
- lightning_sdk/lightning_cloud/openapi/models/deploymenttemplates_id_body.py +513 -0
- lightning_sdk/lightning_cloud/openapi/models/endpoints_id_body.py +43 -17
- lightning_sdk/lightning_cloud/openapi/models/experiment_name_variant_name_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/externalv1_cloud_space_instance_status.py +107 -1
- lightning_sdk/lightning_cloud/openapi/models/externalv1_lightningapp_instance.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/externalv1_user_status.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/fileendpoints_id_body.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/id_codeconfig_body.py +29 -55
- lightning_sdk/lightning_cloud/openapi/models/id_engage_body.py +3 -29
- lightning_sdk/lightning_cloud/openapi/models/id_engage_body1.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/id_execute_body.py +3 -55
- lightning_sdk/lightning_cloud/openapi/models/id_execute_body1.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_get_body.py +133 -3
- lightning_sdk/lightning_cloud/openapi/models/id_index_body.py +67 -15
- lightning_sdk/lightning_cloud/openapi/models/id_index_body2.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/id_index_body3.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_reportlogsactivity_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/id_start_body.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/id_storage_body.py +52 -26
- lightning_sdk/lightning_cloud/openapi/models/id_visibility_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/jobs_id_body1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/jobs_id_body2.py +17 -43
- lightning_sdk/lightning_cloud/openapi/models/jobs_id_body3.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/litloggermetrics_id_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/litpages_id_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/loggermetrics_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/metrics_stream_id_loggerartifacts_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/metricsstream_create_body.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_id_list.py → metricsstream_delete_body.py} +10 -10
- lightning_sdk/lightning_cloud/openapi/models/metricsstream_id_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_response.py → model_id_versions_body.py} +25 -51
- lightning_sdk/lightning_cloud/openapi/models/model_id_visibility_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/models_model_id_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/multimachinejobs_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/org_id_memberships_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +183 -1
- lightning_sdk/lightning_cloud/openapi/models/profiler_captures_body.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/profiler_enabled_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_agentmanagedendpoints_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/{project_id_assistants_body.py → project_id_agents_body.py} +159 -55
- lightning_sdk/lightning_cloud/openapi/models/project_id_cloudspaces_body.py +71 -19
- lightning_sdk/lightning_cloud/openapi/models/project_id_fileendpoints_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_jobs_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_litregistry_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_memberships_body.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_upload_model_request.py → project_id_models_body.py} +70 -70
- lightning_sdk/lightning_cloud/openapi/models/project_id_multimachinejobs_body.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_secrets_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_snowflake_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/projects_id_body.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/query_query_id_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/secrets_id_body1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/servers_server_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/service_artifact_artifact_kind.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/serviceexecution_id_body.py +43 -43
- lightning_sdk/lightning_cloud/openapi/models/slurm_jobs_body.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/snowflake_export_body.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_download_model_response.py → snowflake_query_body.py} +51 -51
- lightning_sdk/lightning_cloud/openapi/models/storage_complete_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/update.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/upload_id_complete_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/upload_id_parts_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/user_id_affiliatelinks_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_accelerator_quota_info.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ack_user_storage_violation_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_add_job_timing_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_affiliate_link.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_agent_job.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_api_pricing_spec.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_app_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_append_logger_metrics_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_approve_auto_join_domain_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assign_variant_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_item_status.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_knowledge_status.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_model_status.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_domain_validation.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_auto_join_org_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_spec.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_autoscaling_target_metric.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_aws_direct_v1.py +133 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_batch_update_lightningwork_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cancellation_metadata.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_capacity_block_offering.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_check_snowflake_connection_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_checkbox.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space.py +136 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_code_version.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_config.py +1 -53
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_instance_startup_status.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_log_service.py → v1_cloud_space_session.py} +49 -49
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_version.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +445 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +55 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_names.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_proxy.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_resource_tag.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_security_options.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +157 -107
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_state.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_status.py +17 -43
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_tagging_options.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_type.py +0 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_command_argument.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_complete_model_upload_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_complete_multi_part_upload_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_completed_part.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_conversation.py +15 -15
- lightning_sdk/lightning_cloud/openapi/models/v1_conversation_response_chunk.py +26 -26
- lightning_sdk/lightning_cloud/openapi/models/v1_count_metrics_streams_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_checkout_session_request.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_cluster_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_deployment_template_request.py +539 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_multi_part_upload_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_organization_request.py +159 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_create_project_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_request.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_shared_metrics_stream_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_snowflake_connection_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_user_secret_request.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_data_connection.py +365 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_performance_profile.py → v1_data_connection_state.py} +11 -9
- lightning_sdk/lightning_cloud/openapi/models/v1_data_path.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_affiliate_link_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_session_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_cluster_proxy_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_deployment_release_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_azure_cluster_driver_status.py → v1_delete_deployment_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_index_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_byom_cluster_driver.py → v1_delete_job_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_v2_response.py → v1_delete_logger_artifact_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_managed_endpoint_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_metrics_stream_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_multi_machine_job_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_profiler_capture_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_delete_lightningapp_release_response.py → v1_delete_shared_metrics_stream_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment.py +617 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_api.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_event_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_metrics.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_performance.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_release.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_spec.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_state.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_status.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/{appsv2_id_body.py → v1_deployment_strategy.py} +39 -39
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template.py +721 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_engagement_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_gallery_response.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_placement.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_parameter_type.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template_summary.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/{instance_type_availability.py → v1_deployment_template_type.py} +10 -10
- lightning_sdk/lightning_cloud/openapi/models/{v1_get_lightningapp_source_code_download_url_response.py → v1_download_job_logs_response.py} +10 -10
- lightning_sdk/lightning_cloud/openapi/models/v1_download_service_execution_artifact_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ebs.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_efs_config.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint.py +53 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_auth.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_execute_cloud_space_command_response.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_execute_in_cloud_space_session_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_execute_snowflake_query_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_experiment.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_export_snowflake_query_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_file_endpoint.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_instance_spec.py → v1_filesystem_app.py} +85 -59
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_cloud_space.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_dataset.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_job.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_slurm_job.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_snowflake_connection.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_work.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_find_capacity_block_offering_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_gcp_data_connection.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_gcs_folder_data_connection.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_affiliate_link_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_list_cluster_instance_types_response.py → v1_get_deployment_routing_telemetry_aggregated_response.py} +23 -23
- lightning_sdk/lightning_cloud/openapi/models/v1_get_deployment_routing_telemetry_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_folder_index_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_cluster_driver_status.py → v1_get_job_stats_response.py} +39 -39
- lightning_sdk/lightning_cloud/openapi/models/v1_get_job_system_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_lightningapp_instance_open_ports_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_logger_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_upload_urls_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_file_url_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_response.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_files_url_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_lightningwork_cluster_driver.py → v1_get_project_artifact_response.py} +33 -14
- lightning_sdk/lightning_cloud/openapi/models/v1_get_project_balance_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_project_storage_metadata_response.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_service_execution_status_response.py +67 -15
- lightning_sdk/lightning_cloud/openapi/models/v1_get_snowflake_query_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_balance_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_breakdown_response.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_response.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1.py +163 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1_status.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_header.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_external_kubeconfig.py → v1_health_check_exec.py} +21 -21
- lightning_sdk/lightning_cloud/openapi/models/v1_health_check_http_get.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ids_logger_metrics.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_input.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_interrupt_server_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job.py +697 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_health_check_config.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_log_entry.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_page.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_logs_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +669 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_timing.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_joinable_organization.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_knowledge_configuration.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lambda_labs_direct_v1.py +125 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lightning_run.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_spec.py +105 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_status.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_spec.py +27 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningwork_status.py +81 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_list_affiliate_links_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_python_versions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_sessions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_tags_response.py +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_availabilities_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_proxies_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_events_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_releases_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_tags_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_templates_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployments_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_experiments_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_apps_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_cloud_spaces_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_datasets_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_jobs_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_slurm_jobs_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_snowflake_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_list_lightningapps_v2_response.py → v1_list_jobs_response.py} +31 -31
- lightning_sdk/lightning_cloud/openapi/models/v1_list_joinable_organizations_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_logger_artifact_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_metrics_streams_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_job_events_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_multi_machine_jobs_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_new_features_for_user_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_profiler_captures_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_project_locked_resources_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_published_cloud_spaces_response.py +3 -29
- lightning_sdk/lightning_cloud/openapi/models/v1_list_published_deployment_templates_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_service_execution_lightningapp_instances_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_page.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_registry_project.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_repository.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_locked_resource.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_logger_artifact.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_machines_selector.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_request.py +81 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_response.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_endpoint.py +175 -19
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_model.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_model_abilities.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_membership.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_message.py +138 -8
- lightning_sdk/lightning_cloud/openapi/models/v1_message_content.py +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_message_content_type.py +103 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metadata.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_metric_value.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics_stream.py +799 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tags.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics_tracker.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_model.py +95 -17
- lightning_sdk/lightning_cloud/openapi/models/v1_model_file.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_model_version_archive.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_mount_target.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job.py +487 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_event.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/{get_cluster_health_response_health_status.py → v1_multi_machine_job_event_type.py} +9 -9
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_fault_tolerance_strategy.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_state.py +108 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_status.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_named_get_logger_metrics.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_new_feature.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_onboarding_event_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +209 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_parameterization_spec.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_path_telemetry.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_phase_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_profiler_capture.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_profiler_enabled_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_project.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +263 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_project_storage.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_published_cloud_space_response.py +188 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_purchase_capacity_block_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_query_param.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_query_result.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_query_result_row.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_refresh_path_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_regional_load_balancer.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_logs_activity_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_request_cluster_access_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_cloud_space_tag.py → v1_resource_tag.py} +18 -18
- lightning_sdk/lightning_cloud/openapi/models/v1_resource_visibility.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_resources.py +37 -11
- lightning_sdk/lightning_cloud/openapi/models/v1_restore_deployment_release_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_rolling_update_strategy.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_rule_condition.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +11 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_s3_folder_data_connection.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_search_job_logs_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_secret.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/{v1_lightningapp_cluster_driver.py → v1_secret_type.py} +10 -9
- lightning_sdk/lightning_cloud/openapi/models/v1_select.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_server_check_in_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_service_artifact.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_service_execution.py +43 -43
- lightning_sdk/lightning_cloud/openapi/models/v1_should_start_syncing_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_signed_url.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_job.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_node.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_v1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_snowflake_data_connection.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_status_code_telemetry.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset_type.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_studio_job_app.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_system_info.py +617 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_telemetry.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_timestamp_code_telemetry.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_transaction.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_transfer_user_balance_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_billing_subscription_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_cluster_accelerators_request.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_index_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_metrics_stream_visibility_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_model_visibility_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_shared_metrics_stream_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_snowflake_query_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_request.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_request.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_viewed_new_features_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_upstream_cloud_space.py +97 -19
- lightning_sdk/lightning_cloud/openapi/models/v1_upstream_job.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_usage.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_usage_details.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +1006 -330
- lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_compute_config.py +45 -45
- lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_flow_compute_config.py +29 -29
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_assistant_status_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_auto_join_domain_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_data_connection_response.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_request.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_model_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_volume.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_vultr_direct_v1.py +125 -0
- lightning_sdk/lightning_cloud/openapi/models/validate.py +97 -19
- lightning_sdk/lightning_cloud/openapi/models/validateautojoindomain_domain_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/version_uploads_body.py +123 -0
- lightning_sdk/lightning_cloud/rest_client.py +47 -23
- lightning_sdk/lightning_cloud/source_code/logs_socket_api.py +1 -1
- lightning_sdk/lightning_cloud/source_code/tar.py +1 -3
- lightning_sdk/lightning_cloud/utils/data_connection.py +145 -7
- lightning_sdk/machine.py +17 -4
- lightning_sdk/mmt/__init__.py +4 -0
- lightning_sdk/mmt/base.py +288 -0
- lightning_sdk/mmt/mmt.py +282 -0
- lightning_sdk/mmt/v1.py +185 -0
- lightning_sdk/mmt/v2.py +193 -0
- lightning_sdk/models.py +153 -0
- lightning_sdk/organization.py +1 -1
- lightning_sdk/plugin.py +207 -41
- lightning_sdk/services/__init__.py +2 -1
- lightning_sdk/services/file_endpoint.py +116 -213
- lightning_sdk/services/finetune/__init__.py +13 -15
- lightning_sdk/services/utilities.py +99 -26
- lightning_sdk/status.py +2 -1
- lightning_sdk/studio.py +90 -17
- lightning_sdk/teamspace.py +189 -11
- lightning_sdk/user.py +1 -1
- lightning_sdk/utils/__init__.py +0 -0
- lightning_sdk/utils/dynamic.py +61 -0
- lightning_sdk/utils/enum.py +116 -0
- lightning_sdk/{utils.py → utils/resolve.py} +41 -4
- lightning_sdk-0.1.46.dist-info/LICENSE +21 -0
- {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/METADATA +30 -4
- {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/RECORD +482 -204
- {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/WHEEL +1 -1
- lightning_sdk/lightning_cloud/openapi/models/app_id_releases_body.py +0 -541
- lightning_sdk/lightning_cloud/openapi/models/id_endpoint_body.py +0 -409
- lightning_sdk/lightning_cloud/openapi/models/id_get_body1.py +0 -333
- lightning_sdk/lightning_cloud/openapi/models/project_id_appsv2_body.py +0 -201
- lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_driver_spec.py +0 -1039
- lightning_sdk/lightning_cloud/openapi/models/v1_aws_cluster_secondary_region_spec.py +0 -253
- lightning_sdk/lightning_cloud/openapi/models/v1_azure_cluster_driver_spec.py +0 -227
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_driver.py +0 -175
- lightning_sdk/lightning_cloud/openapi/models/v1_container_resources.py +0 -201
- lightning_sdk/lightning_cloud/openapi/models/v1_eks_custer_driver_status.py +0 -387
- lightning_sdk/lightning_cloud/openapi/models/v1_instance_type.py +0 -305
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_driver.py +0 -359
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_cluster_status.py +0 -279
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_release.py +0 -697
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_v2.py +0 -331
- lightning_sdk/services/uploader.py +0 -123
- {lightning_sdk-0.1.3.dist-info → lightning_sdk-0.1.46.dist-info}/entry_points.txt +0 -0
- {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
|
-
|
|
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
|
-
|
|
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.
|
|
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(
|
|
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
|
-
|
|
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 {
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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."""
|
lightning_sdk/teamspace.py
CHANGED
|
@@ -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
|
|
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.
|
|
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,
|
|
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
|
-
|
|
103
|
-
|
|
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
|
|
131
|
-
f"{[o.name for o in organizations]}.
|
|
132
|
-
"of
|
|
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
|
|
140
|
-
"
|
|
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
|
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
|
+
)
|