modal 1.1.4.dev28__tar.gz → 1.1.4.dev30__tar.gz
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.
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/PKG-INFO +1 -1
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/client.pyi +2 -2
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/experimental/flash.py +2 -2
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/sandbox.py +16 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/sandbox.pyi +1 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_version/__init__.py +1 -1
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/LICENSE +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/README.md +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/__init__.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/__main__.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_clustered_functions.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_clustered_functions.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_container_entrypoint.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_functions.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_ipython.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_location.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_object.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_output.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_partial_function.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_pty.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_resolver.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_resources.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_runtime/__init__.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_runtime/asgi.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_runtime/execution_context.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_runtime/telemetry.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_serialization.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_traceback.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_tunnel.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_tunnel.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_type_manager.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/__init__.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/app_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/async_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/blob_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/deprecation.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/docker_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/function_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/git_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/hash_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/http_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/logger.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/mount_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/name_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/package_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/shell_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_utils/time_utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_vendor/__init__.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_vendor/tblib.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/_watcher.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/app.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/app.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/builder/2023.12.txt +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/builder/2024.04.txt +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/builder/2024.10.txt +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/builder/2025.06.txt +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/builder/README.md +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/builder/base-images.json +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/call_graph.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/__init__.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/_download.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/_traceback.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/app.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/cluster.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/config.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/container.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/dict.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/entry_point.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/environment.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/import_refs.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/launch.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/network_file_system.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/profile.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/programs/__init__.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/programs/launch_instance_ssh.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/programs/run_marimo.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/programs/vscode.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/queues.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/run.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/secret.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/token.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/utils.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cli/volume.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/client.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cls.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/cls.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/config.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/container_process.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/container_process.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/dict.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/dict.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/environments.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/environments.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/exception.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/experimental/__init__.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/experimental/flash.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/experimental/ipython.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/file_io.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/file_io.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/file_pattern_matcher.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/functions.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/functions.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/gpu.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/image.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/image.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/io_streams.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/io_streams.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/mount.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/mount.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/network_file_system.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/network_file_system.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/object.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/object.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/output.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/parallel_map.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/parallel_map.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/partial_function.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/partial_function.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/proxy.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/proxy.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/py.typed +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/queue.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/queue.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/retries.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/runner.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/runner.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/running_app.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/schedule.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/scheduler_placement.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/secret.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/secret.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/serving.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/serving.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/snapshot.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/snapshot.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/stream_type.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/token_flow.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/token_flow.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/volume.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal/volume.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal.egg-info/requires.txt +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal.egg-info/top_level.txt +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_docs/__init__.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/__init__.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/api.proto +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/api_grpc.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/api_pb2.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/modal_options_grpc.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/options.proto +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/options_grpc.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/options_pb2.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/options_pb2.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/options_pb2_grpc.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/options_pb2_grpc.pyi +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_proto/py.typed +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/modal_version/__main__.py +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/pyproject.toml +0 -0
- {modal-1.1.4.dev28 → modal-1.1.4.dev30}/setup.cfg +0 -0
@@ -33,7 +33,7 @@ class _Client:
|
|
33
33
|
server_url: str,
|
34
34
|
client_type: int,
|
35
35
|
credentials: typing.Optional[tuple[str, str]],
|
36
|
-
version: str = "1.1.4.
|
36
|
+
version: str = "1.1.4.dev30",
|
37
37
|
):
|
38
38
|
"""mdmd:hidden
|
39
39
|
The Modal client object is not intended to be instantiated directly by users.
|
@@ -164,7 +164,7 @@ class Client:
|
|
164
164
|
server_url: str,
|
165
165
|
client_type: int,
|
166
166
|
credentials: typing.Optional[tuple[str, str]],
|
167
|
-
version: str = "1.1.4.
|
167
|
+
version: str = "1.1.4.dev30",
|
168
168
|
):
|
169
169
|
"""mdmd:hidden
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
@@ -256,7 +256,7 @@ class _FlashPrometheusAutoscaler:
|
|
256
256
|
|
257
257
|
internal_metrics_list = []
|
258
258
|
for container in containers:
|
259
|
-
internal_metric = await self._get_container_metrics(container.
|
259
|
+
internal_metric = await self._get_container_metrics(container.task_id)
|
260
260
|
if internal_metric is None:
|
261
261
|
continue
|
262
262
|
internal_metrics_list.append(getattr(internal_metric.metrics, self.target_metric))
|
@@ -282,7 +282,7 @@ class _FlashPrometheusAutoscaler:
|
|
282
282
|
f"desired replicas: {desired_replicas}"
|
283
283
|
)
|
284
284
|
|
285
|
-
desired_replicas = max(1, desired_replicas)
|
285
|
+
desired_replicas = max(1, min(desired_replicas, self.max_containers or 1000))
|
286
286
|
return desired_replicas
|
287
287
|
|
288
288
|
async def _compute_target_containers_prometheus(self, current_replicas: int) -> int:
|
@@ -24,6 +24,7 @@ from ._utils.async_utils import TaskContext, synchronize_api
|
|
24
24
|
from ._utils.deprecation import deprecation_warning
|
25
25
|
from ._utils.grpc_utils import retry_transient_errors
|
26
26
|
from ._utils.mount_utils import validate_network_file_systems, validate_volumes
|
27
|
+
from ._utils.name_utils import is_valid_object_name
|
27
28
|
from .client import _Client
|
28
29
|
from .config import config
|
29
30
|
from .container_process import _ContainerProcess
|
@@ -73,6 +74,16 @@ def _validate_exec_args(args: Sequence[str]) -> None:
|
|
73
74
|
)
|
74
75
|
|
75
76
|
|
77
|
+
def _warn_if_invalid_name(name: str) -> None:
|
78
|
+
if not is_valid_object_name(name):
|
79
|
+
deprecation_warning(
|
80
|
+
(2025, 9, 3),
|
81
|
+
f"Sandbox name '{name}' will be considered invalid in a future release."
|
82
|
+
"\n\nNames may contain only alphanumeric characters, dashes, periods, and underscores,"
|
83
|
+
" must be shorter than 64 characters, and cannot conflict with App ID strings.",
|
84
|
+
)
|
85
|
+
|
86
|
+
|
76
87
|
class DefaultSandboxNameOverride(str):
|
77
88
|
"""A singleton class that represents the default sandbox name override.
|
78
89
|
|
@@ -404,6 +415,8 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
404
415
|
from .app import _App
|
405
416
|
|
406
417
|
_validate_exec_args(args)
|
418
|
+
if name is not None:
|
419
|
+
_warn_if_invalid_name(name)
|
407
420
|
|
408
421
|
if block_network and (encrypted_ports or h2_ports or unencrypted_ports):
|
409
422
|
raise InvalidError("Cannot specify open ports when `block_network` is enabled")
|
@@ -787,6 +800,9 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
787
800
|
):
|
788
801
|
client = client or await _Client.from_env()
|
789
802
|
|
803
|
+
if name is not None and name != _DEFAULT_SANDBOX_NAME_OVERRIDE:
|
804
|
+
_warn_if_invalid_name(name)
|
805
|
+
|
790
806
|
if name is _DEFAULT_SANDBOX_NAME_OVERRIDE:
|
791
807
|
restore_req = api_pb2.SandboxRestoreRequest(
|
792
808
|
snapshot_id=snapshot.object_id,
|
@@ -26,6 +26,7 @@ import typing
|
|
26
26
|
import typing_extensions
|
27
27
|
|
28
28
|
def _validate_exec_args(args: collections.abc.Sequence[str]) -> None: ...
|
29
|
+
def _warn_if_invalid_name(name: str) -> None: ...
|
29
30
|
|
30
31
|
class DefaultSandboxNameOverride(str):
|
31
32
|
"""A singleton class that represents the default sandbox name override.
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|