modal 1.1.1.dev7__tar.gz → 1.1.1.dev10__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.
Potentially problematic release.
This version of modal might be problematic. Click here for more details.
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/PKG-INFO +1 -1
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/client.pyi +2 -2
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/exception.py +4 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/experimental/__init__.py +1 -1
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/experimental/flash.py +17 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/experimental/flash.pyi +19 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/sandbox.py +17 -7
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/sandbox.pyi +6 -6
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_version/__init__.py +1 -1
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/LICENSE +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/README.md +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/__init__.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/__main__.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_clustered_functions.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_clustered_functions.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_container_entrypoint.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_functions.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_ipython.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_location.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_object.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_output.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_partial_function.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_pty.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_resolver.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_resources.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_runtime/__init__.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_runtime/asgi.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_runtime/execution_context.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_runtime/telemetry.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_serialization.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_traceback.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_tunnel.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_tunnel.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_type_manager.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/__init__.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/app_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/async_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/blob_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/deprecation.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/docker_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/function_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/git_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/hash_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/http_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/logger.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/mount_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/name_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/package_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/shell_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_utils/time_utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_vendor/__init__.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_vendor/tblib.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/_watcher.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/app.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/app.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/call_graph.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/__init__.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/_download.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/_traceback.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/app.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/cluster.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/config.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/container.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/dict.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/entry_point.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/environment.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/import_refs.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/launch.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/network_file_system.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/profile.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/programs/__init__.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/programs/vscode.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/queues.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/run.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/secret.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/token.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/utils.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cli/volume.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/client.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cls.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/cls.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/config.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/container_process.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/container_process.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/dict.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/dict.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/environments.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/environments.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/experimental/ipython.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/file_io.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/file_io.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/file_pattern_matcher.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/functions.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/functions.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/gpu.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/image.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/image.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/io_streams.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/io_streams.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/mount.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/mount.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/network_file_system.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/network_file_system.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/object.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/object.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/output.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/parallel_map.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/parallel_map.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/partial_function.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/partial_function.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/proxy.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/proxy.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/py.typed +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/queue.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/queue.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/requirements/2023.12.312.txt +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/requirements/2023.12.txt +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/requirements/2024.04.txt +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/requirements/2024.10.txt +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/requirements/2025.06.txt +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/requirements/PREVIEW.txt +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/requirements/README.md +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/requirements/base-images.json +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/retries.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/runner.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/runner.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/running_app.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/schedule.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/scheduler_placement.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/secret.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/secret.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/serving.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/serving.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/snapshot.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/snapshot.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/stream_type.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/token_flow.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/token_flow.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/volume.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal/volume.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal.egg-info/requires.txt +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal.egg-info/top_level.txt +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_docs/__init__.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/__init__.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/api.proto +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/api_grpc.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/api_pb2.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/modal_options_grpc.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/options.proto +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/options_grpc.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/options_pb2.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/options_pb2.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/options_pb2_grpc.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/options_pb2_grpc.pyi +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_proto/py.typed +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/modal_version/__main__.py +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/pyproject.toml +0 -0
- {modal-1.1.1.dev7 → modal-1.1.1.dev10}/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.1.
|
|
36
|
+
version: str = "1.1.1.dev10",
|
|
37
37
|
):
|
|
38
38
|
"""mdmd:hidden
|
|
39
39
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -163,7 +163,7 @@ class Client:
|
|
|
163
163
|
server_url: str,
|
|
164
164
|
client_type: int,
|
|
165
165
|
credentials: typing.Optional[tuple[str, str]],
|
|
166
|
-
version: str = "1.1.1.
|
|
166
|
+
version: str = "1.1.1.dev10",
|
|
167
167
|
):
|
|
168
168
|
"""mdmd:hidden
|
|
169
169
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -20,7 +20,7 @@ from ..cls import _Cls, _Obj
|
|
|
20
20
|
from ..exception import InvalidError
|
|
21
21
|
from ..image import DockerfileSpec, ImageBuilderVersion, _Image, _ImageRegistryConfig
|
|
22
22
|
from ..secret import _Secret
|
|
23
|
-
from .flash import flash_forward, flash_prometheus_autoscaler # noqa: F401
|
|
23
|
+
from .flash import flash_forward, flash_get_containers, flash_prometheus_autoscaler # noqa: F401
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def stop_fetching_inputs():
|
|
@@ -447,3 +447,20 @@ async def flash_prometheus_autoscaler(
|
|
|
447
447
|
)
|
|
448
448
|
await autoscaler.start()
|
|
449
449
|
return autoscaler
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
@synchronizer.create_blocking
|
|
453
|
+
async def flash_get_containers(app_name: str, cls_name: str) -> list[dict[str, Any]]:
|
|
454
|
+
"""
|
|
455
|
+
Return a list of flash containers for a deployed Flash service.
|
|
456
|
+
|
|
457
|
+
This is a highly experimental method that can break or be removed at any time without warning.
|
|
458
|
+
Do not use this method unless explicitly instructed to do so by Modal support.
|
|
459
|
+
"""
|
|
460
|
+
client = await _Client.from_env()
|
|
461
|
+
fn = _Cls.from_name(app_name, cls_name)._class_service_function
|
|
462
|
+
assert fn is not None
|
|
463
|
+
await fn.hydrate(client=client)
|
|
464
|
+
req = api_pb2.FlashContainerListRequest(function_id=fn.object_id)
|
|
465
|
+
resp = await retry_transient_errors(client.stub.FlashContainerList, req)
|
|
466
|
+
return resp.containers
|
|
@@ -250,3 +250,22 @@ class __flash_prometheus_autoscaler_spec(typing_extensions.Protocol):
|
|
|
250
250
|
...
|
|
251
251
|
|
|
252
252
|
flash_prometheus_autoscaler: __flash_prometheus_autoscaler_spec
|
|
253
|
+
|
|
254
|
+
class __flash_get_containers_spec(typing_extensions.Protocol):
|
|
255
|
+
def __call__(self, /, app_name: str, cls_name: str) -> list[dict[str, typing.Any]]:
|
|
256
|
+
"""Return a list of flash containers for a deployed Flash service.
|
|
257
|
+
|
|
258
|
+
This is a highly experimental method that can break or be removed at any time without warning.
|
|
259
|
+
Do not use this method unless explicitly instructed to do so by Modal support.
|
|
260
|
+
"""
|
|
261
|
+
...
|
|
262
|
+
|
|
263
|
+
async def aio(self, /, app_name: str, cls_name: str) -> list[dict[str, typing.Any]]:
|
|
264
|
+
"""Return a list of flash containers for a deployed Flash service.
|
|
265
|
+
|
|
266
|
+
This is a highly experimental method that can break or be removed at any time without warning.
|
|
267
|
+
Do not use this method unless explicitly instructed to do so by Modal support.
|
|
268
|
+
"""
|
|
269
|
+
...
|
|
270
|
+
|
|
271
|
+
flash_get_containers: __flash_get_containers_spec
|
|
@@ -27,7 +27,7 @@ from ._utils.mount_utils import validate_network_file_systems, validate_volumes
|
|
|
27
27
|
from .client import _Client
|
|
28
28
|
from .config import config
|
|
29
29
|
from .container_process import _ContainerProcess
|
|
30
|
-
from .exception import ExecutionError, InvalidError, SandboxTerminatedError, SandboxTimeoutError
|
|
30
|
+
from .exception import AlreadyExistsError, ExecutionError, InvalidError, SandboxTerminatedError, SandboxTimeoutError
|
|
31
31
|
from .file_io import FileWatchEvent, FileWatchEventType, _FileIO
|
|
32
32
|
from .gpu import GPU_T
|
|
33
33
|
from .image import _Image
|
|
@@ -236,7 +236,12 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
236
236
|
)
|
|
237
237
|
|
|
238
238
|
create_req = api_pb2.SandboxCreateRequest(app_id=resolver.app_id, definition=definition)
|
|
239
|
-
|
|
239
|
+
try:
|
|
240
|
+
create_resp = await retry_transient_errors(resolver.client.stub.SandboxCreate, create_req)
|
|
241
|
+
except GRPCError as exc:
|
|
242
|
+
if exc.status == Status.ALREADY_EXISTS:
|
|
243
|
+
raise AlreadyExistsError(exc.message)
|
|
244
|
+
raise exc
|
|
240
245
|
|
|
241
246
|
sandbox_id = create_resp.sandbox_id
|
|
242
247
|
self._hydrate(sandbox_id, resolver.client, None)
|
|
@@ -475,8 +480,8 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
475
480
|
) -> "_Sandbox":
|
|
476
481
|
"""Get a running Sandbox by name from the given app.
|
|
477
482
|
|
|
478
|
-
Raises
|
|
479
|
-
is the `name` argument passed to `Sandbox.create`.
|
|
483
|
+
Raises a modal.exception.NotFoundError if no running sandbox is found with the given name.
|
|
484
|
+
A Sandbox's name is the `name` argument passed to `Sandbox.create`.
|
|
480
485
|
"""
|
|
481
486
|
if client is None:
|
|
482
487
|
client = await _Client.from_env()
|
|
@@ -786,10 +791,15 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
786
791
|
sandbox_name_override=name,
|
|
787
792
|
sandbox_name_override_type=api_pb2.SandboxRestoreRequest.SANDBOX_NAME_OVERRIDE_TYPE_STRING,
|
|
788
793
|
)
|
|
794
|
+
try:
|
|
795
|
+
restore_resp: api_pb2.SandboxRestoreResponse = await retry_transient_errors(
|
|
796
|
+
client.stub.SandboxRestore, restore_req
|
|
797
|
+
)
|
|
798
|
+
except GRPCError as exc:
|
|
799
|
+
if exc.status == Status.ALREADY_EXISTS:
|
|
800
|
+
raise AlreadyExistsError(exc.message)
|
|
801
|
+
raise exc
|
|
789
802
|
|
|
790
|
-
restore_resp: api_pb2.SandboxRestoreResponse = await retry_transient_errors(
|
|
791
|
-
client.stub.SandboxRestore, restore_req
|
|
792
|
-
)
|
|
793
803
|
sandbox = await _Sandbox.from_id(restore_resp.sandbox_id, client)
|
|
794
804
|
|
|
795
805
|
task_id_req = api_pb2.SandboxGetTaskIdRequest(
|
|
@@ -178,8 +178,8 @@ class _Sandbox(modal._object._Object):
|
|
|
178
178
|
) -> _Sandbox:
|
|
179
179
|
"""Get a running Sandbox by name from the given app.
|
|
180
180
|
|
|
181
|
-
Raises
|
|
182
|
-
is the `name` argument passed to `Sandbox.create`.
|
|
181
|
+
Raises a modal.exception.NotFoundError if no running sandbox is found with the given name.
|
|
182
|
+
A Sandbox's name is the `name` argument passed to `Sandbox.create`.
|
|
183
183
|
"""
|
|
184
184
|
...
|
|
185
185
|
|
|
@@ -588,8 +588,8 @@ class Sandbox(modal.object.Object):
|
|
|
588
588
|
) -> Sandbox:
|
|
589
589
|
"""Get a running Sandbox by name from the given app.
|
|
590
590
|
|
|
591
|
-
Raises
|
|
592
|
-
is the `name` argument passed to `Sandbox.create`.
|
|
591
|
+
Raises a modal.exception.NotFoundError if no running sandbox is found with the given name.
|
|
592
|
+
A Sandbox's name is the `name` argument passed to `Sandbox.create`.
|
|
593
593
|
"""
|
|
594
594
|
...
|
|
595
595
|
|
|
@@ -604,8 +604,8 @@ class Sandbox(modal.object.Object):
|
|
|
604
604
|
) -> Sandbox:
|
|
605
605
|
"""Get a running Sandbox by name from the given app.
|
|
606
606
|
|
|
607
|
-
Raises
|
|
608
|
-
is the `name` argument passed to `Sandbox.create`.
|
|
607
|
+
Raises a modal.exception.NotFoundError if no running sandbox is found with the given name.
|
|
608
|
+
A Sandbox's name is the `name` argument passed to `Sandbox.create`.
|
|
609
609
|
"""
|
|
610
610
|
...
|
|
611
611
|
|
|
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
|