skypilot-nightly 1.0.0.dev20250509__py3-none-any.whl → 1.0.0.dev20251107__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.
Potentially problematic release.
This version of skypilot-nightly might be problematic. Click here for more details.
- sky/__init__.py +22 -6
- sky/adaptors/aws.py +25 -7
- sky/adaptors/common.py +24 -1
- sky/adaptors/coreweave.py +278 -0
- sky/adaptors/do.py +8 -2
- sky/adaptors/hyperbolic.py +8 -0
- sky/adaptors/kubernetes.py +149 -18
- sky/adaptors/nebius.py +170 -17
- sky/adaptors/primeintellect.py +1 -0
- sky/adaptors/runpod.py +68 -0
- sky/adaptors/seeweb.py +167 -0
- sky/adaptors/shadeform.py +89 -0
- sky/admin_policy.py +187 -4
- sky/authentication.py +179 -225
- sky/backends/__init__.py +4 -2
- sky/backends/backend.py +22 -9
- sky/backends/backend_utils.py +1299 -380
- sky/backends/cloud_vm_ray_backend.py +1715 -518
- sky/backends/docker_utils.py +1 -1
- sky/backends/local_docker_backend.py +11 -6
- sky/backends/wheel_utils.py +37 -9
- sky/{clouds/service_catalog → catalog}/__init__.py +21 -19
- sky/{clouds/service_catalog → catalog}/aws_catalog.py +27 -8
- sky/{clouds/service_catalog → catalog}/azure_catalog.py +10 -7
- sky/{clouds/service_catalog → catalog}/common.py +89 -48
- sky/{clouds/service_catalog → catalog}/cudo_catalog.py +8 -5
- sky/{clouds/service_catalog → catalog}/data_fetchers/analyze.py +1 -1
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_aws.py +30 -40
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_cudo.py +38 -38
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_gcp.py +42 -15
- sky/catalog/data_fetchers/fetch_hyperbolic.py +136 -0
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_lambda_cloud.py +1 -0
- sky/catalog/data_fetchers/fetch_nebius.py +335 -0
- sky/catalog/data_fetchers/fetch_runpod.py +698 -0
- sky/catalog/data_fetchers/fetch_seeweb.py +329 -0
- sky/catalog/data_fetchers/fetch_shadeform.py +142 -0
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_vast.py +1 -1
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_vsphere.py +1 -1
- sky/{clouds/service_catalog → catalog}/do_catalog.py +5 -2
- sky/{clouds/service_catalog → catalog}/fluidstack_catalog.py +6 -3
- sky/{clouds/service_catalog → catalog}/gcp_catalog.py +41 -15
- sky/catalog/hyperbolic_catalog.py +136 -0
- sky/{clouds/service_catalog → catalog}/ibm_catalog.py +9 -6
- sky/{clouds/service_catalog → catalog}/kubernetes_catalog.py +36 -24
- sky/{clouds/service_catalog → catalog}/lambda_catalog.py +9 -6
- sky/{clouds/service_catalog → catalog}/nebius_catalog.py +9 -7
- sky/{clouds/service_catalog → catalog}/oci_catalog.py +9 -6
- sky/{clouds/service_catalog → catalog}/paperspace_catalog.py +5 -2
- sky/catalog/primeintellect_catalog.py +95 -0
- sky/{clouds/service_catalog → catalog}/runpod_catalog.py +11 -4
- sky/{clouds/service_catalog → catalog}/scp_catalog.py +9 -6
- sky/catalog/seeweb_catalog.py +184 -0
- sky/catalog/shadeform_catalog.py +165 -0
- sky/catalog/ssh_catalog.py +167 -0
- sky/{clouds/service_catalog → catalog}/vast_catalog.py +6 -3
- sky/{clouds/service_catalog → catalog}/vsphere_catalog.py +5 -2
- sky/check.py +491 -203
- sky/cli.py +5 -6005
- sky/client/{cli.py → cli/command.py} +2477 -1885
- sky/client/cli/deprecation_utils.py +99 -0
- sky/client/cli/flags.py +359 -0
- sky/client/cli/table_utils.py +320 -0
- sky/client/common.py +70 -32
- sky/client/oauth.py +82 -0
- sky/client/sdk.py +1203 -297
- sky/client/sdk_async.py +833 -0
- sky/client/service_account_auth.py +47 -0
- sky/cloud_stores.py +73 -0
- sky/clouds/__init__.py +13 -0
- sky/clouds/aws.py +358 -93
- sky/clouds/azure.py +105 -83
- sky/clouds/cloud.py +127 -36
- sky/clouds/cudo.py +68 -50
- sky/clouds/do.py +66 -48
- sky/clouds/fluidstack.py +63 -44
- sky/clouds/gcp.py +339 -110
- sky/clouds/hyperbolic.py +293 -0
- sky/clouds/ibm.py +70 -49
- sky/clouds/kubernetes.py +563 -162
- sky/clouds/lambda_cloud.py +74 -54
- sky/clouds/nebius.py +206 -80
- sky/clouds/oci.py +88 -66
- sky/clouds/paperspace.py +61 -44
- sky/clouds/primeintellect.py +317 -0
- sky/clouds/runpod.py +164 -74
- sky/clouds/scp.py +89 -83
- sky/clouds/seeweb.py +466 -0
- sky/clouds/shadeform.py +400 -0
- sky/clouds/ssh.py +263 -0
- sky/clouds/utils/aws_utils.py +10 -4
- sky/clouds/utils/gcp_utils.py +87 -11
- sky/clouds/utils/oci_utils.py +38 -14
- sky/clouds/utils/scp_utils.py +177 -124
- sky/clouds/vast.py +99 -77
- sky/clouds/vsphere.py +51 -40
- sky/core.py +349 -139
- sky/dag.py +15 -0
- sky/dashboard/out/404.html +1 -1
- sky/dashboard/out/_next/static/chunks/1141-e6aa9ab418717c59.js +11 -0
- sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js +1 -0
- sky/dashboard/out/_next/static/chunks/1871-74503c8e80fd253b.js +6 -0
- sky/dashboard/out/_next/static/chunks/2260-7703229c33c5ebd5.js +1 -0
- sky/dashboard/out/_next/static/chunks/2350.fab69e61bac57b23.js +1 -0
- sky/dashboard/out/_next/static/chunks/2369.fc20f0c2c8ed9fe7.js +15 -0
- sky/dashboard/out/_next/static/chunks/2755.fff53c4a3fcae910.js +26 -0
- sky/dashboard/out/_next/static/chunks/3294.72362fa129305b19.js +1 -0
- sky/dashboard/out/_next/static/chunks/3785.ad6adaa2a0fa9768.js +1 -0
- sky/dashboard/out/_next/static/chunks/3850-ff4a9a69d978632b.js +1 -0
- sky/dashboard/out/_next/static/chunks/3937.210053269f121201.js +1 -0
- sky/dashboard/out/_next/static/chunks/4725.a830b5c9e7867c92.js +1 -0
- sky/dashboard/out/_next/static/chunks/4937.a2baa2df5572a276.js +15 -0
- sky/dashboard/out/_next/static/chunks/5739-d67458fcb1386c92.js +8 -0
- sky/dashboard/out/_next/static/chunks/6130-2be46d70a38f1e82.js +1 -0
- sky/dashboard/out/_next/static/chunks/616-3d59f75e2ccf9321.js +39 -0
- sky/dashboard/out/_next/static/chunks/6212-7bd06f60ba693125.js +13 -0
- sky/dashboard/out/_next/static/chunks/6601-06114c982db410b6.js +1 -0
- sky/dashboard/out/_next/static/chunks/6856-ef8ba11f96d8c4a3.js +1 -0
- sky/dashboard/out/_next/static/chunks/6989-01359c57e018caa4.js +1 -0
- sky/dashboard/out/_next/static/chunks/6990-32b6e2d3822301fa.js +1 -0
- sky/dashboard/out/_next/static/chunks/7359-c8d04e06886000b3.js +30 -0
- sky/dashboard/out/_next/static/chunks/7411-b15471acd2cba716.js +41 -0
- sky/dashboard/out/_next/static/chunks/7615-3301e838e5f25772.js +1 -0
- sky/dashboard/out/_next/static/chunks/8640.5b9475a2d18c5416.js +16 -0
- sky/dashboard/out/_next/static/chunks/8969-1e4613c651bf4051.js +1 -0
- sky/dashboard/out/_next/static/chunks/9025.fa408f3242e9028d.js +6 -0
- sky/dashboard/out/_next/static/chunks/9353-cff34f7e773b2e2b.js +1 -0
- sky/dashboard/out/_next/static/chunks/9360.7310982cf5a0dc79.js +31 -0
- sky/dashboard/out/_next/static/chunks/9847.3aaca6bb33455140.js +30 -0
- sky/dashboard/out/_next/static/chunks/fd9d1056-86323a29a8f7e46a.js +1 -0
- sky/dashboard/out/_next/static/chunks/framework-cf60a09ccd051a10.js +33 -0
- sky/dashboard/out/_next/static/chunks/main-app-587214043926b3cc.js +1 -0
- sky/dashboard/out/_next/static/chunks/main-f15ccb73239a3bf1.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/_app-bde01e4a2beec258.js +34 -0
- sky/dashboard/out/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-c736ead69c2d86ec.js +16 -0
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-a37d2063af475a1c.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/clusters-d44859594e6f8064.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/config-dfb9bf07b13045f4.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/index-444f1804401f04ea.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/infra/[context]-c0b5935149902e6f.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/infra-aed0ea19df7cf961.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-5796e8d6aea291a0.js +16 -0
- sky/dashboard/out/_next/static/chunks/pages/jobs/pools/[pool]-6edeb7d06032adfc.js +21 -0
- sky/dashboard/out/_next/static/chunks/pages/jobs-479dde13399cf270.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/users-5ab3b907622cf0fe.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/volumes-b84b948ff357c43e.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-c5a3eeee1c218af1.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/workspaces-22b23febb3e89ce1.js +1 -0
- sky/dashboard/out/_next/static/chunks/webpack-2679be77fc08a2f8.js +1 -0
- sky/dashboard/out/_next/static/css/0748ce22df867032.css +3 -0
- sky/dashboard/out/_next/static/zB0ed6ge_W1MDszVHhijS/_buildManifest.js +1 -0
- sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
- sky/dashboard/out/clusters/[cluster].html +1 -1
- sky/dashboard/out/clusters.html +1 -1
- sky/dashboard/out/config.html +1 -0
- sky/dashboard/out/index.html +1 -1
- sky/dashboard/out/infra/[context].html +1 -0
- sky/dashboard/out/infra.html +1 -0
- sky/dashboard/out/jobs/[job].html +1 -1
- sky/dashboard/out/jobs/pools/[pool].html +1 -0
- sky/dashboard/out/jobs.html +1 -1
- sky/dashboard/out/users.html +1 -0
- sky/dashboard/out/volumes.html +1 -0
- sky/dashboard/out/workspace/new.html +1 -0
- sky/dashboard/out/workspaces/[name].html +1 -0
- sky/dashboard/out/workspaces.html +1 -0
- sky/data/data_utils.py +137 -1
- sky/data/mounting_utils.py +269 -84
- sky/data/storage.py +1451 -1807
- sky/data/storage_utils.py +43 -57
- sky/exceptions.py +132 -2
- sky/execution.py +206 -63
- sky/global_user_state.py +2374 -586
- sky/jobs/__init__.py +5 -0
- sky/jobs/client/sdk.py +242 -65
- sky/jobs/client/sdk_async.py +143 -0
- sky/jobs/constants.py +9 -8
- sky/jobs/controller.py +839 -277
- sky/jobs/file_content_utils.py +80 -0
- sky/jobs/log_gc.py +201 -0
- sky/jobs/recovery_strategy.py +398 -152
- sky/jobs/scheduler.py +315 -189
- sky/jobs/server/core.py +829 -255
- sky/jobs/server/server.py +156 -115
- sky/jobs/server/utils.py +136 -0
- sky/jobs/state.py +2092 -701
- sky/jobs/utils.py +1242 -160
- sky/logs/__init__.py +21 -0
- sky/logs/agent.py +108 -0
- sky/logs/aws.py +243 -0
- sky/logs/gcp.py +91 -0
- sky/metrics/__init__.py +0 -0
- sky/metrics/utils.py +443 -0
- sky/models.py +78 -1
- sky/optimizer.py +164 -70
- sky/provision/__init__.py +90 -4
- sky/provision/aws/config.py +147 -26
- sky/provision/aws/instance.py +135 -50
- sky/provision/azure/instance.py +10 -5
- sky/provision/common.py +13 -1
- sky/provision/cudo/cudo_machine_type.py +1 -1
- sky/provision/cudo/cudo_utils.py +14 -8
- sky/provision/cudo/cudo_wrapper.py +72 -71
- sky/provision/cudo/instance.py +10 -6
- sky/provision/do/instance.py +10 -6
- sky/provision/do/utils.py +4 -3
- sky/provision/docker_utils.py +114 -23
- sky/provision/fluidstack/instance.py +13 -8
- sky/provision/gcp/__init__.py +1 -0
- sky/provision/gcp/config.py +301 -19
- sky/provision/gcp/constants.py +218 -0
- sky/provision/gcp/instance.py +36 -8
- sky/provision/gcp/instance_utils.py +18 -4
- sky/provision/gcp/volume_utils.py +247 -0
- sky/provision/hyperbolic/__init__.py +12 -0
- sky/provision/hyperbolic/config.py +10 -0
- sky/provision/hyperbolic/instance.py +437 -0
- sky/provision/hyperbolic/utils.py +373 -0
- sky/provision/instance_setup.py +93 -14
- sky/provision/kubernetes/__init__.py +5 -0
- sky/provision/kubernetes/config.py +9 -52
- sky/provision/kubernetes/constants.py +17 -0
- sky/provision/kubernetes/instance.py +789 -247
- sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml +1 -2
- sky/provision/kubernetes/network.py +27 -17
- sky/provision/kubernetes/network_utils.py +40 -43
- sky/provision/kubernetes/utils.py +1192 -531
- sky/provision/kubernetes/volume.py +282 -0
- sky/provision/lambda_cloud/instance.py +22 -16
- sky/provision/nebius/constants.py +50 -0
- sky/provision/nebius/instance.py +19 -6
- sky/provision/nebius/utils.py +196 -91
- sky/provision/oci/instance.py +10 -5
- sky/provision/paperspace/instance.py +10 -7
- sky/provision/paperspace/utils.py +1 -1
- sky/provision/primeintellect/__init__.py +10 -0
- sky/provision/primeintellect/config.py +11 -0
- sky/provision/primeintellect/instance.py +454 -0
- sky/provision/primeintellect/utils.py +398 -0
- sky/provision/provisioner.py +110 -36
- sky/provision/runpod/__init__.py +5 -0
- sky/provision/runpod/instance.py +27 -6
- sky/provision/runpod/utils.py +51 -18
- sky/provision/runpod/volume.py +180 -0
- sky/provision/scp/__init__.py +15 -0
- sky/provision/scp/config.py +93 -0
- sky/provision/scp/instance.py +531 -0
- sky/provision/seeweb/__init__.py +11 -0
- sky/provision/seeweb/config.py +13 -0
- sky/provision/seeweb/instance.py +807 -0
- sky/provision/shadeform/__init__.py +11 -0
- sky/provision/shadeform/config.py +12 -0
- sky/provision/shadeform/instance.py +351 -0
- sky/provision/shadeform/shadeform_utils.py +83 -0
- sky/provision/ssh/__init__.py +18 -0
- sky/provision/vast/instance.py +13 -8
- sky/provision/vast/utils.py +10 -7
- sky/provision/vsphere/common/vim_utils.py +1 -2
- sky/provision/vsphere/instance.py +15 -10
- sky/provision/vsphere/vsphere_utils.py +9 -19
- sky/py.typed +0 -0
- sky/resources.py +844 -118
- sky/schemas/__init__.py +0 -0
- sky/schemas/api/__init__.py +0 -0
- sky/schemas/api/responses.py +225 -0
- sky/schemas/db/README +4 -0
- sky/schemas/db/env.py +90 -0
- sky/schemas/db/global_user_state/001_initial_schema.py +124 -0
- sky/schemas/db/global_user_state/002_add_workspace_to_cluster_history.py +35 -0
- sky/schemas/db/global_user_state/003_fix_initial_revision.py +61 -0
- sky/schemas/db/global_user_state/004_is_managed.py +34 -0
- sky/schemas/db/global_user_state/005_cluster_event.py +32 -0
- sky/schemas/db/global_user_state/006_provision_log.py +41 -0
- sky/schemas/db/global_user_state/007_cluster_event_request_id.py +34 -0
- sky/schemas/db/global_user_state/008_skylet_ssh_tunnel_metadata.py +34 -0
- sky/schemas/db/global_user_state/009_last_activity_and_launched_at.py +89 -0
- sky/schemas/db/global_user_state/010_save_ssh_key.py +66 -0
- sky/schemas/db/script.py.mako +28 -0
- sky/schemas/db/serve_state/001_initial_schema.py +67 -0
- sky/schemas/db/skypilot_config/001_initial_schema.py +30 -0
- sky/schemas/db/spot_jobs/001_initial_schema.py +97 -0
- sky/schemas/db/spot_jobs/002_cluster_pool.py +42 -0
- sky/schemas/db/spot_jobs/003_pool_hash.py +34 -0
- sky/schemas/db/spot_jobs/004_job_file_contents.py +42 -0
- sky/schemas/db/spot_jobs/005_logs_gc.py +38 -0
- sky/schemas/generated/__init__.py +0 -0
- sky/schemas/generated/autostopv1_pb2.py +36 -0
- sky/schemas/generated/autostopv1_pb2.pyi +43 -0
- sky/schemas/generated/autostopv1_pb2_grpc.py +146 -0
- sky/schemas/generated/jobsv1_pb2.py +86 -0
- sky/schemas/generated/jobsv1_pb2.pyi +254 -0
- sky/schemas/generated/jobsv1_pb2_grpc.py +542 -0
- sky/schemas/generated/managed_jobsv1_pb2.py +74 -0
- sky/schemas/generated/managed_jobsv1_pb2.pyi +278 -0
- sky/schemas/generated/managed_jobsv1_pb2_grpc.py +278 -0
- sky/schemas/generated/servev1_pb2.py +58 -0
- sky/schemas/generated/servev1_pb2.pyi +115 -0
- sky/schemas/generated/servev1_pb2_grpc.py +322 -0
- sky/serve/autoscalers.py +357 -5
- sky/serve/client/impl.py +310 -0
- sky/serve/client/sdk.py +47 -139
- sky/serve/client/sdk_async.py +130 -0
- sky/serve/constants.py +10 -8
- sky/serve/controller.py +64 -19
- sky/serve/load_balancer.py +106 -60
- sky/serve/load_balancing_policies.py +115 -1
- sky/serve/replica_managers.py +273 -162
- sky/serve/serve_rpc_utils.py +179 -0
- sky/serve/serve_state.py +554 -251
- sky/serve/serve_utils.py +733 -220
- sky/serve/server/core.py +66 -711
- sky/serve/server/impl.py +1093 -0
- sky/serve/server/server.py +21 -18
- sky/serve/service.py +133 -48
- sky/serve/service_spec.py +135 -16
- sky/serve/spot_placer.py +3 -0
- sky/server/auth/__init__.py +0 -0
- sky/server/auth/authn.py +50 -0
- sky/server/auth/loopback.py +38 -0
- sky/server/auth/oauth2_proxy.py +200 -0
- sky/server/common.py +475 -181
- sky/server/config.py +81 -23
- sky/server/constants.py +44 -6
- sky/server/daemons.py +229 -0
- sky/server/html/token_page.html +185 -0
- sky/server/metrics.py +160 -0
- sky/server/requests/executor.py +528 -138
- sky/server/requests/payloads.py +351 -17
- sky/server/requests/preconditions.py +21 -17
- sky/server/requests/process.py +112 -29
- sky/server/requests/request_names.py +120 -0
- sky/server/requests/requests.py +817 -224
- sky/server/requests/serializers/decoders.py +82 -31
- sky/server/requests/serializers/encoders.py +140 -22
- sky/server/requests/threads.py +106 -0
- sky/server/rest.py +417 -0
- sky/server/server.py +1290 -284
- sky/server/state.py +20 -0
- sky/server/stream_utils.py +345 -57
- sky/server/uvicorn.py +217 -3
- sky/server/versions.py +270 -0
- sky/setup_files/MANIFEST.in +5 -0
- sky/setup_files/alembic.ini +156 -0
- sky/setup_files/dependencies.py +136 -31
- sky/setup_files/setup.py +44 -42
- sky/sky_logging.py +102 -5
- sky/skylet/attempt_skylet.py +1 -0
- sky/skylet/autostop_lib.py +129 -8
- sky/skylet/configs.py +27 -20
- sky/skylet/constants.py +171 -19
- sky/skylet/events.py +105 -21
- sky/skylet/job_lib.py +335 -104
- sky/skylet/log_lib.py +297 -18
- sky/skylet/log_lib.pyi +44 -1
- sky/skylet/ray_patches/__init__.py +17 -3
- sky/skylet/ray_patches/autoscaler.py.diff +18 -0
- sky/skylet/ray_patches/cli.py.diff +19 -0
- sky/skylet/ray_patches/command_runner.py.diff +17 -0
- sky/skylet/ray_patches/log_monitor.py.diff +20 -0
- sky/skylet/ray_patches/resource_demand_scheduler.py.diff +32 -0
- sky/skylet/ray_patches/updater.py.diff +18 -0
- sky/skylet/ray_patches/worker.py.diff +41 -0
- sky/skylet/services.py +564 -0
- sky/skylet/skylet.py +63 -4
- sky/skylet/subprocess_daemon.py +103 -29
- sky/skypilot_config.py +506 -99
- sky/ssh_node_pools/__init__.py +1 -0
- sky/ssh_node_pools/core.py +135 -0
- sky/ssh_node_pools/server.py +233 -0
- sky/task.py +621 -137
- sky/templates/aws-ray.yml.j2 +10 -3
- sky/templates/azure-ray.yml.j2 +1 -1
- sky/templates/do-ray.yml.j2 +1 -1
- sky/templates/gcp-ray.yml.j2 +57 -0
- sky/templates/hyperbolic-ray.yml.j2 +67 -0
- sky/templates/jobs-controller.yaml.j2 +27 -24
- sky/templates/kubernetes-loadbalancer.yml.j2 +2 -0
- sky/templates/kubernetes-ray.yml.j2 +607 -51
- sky/templates/lambda-ray.yml.j2 +1 -1
- sky/templates/nebius-ray.yml.j2 +33 -12
- sky/templates/paperspace-ray.yml.j2 +1 -1
- sky/templates/primeintellect-ray.yml.j2 +71 -0
- sky/templates/runpod-ray.yml.j2 +9 -1
- sky/templates/scp-ray.yml.j2 +3 -50
- sky/templates/seeweb-ray.yml.j2 +108 -0
- sky/templates/shadeform-ray.yml.j2 +72 -0
- sky/templates/sky-serve-controller.yaml.j2 +22 -2
- sky/templates/websocket_proxy.py +178 -18
- sky/usage/usage_lib.py +18 -11
- sky/users/__init__.py +0 -0
- sky/users/model.conf +15 -0
- sky/users/permission.py +387 -0
- sky/users/rbac.py +121 -0
- sky/users/server.py +720 -0
- sky/users/token_service.py +218 -0
- sky/utils/accelerator_registry.py +34 -5
- sky/utils/admin_policy_utils.py +84 -38
- sky/utils/annotations.py +16 -5
- sky/utils/asyncio_utils.py +78 -0
- sky/utils/auth_utils.py +153 -0
- sky/utils/benchmark_utils.py +60 -0
- sky/utils/cli_utils/status_utils.py +159 -86
- sky/utils/cluster_utils.py +31 -9
- sky/utils/command_runner.py +354 -68
- sky/utils/command_runner.pyi +93 -3
- sky/utils/common.py +35 -8
- sky/utils/common_utils.py +310 -87
- sky/utils/config_utils.py +87 -5
- sky/utils/context.py +402 -0
- sky/utils/context_utils.py +222 -0
- sky/utils/controller_utils.py +264 -89
- sky/utils/dag_utils.py +31 -12
- sky/utils/db/__init__.py +0 -0
- sky/utils/db/db_utils.py +470 -0
- sky/utils/db/migration_utils.py +133 -0
- sky/utils/directory_utils.py +12 -0
- sky/utils/env_options.py +13 -0
- sky/utils/git.py +567 -0
- sky/utils/git_clone.sh +460 -0
- sky/utils/infra_utils.py +195 -0
- sky/utils/kubernetes/cleanup-tunnel.sh +62 -0
- sky/utils/kubernetes/config_map_utils.py +133 -0
- sky/utils/kubernetes/create_cluster.sh +13 -27
- sky/utils/kubernetes/delete_cluster.sh +10 -7
- sky/utils/kubernetes/deploy_remote_cluster.py +1299 -0
- sky/utils/kubernetes/exec_kubeconfig_converter.py +22 -31
- sky/utils/kubernetes/generate_kind_config.py +6 -66
- sky/utils/kubernetes/generate_kubeconfig.sh +4 -1
- sky/utils/kubernetes/gpu_labeler.py +5 -5
- sky/utils/kubernetes/kubernetes_deploy_utils.py +354 -47
- sky/utils/kubernetes/ssh-tunnel.sh +379 -0
- sky/utils/kubernetes/ssh_utils.py +221 -0
- sky/utils/kubernetes_enums.py +8 -15
- sky/utils/lock_events.py +94 -0
- sky/utils/locks.py +368 -0
- sky/utils/log_utils.py +300 -6
- sky/utils/perf_utils.py +22 -0
- sky/utils/resource_checker.py +298 -0
- sky/utils/resources_utils.py +249 -32
- sky/utils/rich_utils.py +213 -37
- sky/utils/schemas.py +905 -147
- sky/utils/serialize_utils.py +16 -0
- sky/utils/status_lib.py +10 -0
- sky/utils/subprocess_utils.py +38 -15
- sky/utils/tempstore.py +70 -0
- sky/utils/timeline.py +24 -52
- sky/utils/ux_utils.py +84 -15
- sky/utils/validator.py +11 -1
- sky/utils/volume.py +86 -0
- sky/utils/yaml_utils.py +111 -0
- sky/volumes/__init__.py +13 -0
- sky/volumes/client/__init__.py +0 -0
- sky/volumes/client/sdk.py +149 -0
- sky/volumes/server/__init__.py +0 -0
- sky/volumes/server/core.py +258 -0
- sky/volumes/server/server.py +122 -0
- sky/volumes/volume.py +212 -0
- sky/workspaces/__init__.py +0 -0
- sky/workspaces/core.py +655 -0
- sky/workspaces/server.py +101 -0
- sky/workspaces/utils.py +56 -0
- skypilot_nightly-1.0.0.dev20251107.dist-info/METADATA +675 -0
- skypilot_nightly-1.0.0.dev20251107.dist-info/RECORD +594 -0
- {skypilot_nightly-1.0.0.dev20250509.dist-info → skypilot_nightly-1.0.0.dev20251107.dist-info}/WHEEL +1 -1
- sky/benchmark/benchmark_state.py +0 -256
- sky/benchmark/benchmark_utils.py +0 -641
- sky/clouds/service_catalog/constants.py +0 -7
- sky/dashboard/out/_next/static/LksQgChY5izXjokL3LcEu/_buildManifest.js +0 -1
- sky/dashboard/out/_next/static/chunks/236-f49500b82ad5392d.js +0 -6
- sky/dashboard/out/_next/static/chunks/312-c3c8845990db8ffc.js +0 -15
- sky/dashboard/out/_next/static/chunks/37-0a572fe0dbb89c4d.js +0 -6
- sky/dashboard/out/_next/static/chunks/678-206dddca808e6d16.js +0 -59
- sky/dashboard/out/_next/static/chunks/845-0f8017370869e269.js +0 -1
- sky/dashboard/out/_next/static/chunks/979-7bf73a4c7cea0f5c.js +0 -1
- sky/dashboard/out/_next/static/chunks/fd9d1056-2821b0f0cabcd8bd.js +0 -1
- sky/dashboard/out/_next/static/chunks/framework-87d061ee6ed71b28.js +0 -33
- sky/dashboard/out/_next/static/chunks/main-app-241eb28595532291.js +0 -1
- sky/dashboard/out/_next/static/chunks/main-e0e2335212e72357.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/_error-1be831200e60c5c0.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-e15db85d0ea1fbe1.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-f383db7389368ea7.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/clusters-a93b93e10b8b074e.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/index-f9f039532ca8cbc4.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-03f279c6741fb48b.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/jobs-a75029b67aab6a2e.js +0 -1
- sky/dashboard/out/_next/static/chunks/webpack-830f59b8404e96b8.js +0 -1
- sky/dashboard/out/_next/static/css/c6933bbb2ce7f4dd.css +0 -3
- sky/jobs/dashboard/dashboard.py +0 -223
- sky/jobs/dashboard/static/favicon.ico +0 -0
- sky/jobs/dashboard/templates/index.html +0 -831
- sky/jobs/server/dashboard_utils.py +0 -69
- sky/skylet/providers/scp/__init__.py +0 -2
- sky/skylet/providers/scp/config.py +0 -149
- sky/skylet/providers/scp/node_provider.py +0 -578
- sky/templates/kubernetes-ssh-jump.yml.j2 +0 -94
- sky/utils/db_utils.py +0 -100
- sky/utils/kubernetes/deploy_remote_cluster.sh +0 -308
- sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -191
- skypilot_nightly-1.0.0.dev20250509.dist-info/METADATA +0 -361
- skypilot_nightly-1.0.0.dev20250509.dist-info/RECORD +0 -396
- /sky/{clouds/service_catalog → catalog}/config.py +0 -0
- /sky/{benchmark → catalog/data_fetchers}/__init__.py +0 -0
- /sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_azure.py +0 -0
- /sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_fluidstack.py +0 -0
- /sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_ibm.py +0 -0
- /sky/{clouds/service_catalog/data_fetchers → client/cli}/__init__.py +0 -0
- /sky/dashboard/out/_next/static/{LksQgChY5izXjokL3LcEu → zB0ed6ge_W1MDszVHhijS}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250509.dist-info → skypilot_nightly-1.0.0.dev20251107.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250509.dist-info → skypilot_nightly-1.0.0.dev20251107.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250509.dist-info → skypilot_nightly-1.0.0.dev20251107.dist-info}/top_level.txt +0 -0
sky/data/storage_utils.py
CHANGED
|
@@ -3,8 +3,9 @@ import glob
|
|
|
3
3
|
import os
|
|
4
4
|
import pathlib
|
|
5
5
|
import shlex
|
|
6
|
+
import stat
|
|
6
7
|
import subprocess
|
|
7
|
-
from typing import
|
|
8
|
+
from typing import List, Optional, Set, TextIO, Union
|
|
8
9
|
import warnings
|
|
9
10
|
import zipfile
|
|
10
11
|
|
|
@@ -14,58 +15,12 @@ from sky import exceptions
|
|
|
14
15
|
from sky import sky_logging
|
|
15
16
|
from sky.skylet import constants
|
|
16
17
|
from sky.utils import common_utils
|
|
17
|
-
from sky.utils import log_utils
|
|
18
18
|
|
|
19
19
|
logger = sky_logging.init_logger(__name__)
|
|
20
20
|
|
|
21
21
|
_USE_SKYIGNORE_HINT = (
|
|
22
22
|
'To avoid using .gitignore, you can create a .skyignore file instead.')
|
|
23
23
|
|
|
24
|
-
_LAST_USE_TRUNC_LENGTH = 25
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def format_storage_table(storages: List[Dict[str, Any]],
|
|
28
|
-
show_all: bool = False) -> str:
|
|
29
|
-
"""Format the storage table for display.
|
|
30
|
-
|
|
31
|
-
Args:
|
|
32
|
-
storage_table (dict): The storage table.
|
|
33
|
-
|
|
34
|
-
Returns:
|
|
35
|
-
str: The formatted storage table.
|
|
36
|
-
"""
|
|
37
|
-
storage_table = log_utils.create_table([
|
|
38
|
-
'NAME',
|
|
39
|
-
'UPDATED',
|
|
40
|
-
'STORE',
|
|
41
|
-
'COMMAND',
|
|
42
|
-
'STATUS',
|
|
43
|
-
])
|
|
44
|
-
|
|
45
|
-
for row in storages:
|
|
46
|
-
launched_at = row['launched_at']
|
|
47
|
-
if show_all:
|
|
48
|
-
command = row['last_use']
|
|
49
|
-
else:
|
|
50
|
-
command = common_utils.truncate_long_string(row['last_use'],
|
|
51
|
-
_LAST_USE_TRUNC_LENGTH)
|
|
52
|
-
storage_table.add_row([
|
|
53
|
-
# NAME
|
|
54
|
-
row['name'],
|
|
55
|
-
# LAUNCHED
|
|
56
|
-
log_utils.readable_time_duration(launched_at),
|
|
57
|
-
# CLOUDS
|
|
58
|
-
', '.join([s.value for s in row['store']]),
|
|
59
|
-
# COMMAND,
|
|
60
|
-
command,
|
|
61
|
-
# STATUS
|
|
62
|
-
row['status'].value,
|
|
63
|
-
])
|
|
64
|
-
if storages:
|
|
65
|
-
return str(storage_table)
|
|
66
|
-
else:
|
|
67
|
-
return 'No existing storage.'
|
|
68
|
-
|
|
69
24
|
|
|
70
25
|
def get_excluded_files_from_skyignore(src_dir_path: str) -> List[str]:
|
|
71
26
|
"""List files and patterns ignored by the .skyignore file
|
|
@@ -253,17 +208,28 @@ def get_excluded_files(src_dir_path: str) -> List[str]:
|
|
|
253
208
|
|
|
254
209
|
def zip_files_and_folders(items: List[str],
|
|
255
210
|
output_file: Union[str, pathlib.Path],
|
|
256
|
-
log_file: Optional[TextIO] = None
|
|
211
|
+
log_file: Optional[TextIO] = None,
|
|
212
|
+
relative_to_items: bool = False):
|
|
213
|
+
|
|
214
|
+
def _get_archive_name(file_path: str, item_path: str) -> str:
|
|
215
|
+
"""Get the archive name for a file based on the relative parameters."""
|
|
216
|
+
if relative_to_items:
|
|
217
|
+
# Make paths relative to the item itself
|
|
218
|
+
return os.path.relpath(file_path, os.path.dirname(item_path))
|
|
219
|
+
else:
|
|
220
|
+
# Default: use full path (existing behavior)
|
|
221
|
+
return file_path
|
|
257
222
|
|
|
258
|
-
def _store_symlink(zipf, path: str, is_dir: bool):
|
|
223
|
+
def _store_symlink(zipf, path: str, archive_name: str, is_dir: bool):
|
|
259
224
|
# Get the target of the symlink
|
|
260
225
|
target = os.readlink(path)
|
|
261
226
|
# Use relative path as absolute path will not be able to resolve on
|
|
262
227
|
# remote API server.
|
|
263
228
|
if os.path.isabs(target):
|
|
264
229
|
target = os.path.relpath(target, os.path.dirname(path))
|
|
265
|
-
# Create a ZipInfo instance
|
|
266
|
-
zi = zipfile.ZipInfo(
|
|
230
|
+
# Create a ZipInfo instance using the archive name
|
|
231
|
+
zi = zipfile.ZipInfo(archive_name +
|
|
232
|
+
'/') if is_dir else zipfile.ZipInfo(archive_name)
|
|
267
233
|
# Set external attributes to mark as symlink
|
|
268
234
|
zi.external_attr = 0xA1ED0000
|
|
269
235
|
# Write symlink target as content
|
|
@@ -282,8 +248,18 @@ def zip_files_and_folders(items: List[str],
|
|
|
282
248
|
# Add the file to the zip archive even if it matches
|
|
283
249
|
# patterns in dot ignore files, as it was explicitly
|
|
284
250
|
# specified by user.
|
|
285
|
-
|
|
251
|
+
archive_name = _get_archive_name(item, item)
|
|
252
|
+
zipf.write(item, archive_name)
|
|
286
253
|
elif os.path.isdir(item):
|
|
254
|
+
# Include root dir
|
|
255
|
+
archive_name = _get_archive_name(item, item)
|
|
256
|
+
# If it's a symlink, store it as a symlink
|
|
257
|
+
if os.path.islink(item):
|
|
258
|
+
_store_symlink(zipf, item, archive_name, is_dir=True)
|
|
259
|
+
else:
|
|
260
|
+
zipf.write(item, archive_name)
|
|
261
|
+
|
|
262
|
+
# Include dir contents recursively
|
|
287
263
|
excluded_files = set([
|
|
288
264
|
os.path.join(item, f.rstrip('/'))
|
|
289
265
|
for f in get_excluded_files(item)
|
|
@@ -305,19 +281,29 @@ def zip_files_and_folders(items: List[str],
|
|
|
305
281
|
# directories)
|
|
306
282
|
for dir_name in dirs:
|
|
307
283
|
dir_path = os.path.join(root, dir_name)
|
|
284
|
+
archive_name = _get_archive_name(dir_path, item)
|
|
308
285
|
# If it's a symlink, store it as a symlink
|
|
309
286
|
if os.path.islink(dir_path):
|
|
310
|
-
_store_symlink(zipf,
|
|
287
|
+
_store_symlink(zipf,
|
|
288
|
+
dir_path,
|
|
289
|
+
archive_name,
|
|
290
|
+
is_dir=True)
|
|
311
291
|
else:
|
|
312
|
-
zipf.write(dir_path)
|
|
292
|
+
zipf.write(dir_path, archive_name)
|
|
313
293
|
|
|
314
294
|
for file in files:
|
|
315
295
|
file_path = os.path.join(root, file)
|
|
316
296
|
if file_path in excluded_files:
|
|
317
297
|
continue
|
|
298
|
+
archive_name = _get_archive_name(file_path, item)
|
|
318
299
|
if os.path.islink(file_path):
|
|
319
|
-
_store_symlink(zipf,
|
|
320
|
-
|
|
321
|
-
|
|
300
|
+
_store_symlink(zipf,
|
|
301
|
+
file_path,
|
|
302
|
+
archive_name,
|
|
303
|
+
is_dir=False)
|
|
304
|
+
continue
|
|
305
|
+
if stat.S_ISSOCK(os.stat(file_path).st_mode):
|
|
306
|
+
continue
|
|
307
|
+
zipf.write(file_path, archive_name)
|
|
322
308
|
if log_file is not None:
|
|
323
309
|
log_file.write(f'Zipped {item}\n')
|
sky/exceptions.py
CHANGED
|
@@ -6,11 +6,12 @@ import types
|
|
|
6
6
|
import typing
|
|
7
7
|
from typing import Any, Dict, List, Optional, Sequence
|
|
8
8
|
|
|
9
|
+
from sky.backends import backend
|
|
9
10
|
from sky.utils import env_options
|
|
11
|
+
from sky.utils import serialize_utils
|
|
10
12
|
|
|
11
13
|
if typing.TYPE_CHECKING:
|
|
12
14
|
from sky import jobs as managed_jobs
|
|
13
|
-
from sky.backends import backend
|
|
14
15
|
from sky.skylet import job_lib
|
|
15
16
|
from sky.utils import status_lib
|
|
16
17
|
|
|
@@ -92,6 +93,10 @@ def serialize_exception(e: BaseException) -> Dict[str, Any]:
|
|
|
92
93
|
attr_v = attributes[attr_k]
|
|
93
94
|
if isinstance(attr_v, types.TracebackType):
|
|
94
95
|
attributes[attr_k] = traceback.format_tb(attr_v)
|
|
96
|
+
if isinstance(attr_v, backend.ResourceHandle):
|
|
97
|
+
attributes[attr_k] = (
|
|
98
|
+
serialize_utils.prepare_handle_for_backwards_compatibility(
|
|
99
|
+
attr_v))
|
|
95
100
|
|
|
96
101
|
data = {
|
|
97
102
|
'type': e.__class__.__name__,
|
|
@@ -175,6 +180,18 @@ class KubeAPIUnreachableError(ResourcesUnavailableError):
|
|
|
175
180
|
pass
|
|
176
181
|
|
|
177
182
|
|
|
183
|
+
class KubernetesValidationError(Exception):
|
|
184
|
+
"""Raised when the Kubernetes validation fails.
|
|
185
|
+
|
|
186
|
+
It stores a list of strings that represent the path to the field which
|
|
187
|
+
caused the validation error.
|
|
188
|
+
"""
|
|
189
|
+
|
|
190
|
+
def __init__(self, path: List[str], message: str):
|
|
191
|
+
super().__init__(message)
|
|
192
|
+
self.path = path
|
|
193
|
+
|
|
194
|
+
|
|
178
195
|
class InvalidCloudConfigs(Exception):
|
|
179
196
|
"""Raised when invalid configurations are provided for a given cloud."""
|
|
180
197
|
pass
|
|
@@ -191,6 +208,12 @@ class InconsistentHighAvailabilityError(Exception):
|
|
|
191
208
|
pass
|
|
192
209
|
|
|
193
210
|
|
|
211
|
+
class InconsistentConsolidationModeError(Exception):
|
|
212
|
+
"""Raised when the consolidation mode property in the user config
|
|
213
|
+
is inconsistent with the actual cluster."""
|
|
214
|
+
pass
|
|
215
|
+
|
|
216
|
+
|
|
194
217
|
class ProvisionPrechecksError(Exception):
|
|
195
218
|
"""Raised when a managed job fails prechecks before provision.
|
|
196
219
|
|
|
@@ -222,7 +245,7 @@ class ManagedJobReachedMaxRetriesError(Exception):
|
|
|
222
245
|
class ManagedJobStatusError(Exception):
|
|
223
246
|
"""Raised when a managed job task status update is invalid.
|
|
224
247
|
|
|
225
|
-
For instance, a RUNNING job cannot become
|
|
248
|
+
For instance, a RUNNING job cannot become PENDING.
|
|
226
249
|
"""
|
|
227
250
|
pass
|
|
228
251
|
|
|
@@ -381,6 +404,7 @@ class FetchClusterInfoError(Exception):
|
|
|
381
404
|
class Reason(enum.Enum):
|
|
382
405
|
HEAD = 'HEAD'
|
|
383
406
|
WORKER = 'WORKER'
|
|
407
|
+
UNKNOWN = 'UNKNOWN'
|
|
384
408
|
|
|
385
409
|
def __init__(self, reason: Reason) -> None:
|
|
386
410
|
super().__init__()
|
|
@@ -488,11 +512,26 @@ class ApiServerConnectionError(RuntimeError):
|
|
|
488
512
|
f'Try: curl {server_url}/api/health')
|
|
489
513
|
|
|
490
514
|
|
|
515
|
+
class ApiServerAuthenticationError(RuntimeError):
|
|
516
|
+
"""Raised when authentication is required for the API server."""
|
|
517
|
+
|
|
518
|
+
def __init__(self, server_url: str):
|
|
519
|
+
super().__init__(
|
|
520
|
+
f'Authentication required for SkyPilot API server at {server_url}. '
|
|
521
|
+
f'Please run:\n'
|
|
522
|
+
f' sky api login -e {server_url}')
|
|
523
|
+
|
|
524
|
+
|
|
491
525
|
class APIVersionMismatchError(RuntimeError):
|
|
492
526
|
"""Raised when the API version mismatch."""
|
|
493
527
|
pass
|
|
494
528
|
|
|
495
529
|
|
|
530
|
+
class APINotSupportedError(RuntimeError):
|
|
531
|
+
"""Raised when the API is not supported by the remote peer."""
|
|
532
|
+
pass
|
|
533
|
+
|
|
534
|
+
|
|
496
535
|
class JobExitCode(enum.IntEnum):
|
|
497
536
|
"""Job exit code enum.
|
|
498
537
|
|
|
@@ -568,3 +607,94 @@ class JobExitCode(enum.IntEnum):
|
|
|
568
607
|
|
|
569
608
|
# Should not hit this case, but included to avoid errors
|
|
570
609
|
return cls.FAILED
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
class ExecutionRetryableError(Exception):
|
|
613
|
+
"""Raised when task execution fails and should be retried."""
|
|
614
|
+
|
|
615
|
+
def __init__(self, message: str, hint: str,
|
|
616
|
+
retry_wait_seconds: int) -> None:
|
|
617
|
+
super().__init__(message)
|
|
618
|
+
self.hint = hint
|
|
619
|
+
self.retry_wait_seconds = retry_wait_seconds
|
|
620
|
+
|
|
621
|
+
def __reduce__(self):
|
|
622
|
+
# Make sure the exception is picklable
|
|
623
|
+
return (self.__class__, (str(self), self.hint, self.retry_wait_seconds))
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
class ExecutionPoolFullError(Exception):
|
|
627
|
+
"""Raised when the execution pool is full."""
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
class RequestAlreadyExistsError(Exception):
|
|
631
|
+
"""Raised when a request is already exists."""
|
|
632
|
+
pass
|
|
633
|
+
|
|
634
|
+
|
|
635
|
+
class PermissionDeniedError(Exception):
|
|
636
|
+
"""Raised when a user does not have permission to access a resource."""
|
|
637
|
+
pass
|
|
638
|
+
|
|
639
|
+
|
|
640
|
+
class VolumeNotFoundError(Exception):
|
|
641
|
+
"""Raised when a volume is not found."""
|
|
642
|
+
pass
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
class VolumeTopologyConflictError(Exception):
|
|
646
|
+
"""Raised when the there is conflict in the volumes and compute topology"""
|
|
647
|
+
pass
|
|
648
|
+
|
|
649
|
+
|
|
650
|
+
class ServerTemporarilyUnavailableError(Exception):
|
|
651
|
+
"""Raised when the server is temporarily unavailable."""
|
|
652
|
+
|
|
653
|
+
def __init__(self, message: str):
|
|
654
|
+
super().__init__(message)
|
|
655
|
+
self.message = message
|
|
656
|
+
|
|
657
|
+
def __str__(self):
|
|
658
|
+
return ('SkyPilot API server is temporarily unavailable: '
|
|
659
|
+
f'{self.message}. Please try again later.')
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
class RestfulPolicyError(Exception):
|
|
663
|
+
"""Raised when failed to call a RESTful policy."""
|
|
664
|
+
pass
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
class GitError(Exception):
|
|
668
|
+
"""Raised when a git operation fails."""
|
|
669
|
+
pass
|
|
670
|
+
|
|
671
|
+
|
|
672
|
+
class RequestInterruptedError(Exception):
|
|
673
|
+
"""Raised when a request is interrupted by the server.
|
|
674
|
+
Client is expected to retry the request immediately when
|
|
675
|
+
this error is raised.
|
|
676
|
+
"""
|
|
677
|
+
pass
|
|
678
|
+
|
|
679
|
+
|
|
680
|
+
class SkyletInternalError(Exception):
|
|
681
|
+
"""Raised when a Skylet internal error occurs."""
|
|
682
|
+
pass
|
|
683
|
+
|
|
684
|
+
|
|
685
|
+
class SkyletMethodNotImplementedError(Exception):
|
|
686
|
+
"""Raised when a Skylet gRPC method is not implemented on the server."""
|
|
687
|
+
pass
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
class ClientError(Exception):
|
|
691
|
+
"""Raised when a there is a client error occurs.
|
|
692
|
+
|
|
693
|
+
If a request encounters a ClientError, it will not be retried to the server.
|
|
694
|
+
"""
|
|
695
|
+
pass
|
|
696
|
+
|
|
697
|
+
|
|
698
|
+
class ConcurrentWorkerExhaustedError(Exception):
|
|
699
|
+
"""Raised when the concurrent worker is exhausted."""
|
|
700
|
+
pass
|