lightning-sdk 0.1.49__py3-none-any.whl → 2025.11.5__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 +19 -9
- lightning_sdk/__version__.py +3 -0
- lightning_sdk/agents.py +2 -1
- lightning_sdk/ai_hub.py +43 -38
- lightning_sdk/api/__init__.py +2 -0
- lightning_sdk/api/ai_hub_api.py +49 -6
- lightning_sdk/api/base_studio_api.py +90 -0
- lightning_sdk/api/cloud_account_api.py +225 -0
- lightning_sdk/api/deployment_api.py +133 -27
- lightning_sdk/api/job_api.py +147 -34
- lightning_sdk/api/license_api.py +37 -0
- lightning_sdk/api/lit_container_api.py +231 -19
- lightning_sdk/api/llm_api.py +306 -0
- lightning_sdk/api/mmt_api.py +112 -28
- lightning_sdk/api/pipeline_api.py +120 -0
- lightning_sdk/api/studio_api.py +440 -89
- lightning_sdk/api/teamspace_api.py +269 -31
- lightning_sdk/api/user_api.py +56 -2
- lightning_sdk/api/utils.py +185 -52
- lightning_sdk/base_studio.py +123 -0
- lightning_sdk/cli/__init__.py +1 -0
- lightning_sdk/cli/base_studio/__init__.py +10 -0
- lightning_sdk/cli/base_studio/list.py +43 -0
- lightning_sdk/cli/config/__init__.py +14 -0
- lightning_sdk/cli/config/get.py +57 -0
- lightning_sdk/cli/config/set.py +92 -0
- lightning_sdk/cli/config/show.py +9 -0
- lightning_sdk/cli/entrypoint.py +98 -56
- lightning_sdk/cli/groups.py +56 -0
- lightning_sdk/cli/job/__init__.py +7 -0
- lightning_sdk/cli/legacy/__init__.py +0 -0
- lightning_sdk/cli/legacy/ai_hub.py +65 -0
- lightning_sdk/cli/legacy/clusters_menu.py +49 -0
- lightning_sdk/cli/legacy/configure.py +129 -0
- lightning_sdk/cli/legacy/connect.py +34 -0
- lightning_sdk/cli/legacy/create.py +115 -0
- lightning_sdk/cli/legacy/delete.py +131 -0
- lightning_sdk/cli/legacy/deploy/__init__.py +0 -0
- lightning_sdk/cli/legacy/deploy/_auth.py +196 -0
- lightning_sdk/cli/legacy/deploy/devbox.py +163 -0
- lightning_sdk/cli/legacy/deploy/serve.py +452 -0
- lightning_sdk/cli/legacy/docker_cli.py +22 -0
- lightning_sdk/cli/legacy/download.py +322 -0
- lightning_sdk/cli/legacy/entrypoint.py +110 -0
- lightning_sdk/cli/legacy/generate.py +52 -0
- lightning_sdk/cli/legacy/inspection.py +45 -0
- lightning_sdk/cli/{job_and_mmt_action.py → legacy/job_and_mmt_action.py} +6 -6
- lightning_sdk/cli/{jobs_menu.py → legacy/jobs_menu.py} +3 -2
- lightning_sdk/cli/legacy/list.py +326 -0
- lightning_sdk/cli/{mmts_menu.py → legacy/mmts_menu.py} +3 -2
- lightning_sdk/cli/legacy/open.py +81 -0
- lightning_sdk/cli/legacy/run.py +443 -0
- lightning_sdk/cli/legacy/start.py +107 -0
- lightning_sdk/cli/legacy/stop.py +107 -0
- lightning_sdk/cli/{studios_menu.py → legacy/studios_menu.py} +24 -1
- lightning_sdk/cli/legacy/switch.py +63 -0
- lightning_sdk/cli/{teamspace_menu.py → legacy/teamspace_menu.py} +12 -3
- lightning_sdk/cli/legacy/upload.py +382 -0
- lightning_sdk/cli/license/__init__.py +14 -0
- lightning_sdk/cli/license/get.py +15 -0
- lightning_sdk/cli/license/list.py +45 -0
- lightning_sdk/cli/license/set.py +13 -0
- lightning_sdk/cli/mmt/__init__.py +7 -0
- lightning_sdk/cli/studio/__init__.py +24 -0
- lightning_sdk/cli/studio/connect.py +139 -0
- lightning_sdk/cli/studio/create.py +96 -0
- lightning_sdk/cli/studio/delete.py +49 -0
- lightning_sdk/cli/studio/list.py +85 -0
- lightning_sdk/cli/studio/ssh.py +64 -0
- lightning_sdk/cli/studio/start.py +115 -0
- lightning_sdk/cli/studio/stop.py +45 -0
- lightning_sdk/cli/studio/switch.py +66 -0
- lightning_sdk/cli/utils/__init__.py +7 -0
- lightning_sdk/cli/utils/cloud_account_map.py +10 -0
- lightning_sdk/cli/utils/coloring.py +60 -0
- lightning_sdk/cli/utils/get_base_studio.py +24 -0
- lightning_sdk/cli/utils/handle_machine_and_gpus_args.py +69 -0
- lightning_sdk/cli/utils/logging.py +122 -0
- lightning_sdk/cli/utils/owner_selection.py +110 -0
- lightning_sdk/cli/utils/resolve.py +28 -0
- lightning_sdk/cli/utils/richt_print.py +35 -0
- lightning_sdk/cli/utils/save_to_config.py +27 -0
- lightning_sdk/cli/utils/ssh_connection.py +59 -0
- lightning_sdk/cli/utils/studio_selection.py +113 -0
- lightning_sdk/cli/utils/teamspace_selection.py +125 -0
- lightning_sdk/cli/vm/__init__.py +20 -0
- lightning_sdk/cli/vm/create.py +33 -0
- lightning_sdk/cli/vm/delete.py +25 -0
- lightning_sdk/cli/vm/list.py +30 -0
- lightning_sdk/cli/vm/ssh.py +31 -0
- lightning_sdk/cli/vm/start.py +60 -0
- lightning_sdk/cli/vm/stop.py +25 -0
- lightning_sdk/cli/vm/switch.py +38 -0
- lightning_sdk/constants.py +1 -0
- lightning_sdk/deployment/__init__.py +4 -0
- lightning_sdk/deployment/deployment.py +208 -28
- lightning_sdk/helpers.py +73 -34
- lightning_sdk/job/base.py +112 -12
- lightning_sdk/job/job.py +73 -44
- lightning_sdk/job/v1.py +28 -35
- lightning_sdk/job/v2.py +54 -17
- lightning_sdk/job/work.py +7 -3
- lightning_sdk/lightning_cloud/login.py +325 -18
- lightning_sdk/lightning_cloud/openapi/__init__.py +346 -26
- lightning_sdk/lightning_cloud/openapi/api/__init__.py +14 -0
- lightning_sdk/lightning_cloud/openapi/api/assistants_service_api.py +1801 -384
- lightning_sdk/lightning_cloud/openapi/api/auth_service_api.py +376 -0
- lightning_sdk/lightning_cloud/openapi/api/billing_service_api.py +414 -2
- lightning_sdk/lightning_cloud/openapi/api/blog_posts_service_api.py +533 -0
- lightning_sdk/lightning_cloud/openapi/api/cloud_space_environment_template_service_api.py +638 -0
- lightning_sdk/lightning_cloud/openapi/api/cloud_space_service_api.py +2563 -866
- lightning_sdk/lightning_cloud/openapi/api/cloudy_service_api.py +327 -0
- lightning_sdk/lightning_cloud/openapi/api/cluster_service_api.py +1720 -347
- lightning_sdk/lightning_cloud/openapi/api/data_connection_service_api.py +210 -4
- lightning_sdk/lightning_cloud/openapi/api/endpoint_service_api.py +126 -2119
- lightning_sdk/lightning_cloud/openapi/api/file_system_service_api.py +283 -0
- lightning_sdk/lightning_cloud/openapi/api/git_credentials_service_api.py +497 -0
- lightning_sdk/lightning_cloud/openapi/api/incidents_service_api.py +1058 -0
- lightning_sdk/lightning_cloud/openapi/api/jobs_service_api.py +2326 -492
- lightning_sdk/lightning_cloud/openapi/api/k8_s_cluster_service_api.py +2273 -0
- lightning_sdk/lightning_cloud/openapi/api/lit_dataset_service_api.py +1973 -0
- lightning_sdk/lightning_cloud/openapi/api/lit_logger_service_api.py +17 -5
- lightning_sdk/lightning_cloud/openapi/api/lit_registry_service_api.py +473 -5
- lightning_sdk/lightning_cloud/openapi/api/markets_service_api.py +145 -0
- lightning_sdk/lightning_cloud/openapi/api/models_store_api.py +24 -24
- lightning_sdk/lightning_cloud/openapi/api/organizations_service_api.py +105 -0
- lightning_sdk/lightning_cloud/openapi/api/pipeline_templates_service_api.py +339 -0
- lightning_sdk/lightning_cloud/openapi/api/pipelines_service_api.py +795 -0
- lightning_sdk/lightning_cloud/openapi/api/product_license_service_api.py +525 -0
- lightning_sdk/lightning_cloud/openapi/api/projects_service_api.py +106 -5
- lightning_sdk/lightning_cloud/openapi/api/schedules_service_api.py +924 -0
- lightning_sdk/lightning_cloud/openapi/api/sdk_command_history_service_api.py +141 -0
- lightning_sdk/lightning_cloud/openapi/api/slurm_jobs_user_service_api.py +202 -0
- lightning_sdk/lightning_cloud/openapi/api/storage_service_api.py +1508 -251
- lightning_sdk/lightning_cloud/openapi/api/user_service_api.py +121 -97
- lightning_sdk/lightning_cloud/openapi/api/volume_service_api.py +258 -0
- lightning_sdk/lightning_cloud/openapi/configuration.py +4 -20
- lightning_sdk/lightning_cloud/openapi/models/__init__.py +332 -26
- lightning_sdk/lightning_cloud/openapi/models/agentmanagedendpoints_id_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/agents_id_body.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/alertingevents_id_body.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/alerts_config_billing.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/alerts_config_studios.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/assistant_id_conversations_body.py +303 -17
- lightning_sdk/lightning_cloud/openapi/models/blogposts_id_body.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_systemmetrics_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/cloudspace_id_visibility_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/cloudspaces_id_body.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityblock_body.py +15 -15
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_capacityreservations_body.py +81 -3
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_kubernetestemplates_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_metrics_body.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_slurmusers_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/cluster_id_usagerestrictions_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/conversations_id_body1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/create.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/create_deployment_request_defines_a_spec_for_the_job_that_allows_for_autoscaling_jobs.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/create_machine_request_represents_the_request_to_create_a_machine.py +461 -0
- lightning_sdk/lightning_cloud/openapi/models/credits_autoreplenish_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/credits_autoreplenish_body1.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/dataset_id_versions_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/dataset_id_visibility_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/deployment_id_alertingpolicies_body.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/deployment_id_alertingpolicies_body1.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/deployments_id_body.py +315 -3
- lightning_sdk/lightning_cloud/openapi/models/endpoints_id_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/externalv1_cloud_space_instance_status.py +199 -69
- lightning_sdk/lightning_cloud/openapi/models/externalv1_cluster.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/externalv1_user_status.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/id_codeconfig_body.py +1 -53
- lightning_sdk/lightning_cloud/openapi/models/id_contactowner_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/id_fork_body1.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/id_render_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/id_reportrestarttimings_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/id_sleepconfig_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_transfer_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/id_visibility_body1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/id_visibility_body2.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/incident_id_messages_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/incidents_id_body.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_list_service_executions_response.py → job_id_reportroutingtelemetry_body.py} +23 -23
- lightning_sdk/lightning_cloud/openapi/models/kubernetestemplates_id_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/license_key_validate_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/litdatasets_dataset_id_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/litregistry_lit_repo_name_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/message_id_actions_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/messages_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/messages_message_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/metricsstream_create_body.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/metricsstream_id_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/model_id_versions_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/model_id_visibility_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/models_id_body.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/models_model_id_body.py +109 -31
- lightning_sdk/lightning_cloud/openapi/models/models_model_id_body1.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/org_id_memberships_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/orgs_id_body.py +627 -3
- lightning_sdk/lightning_cloud/openapi/models/pipelines_id_body.py +539 -0
- lightning_sdk/lightning_cloud/openapi/models/pipelines_id_body1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/pipelinetemplates_id_body.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_agents_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_cloudspaces_body.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_litdatasets_body.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_litregistry_body.py +2 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_pipelines_body.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_schedules_body.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/project_id_storage_body.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/project_id_storagetransfers_body.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/project_tab_management_messages.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/projects_id_body.py +523 -3
- lightning_sdk/lightning_cloud/openapi/models/{service_artifact_artifact_kind.py → protobuf_null_value.py} +7 -9
- lightning_sdk/lightning_cloud/openapi/models/schedules_id_body.py +513 -0
- lightning_sdk/lightning_cloud/openapi/models/server_id_alerts_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/setup.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/slurm_jobs_body.py +93 -15
- lightning_sdk/lightning_cloud/openapi/models/storage_complete_body.py +41 -15
- lightning_sdk/lightning_cloud/openapi/models/storagetransfers_validate_body.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/update.py +233 -129
- lightning_sdk/lightning_cloud/openapi/models/update1.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/upload_id_complete_body1.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/upload_id_parts_body1.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/uploads_upload_id_body.py +1 -27
- lightning_sdk/lightning_cloud/openapi/models/uploads_upload_id_body1.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/usagerestrictions_id_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/user_id_affiliatelinks_body.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/user_id_upgradetrigger_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/user_user_id_body.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_abort_storage_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_agent_job.py +188 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_aggregated_pod_metrics.py +799 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ai_pod_v1.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_alert_method.py +102 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_alerts_config.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_artifact.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_model_status.py +6 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_assistant_session_daily_aggregated.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_author.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_aws_direct_v1.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_billing_subscription.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_billing_tier.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_blog_post.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cancel_running_cloud_space_instance_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_capacity_block_offering.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_check_cluster_name_availability_request.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_check_cluster_name_availability_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_provider.py +117 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space.py +313 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_artifact_event.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_artifact_event_type.py +103 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_cold_start_metrics.py +669 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_cold_start_metrics_stats.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_config.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_template.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_template_config.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_environment_type.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_session.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_source_type.py +103 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_specialized_view.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_state.py +1 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloud_space_transfer_metadata.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloudflare_v1.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloudy_expert.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cloudy_settings.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_accelerator.py +445 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_capacity_reservation.py +211 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_deletion_options.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_metrics.py +1527 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_security_options.py +209 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_spec.py +521 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_status.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_tagging_options.py +55 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_type.py +2 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_upload_service_execution_artifact_response.py → v1_cluster_upload.py} +34 -34
- lightning_sdk/lightning_cloud/openapi/models/v1_cluster_usage_restriction.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_complete_lit_dataset_multi_part_upload_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_complete_lit_dataset_upload_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_complete_running_cloud_space_instance_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{id_complete_body.py → v1_complete_upload_temporary_artifact_request.py} +29 -29
- lightning_sdk/lightning_cloud/openapi/models/v1_contact_assistant_owner_reason.py +102 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_contact_assistant_owner_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_container_metrics.py +461 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_conversation.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_conversation_response_chunk.py +107 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_create_billing_upgrade_trigger_record_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_blog_post_request.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_checkout_session_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_cloud_space_environment_template_request.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_cluster_capacity_reservation_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_deployment_request.py +539 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_deployment_template_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_git_credentials_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_incident_request.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_job_request.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_license_request.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_lit_dataset_multi_part_upload_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_machine_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_managed_endpoint_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_model_metrics_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_multi_machine_job_request.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_organization_request.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_pipeline_template_request.py +383 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_project_request.py +209 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_create_sdk_command_history_request.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_sdk_command_history_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_server_alert_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_create_subscription_checkout_session_request.py +55 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_daily_model_metrics.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_daily_usage.py +81 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_data_connection.py +261 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_data_connection_tier.py +103 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_blog_post_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_cloud_space_environment_template_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_cluster_usage_restriction_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_deployment_alerting_policy_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_git_credentials_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_incident_message_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_incident_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_kubernetes_template_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_license_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_lit_dataset_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_lit_dataset_version_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_lit_registry_repository_image_artifact_version_by_digest_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_machine_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_delete_file_endpoint_response.py → v1_delete_pipeline_response.py} +25 -25
- lightning_sdk/lightning_cloud/openapi/models/v1_delete_schedule_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment.py +315 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_event.py +487 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy.py +409 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy_frequency.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy_operation.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy_severity.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_policy_type.py +112 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_alerting_recipients.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_api.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_details.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_state.py +4 -2
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_status.py +47 -21
- lightning_sdk/lightning_cloud/openapi/models/v1_deployment_template.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_endpoint.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_external_cluster.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_external_cluster_spec.py +931 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_external_search_user.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_filestore_data_connection.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_job.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_metric.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_metrics.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_filesystem_mmt.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_find_capacity_block_offering_response.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/{id_uploads_body1.py → v1_firewall_rule.py} +53 -53
- lightning_sdk/lightning_cloud/openapi/models/v1_function_call.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_function_tool.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_list_file_endpoints_response.py → v1_gcp_data_connection_setup.py} +23 -23
- lightning_sdk/lightning_cloud/openapi/models/v1_gcp_direct_vpc.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_ge_list_deployment_routing_telemetry_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_artifacts_page_response.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_get_assistant_session_daily_aggregated_response.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_cold_start_metrics_stats_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_instance_open_ports_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_instance_system_metrics_aggregate_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_required_balance_status_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_size_response.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cloud_space_transfer_estimate_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cluster_accelerator_demand_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_cluster_health_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_deployment_routing_telemetry_content_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_job_stats_response.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_latest_model_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_upload_service_execution_artifact_parts_response.py → v1_get_lit_dataset_file_upload_urls_response.py} +16 -16
- lightning_sdk/lightning_cloud/openapi/models/v1_get_lit_dataset_files_url_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_machine_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_market_pricing_response.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_model_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_organization_storage_metadata_response.py +487 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_project_balance_response.py +1 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_get_project_storage_metadata_response.py +263 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_get_temp_bucket_credentials_response.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_response.py +235 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_breakdown_response.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_get_volume_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_git_credentials.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_google_cloud_direct_v1.py +185 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_group_node_metrics.py +1215 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_group_pod_metrics.py +1241 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_guest_login_request.py +177 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_guest_login_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_service_artifact.py → v1_guest_user.py} +60 -60
- lightning_sdk/lightning_cloud/openapi/models/v1_incident.py +565 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_detail.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_event.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_message.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_severity.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_incident_type.py +108 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_instance_overprovisioning_spec.py +95 -41
- lightning_sdk/lightning_cloud/openapi/models/v1_job.py +237 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_job_artifacts_type.py +103 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_resource.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_job_spec.py +209 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_job_timing.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_job_type.py +109 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_k8s_incident_indexes.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kai_scheduler_queue_metrics.py +627 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_aws_config.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_settings_v1.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_direct_v1_status.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_template.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_kubernetes_template_property.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lambda_labs_direct_v1.py +67 -17
- lightning_sdk/lightning_cloud/openapi/models/v1_license.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lightning_elastic_cluster_v1.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lightning_run.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lightningapp_instance_artifact.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_like_status.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_aggregated_pod_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_download_service_execution_artifact_response.py → v1_list_blog_posts_response.py} +41 -41
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_cold_start_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloud_space_environment_templates_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cloudy_experts_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_metric_timestamps_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_namespace_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_namespace_user_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_cluster_usage_restrictions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_clusters_response.py +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_list_container_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_conversation_message_actions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_alerting_events_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_deployment_alerting_policies_response.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_filesystem_mm_ts_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_git_credentials_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_group_pod_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_incident_events_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_incident_messages_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_incidents_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_job_resources_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_kai_scheduler_queues_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_kubernetes_templates_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_license_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_lit_dataset_versions_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_lit_datasets_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_lit_registry_repository_image_artifact_versions_response.py +257 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_machines_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_node_file_system_metrics_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_node_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_notification_dialogs_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_pipelines_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_platform_notifications_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_pod_metrics_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_project_clusters_response.py +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_list_published_managed_endpoints_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_schedule_runs_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_schedules_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_slurm_cluster_users_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_list_storage_transfers_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_dataset.py +539 -0
- lightning_sdk/lightning_cloud/openapi/models/{id_storage_body.py → v1_lit_dataset_file.py} +49 -49
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_dataset_version_archive.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_registry_artifact.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_registry_project.py +35 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lit_repository.py +81 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_lite_published_cloud_space_response.py +513 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_lustre_data_connection.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_machine.py +617 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_machine_direct_v1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_magic_link_login_response.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_endpoint.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_managed_model.py +341 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_market_price.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_membership.py +121 -17
- lightning_sdk/lightning_cloud/openapi/models/v1_message.py +159 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_message_action.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_metadata.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_metrics_stream.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_model.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_model_metrics.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_delete_service_execution_response.py → v1_modify_filesystem_volume_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_multi_machine_job_state.py +2 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_namespace_metrics.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_namespace_user_metrics.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_nebius_direct_v1.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_node_metrics.py +695 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_notification_type.py +2 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_organization.py +837 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_path_mapping.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pause_storage_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline.py +591 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_parameter.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_parameter_placement.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_parameter_placement_type.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_parameter_type.py +106 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_state.py +111 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_step.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_step_status.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_step_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_template.py +513 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pipeline_template_visibility_type.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_platform_notification.py +279 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_pod_metrics.py +747 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_post_cloud_space_artifact_events_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_project.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_cluster_binding.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_membership.py +121 -17
- lightning_sdk/lightning_cloud/openapi/models/v1_project_settings.py +525 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_project_storage.py +235 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_project_tab.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_purchase_annual_upsell_request.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_purchase_annual_upsell_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_quote_annual_upsell_response.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_quote_subscription_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_r2_data_connection.py +305 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_render_kubernetes_template_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_cloud_space_instance_stop_at_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_cloud_space_instance_system_metrics_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_deployment_routing_telemetry_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_k8s_cluster_metrics_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_report_restart_timings_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_request_cloud_space_access_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_required_balance_reason.py +107 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_reservation_details.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_reset_api_key_request.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_reset_api_key_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_resource_visibility.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_resources.py +55 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_response_choice.py +29 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_restart_timing.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_resume_storage_transfer_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_routing_telemetry.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_rule_resource.py +5 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_schedule.py +565 -0
- lightning_sdk/lightning_cloud/openapi/models/{command_argument_command_argument_type.py → v1_schedule_action_type.py} +9 -8
- lightning_sdk/lightning_cloud/openapi/models/v1_schedule_resource_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_schedule_run.py +357 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_sdk_command_history_severity.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_sdk_command_history_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_secret_type.py +2 -0
- lightning_sdk/lightning_cloud/openapi/models/{v1_get_service_execution_status_response.py → v1_server_alert.py} +74 -48
- lightning_sdk/lightning_cloud/openapi/models/v1_server_alert_phase.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_server_alert_severity.py +103 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_server_alert_type.py +108 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_service_health.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_setup_data_connection_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_shared_filesystem.py +331 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_slack_notifier_type.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_sleep_server_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_cluster_user.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_job.py +84 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_node.py +31 -291
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_v1.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_slurm_v1_status.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset.py +159 -3
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_asset_type.py +4 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_transfer.py +435 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_storage_transfer_status.py +108 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_subnet_spec.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_system_metrics_aggregated.py +227 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_token_login_request.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_token_login_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_token_owner_type.py +104 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_token_usage.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_tool.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_tool_call.py +175 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_transaction.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_transfer_cloud_space_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_trigger_filesystem_upgrade_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_cloud_space_instance_config_request.py +253 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_cloud_space_visibility_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_conversation_like_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_conversation_message_like_response.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_deployment_visibility_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_job_visibility_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_lit_dataset_visibility_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_lit_repository_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_metrics_stream_visibility_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_model_visibility_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_complete_upload_service_execution_artifact_response.py → v1_update_organization_credits_auto_replenish_response.py} +6 -6
- lightning_sdk/lightning_cloud/openapi/models/v1_update_project_tab_order_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_credits_auto_replenish_response.py +97 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_update_user_request.py +131 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_update_volume_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_upload_project_artifact_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/{v1_list_new_features_for_user_response.py → v1_upload_temporary_artifact_request.py} +23 -23
- lightning_sdk/lightning_cloud/openapi/models/v1_usage.py +105 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_usage_report.py +79 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_user_features.py +894 -842
- lightning_sdk/lightning_cloud/openapi/models/v1_user_requested_compute_config.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_data_connection_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_deployment_image_request.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_license_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_managed_endpoint_response.py +27 -1
- lightning_sdk/lightning_cloud/openapi/models/v1_validate_storage_transfer_response.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_voltage_park_direct_v1.py +229 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_volume.py +513 -45
- lightning_sdk/lightning_cloud/openapi/models/v1_volume_state.py +105 -0
- lightning_sdk/lightning_cloud/openapi/models/v1_vultr_direct_v1.py +1 -27
- lightning_sdk/lightning_cloud/openapi/models/v1_weka_data_connection.py +201 -0
- lightning_sdk/lightning_cloud/openapi/models/validate.py +53 -1
- lightning_sdk/lightning_cloud/openapi/models/version_default_body.py +29 -29
- lightning_sdk/lightning_cloud/openapi/models/version_default_body1.py +149 -0
- lightning_sdk/lightning_cloud/openapi/models/version_uploads_body1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/versions_version_body1.py +123 -0
- lightning_sdk/lightning_cloud/openapi/models/volumes_id_body.py +123 -0
- lightning_sdk/lightning_cloud/rest_client.py +61 -48
- lightning_sdk/lightning_cloud/source_code/logs_socket_api.py +8 -3
- lightning_sdk/lightning_cloud/utils/data_connection.py +234 -7
- lightning_sdk/lit_container.py +68 -9
- lightning_sdk/llm/__init__.py +3 -0
- lightning_sdk/llm/llm.py +497 -0
- lightning_sdk/llm/public_assistants.py +54 -0
- lightning_sdk/machine.py +221 -30
- lightning_sdk/mmt/base.py +67 -32
- lightning_sdk/mmt/mmt.py +68 -50
- lightning_sdk/mmt/v1.py +16 -32
- lightning_sdk/mmt/v2.py +47 -18
- lightning_sdk/models.py +74 -24
- lightning_sdk/organization.py +4 -0
- lightning_sdk/owner.py +2 -1
- lightning_sdk/pipeline/__init__.py +14 -0
- lightning_sdk/pipeline/pipeline.py +163 -0
- lightning_sdk/pipeline/printer.py +124 -0
- lightning_sdk/pipeline/schedule.py +859 -0
- lightning_sdk/pipeline/steps.py +365 -0
- lightning_sdk/pipeline/utils.py +116 -0
- lightning_sdk/plugin.py +39 -20
- lightning_sdk/sandbox.py +160 -0
- lightning_sdk/serve.py +309 -0
- lightning_sdk/services/__init__.py +1 -1
- lightning_sdk/services/file_endpoint.py +3 -4
- lightning_sdk/services/utilities.py +16 -2
- lightning_sdk/studio.py +515 -41
- lightning_sdk/teamspace.py +335 -30
- lightning_sdk/user.py +19 -1
- lightning_sdk/utils/config.py +179 -0
- lightning_sdk/utils/license.py +13 -0
- lightning_sdk/utils/logging.py +79 -0
- lightning_sdk/utils/names.py +1179 -0
- lightning_sdk/utils/progress.py +283 -0
- lightning_sdk/utils/resolve.py +149 -13
- {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/METADATA +14 -11
- {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/RECORD +649 -250
- {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/WHEEL +1 -1
- {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/entry_points.txt +1 -0
- lightning_sdk/cli/ai_hub.py +0 -49
- lightning_sdk/cli/delete.py +0 -58
- lightning_sdk/cli/download.py +0 -132
- lightning_sdk/cli/inspect.py +0 -31
- lightning_sdk/cli/legacy.py +0 -135
- lightning_sdk/cli/list.py +0 -112
- lightning_sdk/cli/run.py +0 -225
- lightning_sdk/cli/serve.py +0 -218
- lightning_sdk/cli/stop.py +0 -37
- lightning_sdk/cli/upload.py +0 -255
- lightning_sdk/lightning_cloud/openapi/models/fileendpoints_id_body.py +0 -409
- lightning_sdk/lightning_cloud/openapi/models/project_id_fileendpoints_body.py +0 -357
- lightning_sdk/lightning_cloud/openapi/models/project_id_serviceexecution_body.py +0 -175
- lightning_sdk/lightning_cloud/openapi/models/serviceexecution_id_body.py +0 -331
- lightning_sdk/lightning_cloud/openapi/models/v1_command_argument.py +0 -305
- lightning_sdk/lightning_cloud/openapi/models/v1_ebs.py +0 -279
- lightning_sdk/lightning_cloud/openapi/models/v1_file_endpoint.py +0 -461
- lightning_sdk/lightning_cloud/openapi/models/v1_get_user_storage_response.py +0 -201
- lightning_sdk/lightning_cloud/openapi/models/v1_list_service_execution_lightningapp_instances_response.py +0 -175
- lightning_sdk/lightning_cloud/openapi/models/v1_service_execution.py +0 -383
- /lightning_sdk/cli/{exceptions.py → legacy/exceptions.py} +0 -0
- /lightning_sdk/services/{finetune/__init__.py → finetune_llm.py} +0 -0
- {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/LICENSE +0 -0
- {lightning_sdk-0.1.49.dist-info → lightning_sdk-2025.11.5.dist-info}/top_level.txt +0 -0
lightning_sdk/teamspace.py
CHANGED
|
@@ -1,28 +1,59 @@
|
|
|
1
|
+
import glob
|
|
2
|
+
import os
|
|
1
3
|
import warnings
|
|
4
|
+
from enum import Enum
|
|
2
5
|
from pathlib import Path
|
|
3
|
-
from typing import TYPE_CHECKING, List, Optional, Tuple, Union
|
|
6
|
+
from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Union
|
|
4
7
|
|
|
8
|
+
from tqdm.auto import tqdm
|
|
9
|
+
|
|
10
|
+
import lightning_sdk
|
|
5
11
|
from lightning_sdk.agents import Agent
|
|
6
|
-
from lightning_sdk.api import TeamspaceApi
|
|
12
|
+
from lightning_sdk.api import CloudAccountApi, TeamspaceApi
|
|
13
|
+
from lightning_sdk.lightning_cloud.openapi import V1ClusterType, V1Model, V1ModelVersionArchive, V1ProjectClusterBinding
|
|
14
|
+
from lightning_sdk.machine import CloudProvider, Machine
|
|
7
15
|
from lightning_sdk.models import UploadedModelInfo
|
|
8
16
|
from lightning_sdk.organization import Organization
|
|
9
17
|
from lightning_sdk.owner import Owner
|
|
10
18
|
from lightning_sdk.user import User
|
|
19
|
+
from lightning_sdk.utils.logging import TrackCallsMeta
|
|
11
20
|
from lightning_sdk.utils.resolve import (
|
|
12
21
|
_get_organizations_for_authed_user,
|
|
13
22
|
_parse_model_and_version,
|
|
14
23
|
_resolve_org,
|
|
15
24
|
_resolve_teamspace_name,
|
|
16
25
|
_resolve_user,
|
|
26
|
+
skip_studio_init,
|
|
17
27
|
)
|
|
18
28
|
|
|
19
29
|
if TYPE_CHECKING:
|
|
20
30
|
from lightning_sdk.job import Job
|
|
21
31
|
from lightning_sdk.mmt import MMT
|
|
22
|
-
from lightning_sdk.studio import Studio
|
|
32
|
+
from lightning_sdk.studio import VM, Studio
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class FolderLocation(Enum):
|
|
36
|
+
AWS = "AWS"
|
|
37
|
+
GCP = "GCP"
|
|
38
|
+
CLOUD_AGNOSTIC = "CLOUD_AGNOSTIC"
|
|
39
|
+
|
|
40
|
+
def __str__(self) -> str:
|
|
41
|
+
"""Converts the FolderLocation to a str."""
|
|
42
|
+
return self.value
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class ConnectionType(Enum):
|
|
46
|
+
EFS = "EFS"
|
|
47
|
+
S3 = "S3"
|
|
48
|
+
GCS = "GCS"
|
|
49
|
+
FILESTORE = "FILESTORE"
|
|
50
|
+
|
|
51
|
+
def __str__(self) -> str:
|
|
52
|
+
"""Converts the FolderLocation to a str."""
|
|
53
|
+
return self.value
|
|
23
54
|
|
|
24
55
|
|
|
25
|
-
class Teamspace:
|
|
56
|
+
class Teamspace(metaclass=TrackCallsMeta):
|
|
26
57
|
"""A teamspace is a collection of Studios, Clusters, Members and an associated Budget.
|
|
27
58
|
|
|
28
59
|
Args:
|
|
@@ -46,6 +77,7 @@ class Teamspace:
|
|
|
46
77
|
user: Optional[Union[str, User]] = None,
|
|
47
78
|
) -> None:
|
|
48
79
|
self._teamspace_api = TeamspaceApi()
|
|
80
|
+
self._cloud_account_api = CloudAccountApi()
|
|
49
81
|
|
|
50
82
|
name = _resolve_teamspace_name(name)
|
|
51
83
|
|
|
@@ -63,6 +95,20 @@ class Teamspace:
|
|
|
63
95
|
self._user = _resolve_user(user)
|
|
64
96
|
self._org = _resolve_org(org)
|
|
65
97
|
|
|
98
|
+
# If still no user or org resolved, try config defaults
|
|
99
|
+
if self._user is None and self._org is None:
|
|
100
|
+
from lightning_sdk.utils.config import Config, DefaultConfigKeys
|
|
101
|
+
|
|
102
|
+
config = Config()
|
|
103
|
+
owner_type = config.get_value(DefaultConfigKeys.teamspace_owner_type)
|
|
104
|
+
owner_name = config.get_value(DefaultConfigKeys.teamspace_owner)
|
|
105
|
+
|
|
106
|
+
if owner_type and owner_name:
|
|
107
|
+
if owner_type.lower() == "organization":
|
|
108
|
+
self._org = _resolve_org(owner_name)
|
|
109
|
+
elif owner_type.lower() == "user":
|
|
110
|
+
self._user = _resolve_user(owner_name)
|
|
111
|
+
|
|
66
112
|
self._owner: Owner
|
|
67
113
|
if self._user is None and self._org is None:
|
|
68
114
|
raise RuntimeError(
|
|
@@ -99,24 +145,49 @@ class Teamspace:
|
|
|
99
145
|
"""All studios within that teamspace."""
|
|
100
146
|
from lightning_sdk.studio import Studio
|
|
101
147
|
|
|
148
|
+
return self._get_studios(Studio)
|
|
149
|
+
|
|
150
|
+
@property
|
|
151
|
+
def vms(self) -> List["VM"]:
|
|
152
|
+
from lightning_sdk.studio import VM
|
|
153
|
+
|
|
154
|
+
return [x for x in self._get_studios(VM) if isinstance(x, VM)]
|
|
155
|
+
|
|
156
|
+
def _get_studios(self, target_cls: type) -> List[Union["Studio", "VM"]]:
|
|
102
157
|
studios = []
|
|
103
|
-
|
|
104
|
-
for cl in
|
|
158
|
+
cloud_accounts = self._teamspace_api.list_cloud_accounts(teamspace_id=self.id)
|
|
159
|
+
for cl in cloud_accounts:
|
|
105
160
|
_studios = self._teamspace_api.list_studios(teamspace_id=self.id, cloud_account=cl.cluster_id)
|
|
106
161
|
for s in _studios:
|
|
107
|
-
|
|
162
|
+
with skip_studio_init():
|
|
163
|
+
studio = target_cls(name=s.name, teamspace=self, cluster=cl.cluster_name, create_ok=False)
|
|
164
|
+
studio._studio = s
|
|
165
|
+
studio._teamspace = self
|
|
166
|
+
studios.append(studio)
|
|
108
167
|
|
|
109
168
|
return studios
|
|
110
169
|
|
|
111
170
|
@property
|
|
112
|
-
def default_cloud_account(self) -> str:
|
|
113
|
-
|
|
171
|
+
def default_cloud_account(self) -> Optional[str]:
|
|
172
|
+
owner_preferred_cluster = (
|
|
173
|
+
getattr(self.owner, "default_cloud_account", None) if isinstance(self.owner, Organization) else None
|
|
174
|
+
)
|
|
175
|
+
return self._teamspace.project_settings.preferred_cluster or owner_preferred_cluster
|
|
176
|
+
|
|
177
|
+
@property
|
|
178
|
+
def start_studios_on_interruptible(self) -> bool:
|
|
179
|
+
return self._teamspace.project_settings.start_studio_on_spot_instance
|
|
114
180
|
|
|
115
181
|
@property
|
|
116
182
|
def cloud_accounts(self) -> List[str]:
|
|
117
183
|
"""All cloud accounts associated with that teamspace."""
|
|
118
|
-
|
|
119
|
-
return [cl.cluster_name for cl in
|
|
184
|
+
cloud_accounts = self._teamspace_api.list_cloud_accounts(teamspace_id=self.id)
|
|
185
|
+
return [cl.cluster_name for cl in cloud_accounts]
|
|
186
|
+
|
|
187
|
+
@property
|
|
188
|
+
def cloud_account_objs(self) -> List[V1ProjectClusterBinding]:
|
|
189
|
+
"""All cloud accounts associated with that teamspace."""
|
|
190
|
+
return self._teamspace_api.list_cloud_accounts(teamspace_id=self.id)
|
|
120
191
|
|
|
121
192
|
@property
|
|
122
193
|
def clusters(self) -> List[str]:
|
|
@@ -176,6 +247,49 @@ class Teamspace:
|
|
|
176
247
|
|
|
177
248
|
return tuple(mmts)
|
|
178
249
|
|
|
250
|
+
@property
|
|
251
|
+
def secrets(self) -> Dict[str, str]:
|
|
252
|
+
"""All (encrypted) secrets for the teamspace.
|
|
253
|
+
|
|
254
|
+
Note:
|
|
255
|
+
Once created, the secret values are encrypted and cannot be viewed here anymore.
|
|
256
|
+
"""
|
|
257
|
+
return self._teamspace_api.get_secrets(self.id)
|
|
258
|
+
|
|
259
|
+
def set_secret(self, key: str, value: str) -> None:
|
|
260
|
+
"""Set the (encrypted) secrets for the teamspace."""
|
|
261
|
+
if not self._teamspace_api.verify_secret_name(key):
|
|
262
|
+
raise ValueError(
|
|
263
|
+
"Secret keys must only contain alphanumeric characters and underscores and not begin with a number."
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
self._teamspace_api.set_secret(self.id, key, value)
|
|
267
|
+
|
|
268
|
+
def list_machines(self, cloud_account: Optional[str] = None) -> List[Machine]:
|
|
269
|
+
if cloud_account is None:
|
|
270
|
+
cloud_account = os.getenv("LIGHTNING_CLUSTER_ID") or self.default_cloud_account
|
|
271
|
+
|
|
272
|
+
if cloud_account is None:
|
|
273
|
+
raise RuntimeError("Could not resolve cloud account")
|
|
274
|
+
|
|
275
|
+
cloud_machines = self._teamspace_api.list_machines(self.id, cloud_account=cloud_account)
|
|
276
|
+
return [
|
|
277
|
+
Machine(
|
|
278
|
+
name=cluster_machine.instance_id,
|
|
279
|
+
slug=cluster_machine.slug_multi_cloud,
|
|
280
|
+
instance_type=cluster_machine.instance_id,
|
|
281
|
+
family=cluster_machine.family,
|
|
282
|
+
accelerator_count=cluster_machine.resources.gpu or cluster_machine.resources.cpu,
|
|
283
|
+
cost=cluster_machine.cost,
|
|
284
|
+
interruptible_cost=cluster_machine.spot_price,
|
|
285
|
+
wait_time=float(cluster_machine.available_in_seconds) if cluster_machine.available_in_seconds else None,
|
|
286
|
+
interruptible_wait_time=float(cluster_machine.available_in_seconds_spot)
|
|
287
|
+
if cluster_machine.available_in_seconds_spot
|
|
288
|
+
else None,
|
|
289
|
+
)
|
|
290
|
+
for cluster_machine in cloud_machines
|
|
291
|
+
]
|
|
292
|
+
|
|
179
293
|
def __eq__(self, other: "Teamspace") -> bool:
|
|
180
294
|
"""Checks whether the provided other object is equal to this one."""
|
|
181
295
|
return (
|
|
@@ -218,48 +332,61 @@ class Teamspace:
|
|
|
218
332
|
|
|
219
333
|
def upload_model(
|
|
220
334
|
self,
|
|
221
|
-
path: Union[str, Path],
|
|
335
|
+
path: Union[str, Path, List[Union[str, Path]]],
|
|
222
336
|
name: str,
|
|
337
|
+
version: Optional[str] = None,
|
|
223
338
|
cloud_account: Optional[str] = None,
|
|
224
339
|
progress_bar: bool = True,
|
|
340
|
+
metadata: Optional[dict] = None,
|
|
225
341
|
) -> UploadedModelInfo:
|
|
226
342
|
"""Upload a local checkpoint file to the model store.
|
|
227
343
|
|
|
228
344
|
Args:
|
|
229
345
|
path: Path to the model file or folder to upload.
|
|
230
346
|
name: Name tag of the model to upload.
|
|
347
|
+
version: Version tag of the model to upload.
|
|
348
|
+
If not provided, the ``vX`` version will be used where X is running index.
|
|
231
349
|
cloud_account: The name of the cloud account to store the Model in.
|
|
232
350
|
If not provided, the default cloud account for the Teamspace will be used.
|
|
233
351
|
progress_bar: Whether to show a progress bar for the upload.
|
|
352
|
+
metadata: Metadata to attach to the model. Can be a dictionary.
|
|
234
353
|
"""
|
|
235
354
|
if not path:
|
|
236
355
|
raise ValueError("No path provided to upload")
|
|
237
356
|
if not name:
|
|
238
357
|
raise ValueError("No name provided for the model")
|
|
239
|
-
path = Path(path).resolve()
|
|
240
|
-
if not path.exists():
|
|
241
|
-
raise FileNotFoundError(str(path))
|
|
242
358
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
359
|
+
if isinstance(path, (str, Path)):
|
|
360
|
+
path = [path]
|
|
361
|
+
file_paths, relative_paths = [], []
|
|
362
|
+
for p in path:
|
|
363
|
+
lpaths, rpaths = _list_files(p)
|
|
364
|
+
file_paths.extend(lpaths)
|
|
365
|
+
relative_paths.extend(rpaths)
|
|
247
366
|
|
|
248
|
-
if not
|
|
367
|
+
if not file_paths:
|
|
249
368
|
raise FileNotFoundError(
|
|
250
369
|
"The path to upload doesn't contain any files. Make sure it points to a file or"
|
|
251
370
|
f" non-empty folder: {path}"
|
|
252
371
|
)
|
|
372
|
+
if len(relative_paths) != len(set(relative_paths)):
|
|
373
|
+
raise RuntimeError(
|
|
374
|
+
"The paths to upload contain files with the same name or relative path in folders."
|
|
375
|
+
f"The listed files are: {file_paths}\nThe relative paths are: {relative_paths}"
|
|
376
|
+
)
|
|
253
377
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
378
|
+
if cloud_account is None:
|
|
379
|
+
cloud_account = self._teamspace_api._determine_cloud_account(self.id)
|
|
380
|
+
if not metadata:
|
|
381
|
+
metadata = {}
|
|
382
|
+
if not isinstance(metadata, dict):
|
|
383
|
+
raise TypeError(f"Metadata must be a dictionary, but provided {type(metadata)}")
|
|
384
|
+
metadata.update({"lightning-sdk": lightning_sdk.__version__})
|
|
259
385
|
|
|
260
386
|
model = self._teamspace_api.create_model(
|
|
261
387
|
name=name,
|
|
262
|
-
|
|
388
|
+
version=version,
|
|
389
|
+
metadata=metadata,
|
|
263
390
|
private=True,
|
|
264
391
|
teamspace_id=self.id,
|
|
265
392
|
cloud_account=cloud_account,
|
|
@@ -267,13 +394,12 @@ class Teamspace:
|
|
|
267
394
|
self._teamspace_api.upload_model_files(
|
|
268
395
|
model_id=model.model_id,
|
|
269
396
|
version=model.version,
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
cloud_account=cloud_account,
|
|
397
|
+
file_paths=file_paths,
|
|
398
|
+
remote_paths=relative_paths,
|
|
273
399
|
teamspace_id=self.id,
|
|
274
400
|
progress_bar=progress_bar,
|
|
275
401
|
)
|
|
276
|
-
self._teamspace_api.
|
|
402
|
+
self._teamspace_api._complete_model_upload(
|
|
277
403
|
model_id=model.model_id,
|
|
278
404
|
version=model.version,
|
|
279
405
|
teamspace_id=self.id,
|
|
@@ -345,6 +471,185 @@ class Teamspace:
|
|
|
345
471
|
name, version = _parse_model_and_version(name)
|
|
346
472
|
self._teamspace_api.delete_model(name=name, version=version, teamspace_id=self.id)
|
|
347
473
|
|
|
474
|
+
def list_models(self) -> List[V1Model]:
|
|
475
|
+
"""List all models in the model store."""
|
|
476
|
+
return self._teamspace_api.list_models(teamspace_id=self.id)
|
|
477
|
+
|
|
478
|
+
def list_model_versions(self, name: str) -> List[V1ModelVersionArchive]:
|
|
479
|
+
"""List all versions of a model in the model store."""
|
|
480
|
+
if ":" in name:
|
|
481
|
+
raise ValueError(
|
|
482
|
+
"Model name should not contain a version tag. Please provide the model name without a version."
|
|
483
|
+
)
|
|
484
|
+
return self._teamspace_api.list_model_versions(teamspace_id=self.id, model_name=name)
|
|
485
|
+
|
|
486
|
+
def upload_file(self, file_path: str, remote_path: Optional[str] = None, progress_bar: bool = True) -> None:
|
|
487
|
+
"""Uploads file to given remote path in the Teamspace drive."""
|
|
488
|
+
if remote_path is None:
|
|
489
|
+
remote_path = os.path.split(file_path)[1]
|
|
490
|
+
|
|
491
|
+
self._teamspace_api.upload_file(
|
|
492
|
+
teamspace_id=self._teamspace.id,
|
|
493
|
+
cloud_account=self.default_cloud_account,
|
|
494
|
+
file_path=file_path,
|
|
495
|
+
remote_path=os.path.normpath(remote_path),
|
|
496
|
+
progress_bar=progress_bar,
|
|
497
|
+
)
|
|
498
|
+
|
|
499
|
+
def upload_folder(self, folder_path: str, remote_path: Optional[str] = None, progress_bar: bool = True) -> None:
|
|
500
|
+
"""Uploads a given folder to a remote path in the Teamspace drive."""
|
|
501
|
+
if folder_path is None:
|
|
502
|
+
raise ValueError("Cannot upload a folder that is None.")
|
|
503
|
+
folder_path = os.path.normpath(folder_path)
|
|
504
|
+
if os.path.isfile(folder_path):
|
|
505
|
+
raise NotADirectoryError(f"Cannot upload a file as a folder. '{folder_path}' is a file.")
|
|
506
|
+
if not os.path.exists(folder_path):
|
|
507
|
+
raise NotADirectoryError(f"Cannot upload a folder that does not exist. '{folder_path}' is not a directory.")
|
|
508
|
+
all_files = []
|
|
509
|
+
for fp in glob.glob(os.path.join(folder_path, "**"), recursive=True):
|
|
510
|
+
if not os.path.isfile(fp):
|
|
511
|
+
continue
|
|
512
|
+
rel_path = os.path.relpath(fp, folder_path)
|
|
513
|
+
remote_file = os.path.join(remote_path, rel_path) if remote_path else rel_path
|
|
514
|
+
all_files.append((fp, remote_file))
|
|
515
|
+
|
|
516
|
+
if progress_bar:
|
|
517
|
+
progress_bar = tqdm(total=len(all_files), desc="Uploading files", unit="file")
|
|
518
|
+
for local_file, remote_path in sorted(all_files, key=lambda p: p[1]):
|
|
519
|
+
if progress_bar:
|
|
520
|
+
progress_bar.set_description(f"Uploading {local_file}")
|
|
521
|
+
self.upload_file(local_file, remote_path=remote_path, progress_bar=False)
|
|
522
|
+
if progress_bar:
|
|
523
|
+
progress_bar.update(1)
|
|
524
|
+
if progress_bar:
|
|
525
|
+
progress_bar.close()
|
|
526
|
+
|
|
527
|
+
def download_file(self, remote_path: str, file_path: Optional[str] = None) -> None:
|
|
528
|
+
"""Downloads a given file in Teamspace drive to a target location."""
|
|
529
|
+
if file_path is None:
|
|
530
|
+
file_path = remote_path
|
|
531
|
+
|
|
532
|
+
self._teamspace_api.download_file(
|
|
533
|
+
path=remote_path,
|
|
534
|
+
target_path=file_path,
|
|
535
|
+
teamspace_id=self._teamspace.id,
|
|
536
|
+
cloud_account=self.default_cloud_account,
|
|
537
|
+
)
|
|
538
|
+
|
|
539
|
+
def download_folder(self, remote_path: str, target_path: Optional[str] = None) -> None:
|
|
540
|
+
"""Downloads a folder in the Teamspace drive to a given target path."""
|
|
541
|
+
if target_path is None:
|
|
542
|
+
target_path = remote_path
|
|
543
|
+
|
|
544
|
+
self._teamspace_api.download_folder(
|
|
545
|
+
path=remote_path,
|
|
546
|
+
target_path=target_path,
|
|
547
|
+
teamspace_id=self._teamspace.id,
|
|
548
|
+
cloud_account=self.default_cloud_account,
|
|
549
|
+
)
|
|
550
|
+
|
|
551
|
+
def new_folder(
|
|
552
|
+
self, name: str, location: Optional[FolderLocation] = None, cloud_account: Optional[str] = None
|
|
553
|
+
) -> None:
|
|
554
|
+
"""Create a new folder in this Teamspace.
|
|
555
|
+
|
|
556
|
+
Args:
|
|
557
|
+
name: The name of the folder. Folders will be accesible under `/teamspace/folders/<name>`
|
|
558
|
+
location: The location of the folder. Defaults to cloud agnostic.
|
|
559
|
+
cloud_account: The cloud account to create the folder in. Not used for cloud agnostic folders.
|
|
560
|
+
"""
|
|
561
|
+
if cloud_account is None:
|
|
562
|
+
cloud_account = self.default_cloud_account
|
|
563
|
+
|
|
564
|
+
cloud_accounts = self._cloud_account_api.list_cloud_accounts(self.id)
|
|
565
|
+
resolved_cloud_accounts = [
|
|
566
|
+
external_cloud for external_cloud in cloud_accounts if external_cloud.id == cloud_account
|
|
567
|
+
]
|
|
568
|
+
|
|
569
|
+
if len(resolved_cloud_accounts) == 0:
|
|
570
|
+
raise ValueError(f"Cloud account not found: {cloud_account}")
|
|
571
|
+
|
|
572
|
+
resolved_cloud_account = resolved_cloud_accounts[0]
|
|
573
|
+
|
|
574
|
+
# if the cloud account is global, default to agnostic
|
|
575
|
+
if location is None and resolved_cloud_account.spec.cluster_type == V1ClusterType.GLOBAL:
|
|
576
|
+
location = FolderLocation.CLOUD_AGNOSTIC
|
|
577
|
+
|
|
578
|
+
# if it's global, then default to agnostic, and aws / gcp otherwise if set
|
|
579
|
+
if (
|
|
580
|
+
location is not None
|
|
581
|
+
and location != FolderLocation.CLOUD_AGNOSTIC
|
|
582
|
+
and resolved_cloud_account.spec.cluster_type == V1ClusterType.GLOBAL
|
|
583
|
+
):
|
|
584
|
+
providers = self._cloud_account_api.get_cloud_account_provider_mapping(self.id)
|
|
585
|
+
|
|
586
|
+
if location == FolderLocation.AWS:
|
|
587
|
+
resolved_cloud_account = providers[CloudProvider.AWS]
|
|
588
|
+
elif location == FolderLocation.GCP:
|
|
589
|
+
resolved_cloud_account = providers[CloudProvider.GCP]
|
|
590
|
+
|
|
591
|
+
if location == FolderLocation.CLOUD_AGNOSTIC:
|
|
592
|
+
self._teamspace_api.new_folder(self.id, name, None)
|
|
593
|
+
else:
|
|
594
|
+
self._teamspace_api.new_folder(self.id, name, resolved_cloud_account)
|
|
595
|
+
|
|
596
|
+
return
|
|
597
|
+
|
|
598
|
+
def new_connection(
|
|
599
|
+
self,
|
|
600
|
+
name: str,
|
|
601
|
+
source: str,
|
|
602
|
+
connection_type: ConnectionType,
|
|
603
|
+
writable: bool = True,
|
|
604
|
+
cloud_account: Optional[str] = None,
|
|
605
|
+
region: Optional[str] = None,
|
|
606
|
+
) -> None:
|
|
607
|
+
"""Add an existing data source to this Teamspace.
|
|
608
|
+
|
|
609
|
+
Args:
|
|
610
|
+
name: the name under which your data will be available in this Teamspace
|
|
611
|
+
source: the source spec of your data. Format depends on the type of data to connect.
|
|
612
|
+
For EFS, this should be the filsystem id
|
|
613
|
+
connection_type: the kind of data to connect to this Teamspace
|
|
614
|
+
writable: whether to support write-back to this data source. If False, the data is connected as read-only
|
|
615
|
+
cloud_account: which cloud-account to connect to the data source to.
|
|
616
|
+
If not specified, will retrieve the cloud-account that matches the required provider type
|
|
617
|
+
starting with private cloud accounts and falling back to public if necessary.
|
|
618
|
+
region: which provider region this data is in. Required for some connection types only.
|
|
619
|
+
"""
|
|
620
|
+
provider_for_connection = self._cloud_account_api.get_cloud_provider_for_connection_type(connection_type)
|
|
621
|
+
|
|
622
|
+
if connection_type == ConnectionType.EFS and region is None:
|
|
623
|
+
raise ValueError("Region must be specified")
|
|
624
|
+
|
|
625
|
+
cloud_account = self._cloud_account_api.resolve_cloud_account(
|
|
626
|
+
self.id, cloud_account, provider_for_connection, None
|
|
627
|
+
)
|
|
628
|
+
|
|
629
|
+
cloud_accounts = self._cloud_account_api.list_cloud_accounts(self.id)
|
|
630
|
+
resolved_cloud_accounts = [
|
|
631
|
+
external_cloud for external_cloud in cloud_accounts if external_cloud.id == cloud_account
|
|
632
|
+
]
|
|
633
|
+
|
|
634
|
+
if len(resolved_cloud_accounts) == 0:
|
|
635
|
+
raise ValueError(f"Cloud account not found: {cloud_account}")
|
|
636
|
+
|
|
637
|
+
resolved_cloud_account = resolved_cloud_accounts[0]
|
|
638
|
+
|
|
639
|
+
self._teamspace_api.new_connection(self.id, name, source, resolved_cloud_account, writable, region or "")
|
|
640
|
+
|
|
641
|
+
|
|
642
|
+
def _list_files(path: Union[str, Path]) -> Tuple[List[Path], List[str]]:
|
|
643
|
+
"""List all folders in a directory and return them as a list and relative path."""
|
|
644
|
+
path = Path(path).resolve()
|
|
645
|
+
if not path.exists():
|
|
646
|
+
raise FileNotFoundError(f"Path {path} does not exist")
|
|
647
|
+
if not path.is_dir():
|
|
648
|
+
return [path], [str(path.name)]
|
|
649
|
+
local_paths = [p for p in path.rglob("*") if p.is_file()]
|
|
650
|
+
relative_paths = [str(p.relative_to(path)) for p in local_paths]
|
|
651
|
+
return local_paths, relative_paths
|
|
652
|
+
|
|
348
653
|
|
|
349
654
|
def _resolve_valueerror_message(error: ValueError, owner: Owner, teamspace_name: str) -> ValueError:
|
|
350
655
|
"""Resolves the ValueError Message and replaces it with a nicer message."""
|
lightning_sdk/user.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Optional
|
|
1
|
+
from typing import Dict, Optional
|
|
2
2
|
|
|
3
3
|
from lightning_sdk.api import UserApi
|
|
4
4
|
from lightning_sdk.owner import Owner
|
|
@@ -37,6 +37,24 @@ class User(Owner):
|
|
|
37
37
|
"""The user's ID."""
|
|
38
38
|
return self._user.id
|
|
39
39
|
|
|
40
|
+
@property
|
|
41
|
+
def secrets(self) -> Dict[str, str]:
|
|
42
|
+
"""All (encrypted) secrets for the user.
|
|
43
|
+
|
|
44
|
+
Note:
|
|
45
|
+
Once created, the secret values are encrypted and cannot be viewed here anymore.
|
|
46
|
+
"""
|
|
47
|
+
return self._user_api.get_secrets()
|
|
48
|
+
|
|
49
|
+
def set_secret(self, key: str, value: str) -> None:
|
|
50
|
+
"""Set a (encrypted) secret for the user."""
|
|
51
|
+
if not self._user_api.verify_secret_name(key):
|
|
52
|
+
raise ValueError(
|
|
53
|
+
"Secret keys must only contain alphanumeric characters and underscores and not begin with a number."
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
self._user_api.set_secret(key, value)
|
|
57
|
+
|
|
40
58
|
def __repr__(self) -> str:
|
|
41
59
|
"""Returns reader friendly representation."""
|
|
42
60
|
return f"User(name={self.name})"
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import Any, Dict, Mapping, Optional, Sequence
|
|
4
|
+
|
|
5
|
+
import yaml
|
|
6
|
+
|
|
7
|
+
_DEFAULT_CONFIG_FILE_PATH = "~/.lightning/config.yaml"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@dataclass(frozen=True)
|
|
11
|
+
class DefaultConfigKeys:
|
|
12
|
+
"""Default configuration keys for the Lightning SDK."""
|
|
13
|
+
|
|
14
|
+
organization: str = "organization.name"
|
|
15
|
+
user: str = "user.name"
|
|
16
|
+
|
|
17
|
+
teamspace_name: str = "teamspace.name"
|
|
18
|
+
teamspace_owner: str = "teamspace.owner"
|
|
19
|
+
teamspace_owner_type: str = "teamspace.owner_type"
|
|
20
|
+
|
|
21
|
+
machine: str = "machine.name"
|
|
22
|
+
|
|
23
|
+
studio: str = "studio.name"
|
|
24
|
+
|
|
25
|
+
cloud_account: str = "cloud_account.name"
|
|
26
|
+
cloud_provider: str = "cloud_provider.name"
|
|
27
|
+
|
|
28
|
+
license: str = "license"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class ConfigProxy:
|
|
32
|
+
def __init__(self, root: "Config", *path: str) -> None:
|
|
33
|
+
self._root = root
|
|
34
|
+
self._path = path # list of keys from root
|
|
35
|
+
|
|
36
|
+
def __getattr__(self, name: str) -> "ConfigProxy":
|
|
37
|
+
"""Returns a reference to a nested ConfigProxy object a level deeper in the config hierarchy.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
name: the name of the attribute to access, which corresponds to a key in the config.
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
ConfigProxy: the next ConfigProxy object for the attribute.
|
|
44
|
+
"""
|
|
45
|
+
# Build a deeper path and return a new proxy
|
|
46
|
+
return ConfigProxy(self._root, *self._path, name)
|
|
47
|
+
|
|
48
|
+
def __setattr__(self, name: str, value: Any) -> None:
|
|
49
|
+
"""Sets the name attribute to value at the current hierarchy level.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
name: the attribute name to set, which corresponds to a key in the config.
|
|
53
|
+
value: the value to set for the given attribute name in the config.
|
|
54
|
+
"""
|
|
55
|
+
if name in ("_root", "_path"): # internal attributes
|
|
56
|
+
super().__setattr__(name, value)
|
|
57
|
+
else:
|
|
58
|
+
# Assign a nested value in the root config
|
|
59
|
+
self._root._set_nested([*self._path, name], value)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class Config:
|
|
63
|
+
def __init__(self, config_file: Optional[str] = None) -> None:
|
|
64
|
+
"""Config class to manage configuration settings for the lightning SDK and CLI.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
config_file: the file path where the configuration is stored.
|
|
68
|
+
If None, defaults to "~/.lightning/config.yaml".
|
|
69
|
+
"""
|
|
70
|
+
if config_file is None:
|
|
71
|
+
config_file = _DEFAULT_CONFIG_FILE_PATH
|
|
72
|
+
self._config_file = os.path.expanduser(config_file)
|
|
73
|
+
|
|
74
|
+
def _load_config(self) -> Dict[str, Any]:
|
|
75
|
+
if not os.path.exists(self._config_file):
|
|
76
|
+
return {} # Return empty dict if config doesn't exist
|
|
77
|
+
with open(self._config_file) as f:
|
|
78
|
+
return yaml.safe_load(f) or {}
|
|
79
|
+
|
|
80
|
+
def _save_config(self, config: Dict[str, Any]) -> None:
|
|
81
|
+
os.makedirs(os.path.dirname(self._config_file), exist_ok=True)
|
|
82
|
+
config = _unflatten_dict(config)
|
|
83
|
+
with open(self._config_file, "w") as f:
|
|
84
|
+
yaml.safe_dump(config, f, default_flow_style=False, sort_keys=True)
|
|
85
|
+
|
|
86
|
+
def _set_nested(self, keys: Sequence[str], value: str) -> None:
|
|
87
|
+
config = self._load_config()
|
|
88
|
+
curr = config
|
|
89
|
+
for k in keys[:-1]:
|
|
90
|
+
if k not in curr or not isinstance(curr[k], Dict):
|
|
91
|
+
curr[k] = {}
|
|
92
|
+
curr = curr[k]
|
|
93
|
+
curr[keys[-1]] = value
|
|
94
|
+
self._save_config(config)
|
|
95
|
+
|
|
96
|
+
def get_value(self, key_path: str) -> Optional[str]:
|
|
97
|
+
"""Gets a value from the config using dot notation.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
key_path: the dot-separated path to the config value (e.g. "teamspace.name")
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
The config value if found, None otherwise
|
|
104
|
+
"""
|
|
105
|
+
return self._get_value_type(key_path, str)
|
|
106
|
+
|
|
107
|
+
def get_sub_config(self, key_path: str) -> Optional[Mapping[str, Any]]:
|
|
108
|
+
"""Gets a subconfig from the config using dot notation.
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
key_path: the dot-separated path to the subconfig (e.g. "license")
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
The subconfig if found, None otherwise
|
|
115
|
+
"""
|
|
116
|
+
return self._get_value_type(key_path, Mapping)
|
|
117
|
+
|
|
118
|
+
def _get_value_type(self, key_path: str, subtype: type) -> Optional[Any]:
|
|
119
|
+
config = self._load_config()
|
|
120
|
+
if not isinstance(config, Mapping):
|
|
121
|
+
return None
|
|
122
|
+
|
|
123
|
+
keys = key_path.split(".")
|
|
124
|
+
curr = config
|
|
125
|
+
for k in keys:
|
|
126
|
+
if not isinstance(curr, dict) or k not in curr:
|
|
127
|
+
return None
|
|
128
|
+
curr = curr[k]
|
|
129
|
+
return curr if isinstance(curr, subtype) else None
|
|
130
|
+
|
|
131
|
+
def __getattr__(self, name: str) -> ConfigProxy:
|
|
132
|
+
"""Returns a proxy to the actual values to allow for nested access.
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
name: the name of the value to retrieve.
|
|
136
|
+
|
|
137
|
+
Returns:
|
|
138
|
+
ConfigProxy: a proxy object that allows nested access to the configuration.
|
|
139
|
+
"""
|
|
140
|
+
return ConfigProxy(self, name)
|
|
141
|
+
|
|
142
|
+
def __setattr__(self, name: str, value: Any) -> None:
|
|
143
|
+
"""Sets the name attribute to value at the root level."""
|
|
144
|
+
if name in ("_config_file",): # internal attributes
|
|
145
|
+
super().__setattr__(name, value)
|
|
146
|
+
else:
|
|
147
|
+
# Assign a value at the root level
|
|
148
|
+
self._set_nested([name], value)
|
|
149
|
+
|
|
150
|
+
def __repr__(self) -> str:
|
|
151
|
+
"""Returns a string representation of the config."""
|
|
152
|
+
return str(self)
|
|
153
|
+
|
|
154
|
+
def __str__(self) -> str:
|
|
155
|
+
"""Returns a string representation of the config."""
|
|
156
|
+
return yaml.dump(
|
|
157
|
+
{"Config": {"config_file": self._config_file, **self._load_config()}},
|
|
158
|
+
indent=4,
|
|
159
|
+
sort_keys=True,
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
def get(self, key: str) -> Optional[str]:
|
|
163
|
+
return self.get_value(key)
|
|
164
|
+
|
|
165
|
+
def set(self, key: str, value: str) -> None:
|
|
166
|
+
self._set_nested([key], value)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def _unflatten_dict(flat_dict: Dict[str, Any]) -> Dict[str, Any]:
|
|
170
|
+
unflattened_dict = {}
|
|
171
|
+
for key, value in flat_dict.items():
|
|
172
|
+
keys = key.split(".")
|
|
173
|
+
curr = unflattened_dict
|
|
174
|
+
for k in keys[:-1]:
|
|
175
|
+
if k not in curr:
|
|
176
|
+
curr[k] = {}
|
|
177
|
+
curr = curr[k]
|
|
178
|
+
curr[keys[-1]] = value
|
|
179
|
+
return unflattened_dict
|