modal 1.1.5.dev61__tar.gz → 1.1.5.dev63__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.5.dev61 → modal-1.1.5.dev63}/PKG-INFO +1 -1
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/run.py +27 -13
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/client.pyi +2 -2
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_version/__init__.py +1 -1
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/LICENSE +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/README.md +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/__init__.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/__main__.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_clustered_functions.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_clustered_functions.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_container_entrypoint.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_functions.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_ipython.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_location.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_object.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_output.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_partial_function.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_pty.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_resolver.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_resources.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/__init__.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/asgi.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/execution_context.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/telemetry.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_serialization.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_traceback.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_tunnel.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_tunnel.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_type_manager.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/__init__.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/app_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/async_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/blob_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/deprecation.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/docker_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/function_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/git_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/hash_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/http_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/logger.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/mount_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/name_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/package_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/shell_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/time_utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_vendor/__init__.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_vendor/tblib.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_watcher.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/app.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/app.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/2023.12.txt +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/2024.04.txt +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/2024.10.txt +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/2025.06.txt +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/README.md +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/base-images.json +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/call_graph.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/__init__.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/_download.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/_traceback.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/app.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/cluster.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/config.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/container.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/dict.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/entry_point.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/environment.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/import_refs.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/launch.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/network_file_system.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/profile.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/programs/__init__.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/programs/launch_instance_ssh.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/programs/run_marimo.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/programs/vscode.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/queues.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/secret.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/token.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/utils.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/volume.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/client.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cls.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cls.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/config.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/container_process.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/container_process.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/dict.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/dict.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/environments.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/environments.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/exception.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/experimental/__init__.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/experimental/flash.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/experimental/flash.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/experimental/ipython.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/file_io.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/file_io.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/file_pattern_matcher.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/functions.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/functions.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/gpu.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/image.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/image.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/io_streams.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/io_streams.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/mount.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/mount.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/network_file_system.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/network_file_system.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/object.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/object.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/output.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/parallel_map.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/parallel_map.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/partial_function.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/partial_function.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/proxy.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/proxy.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/py.typed +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/queue.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/queue.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/retries.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/runner.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/runner.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/running_app.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/sandbox.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/sandbox.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/schedule.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/scheduler_placement.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/secret.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/secret.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/serving.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/serving.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/snapshot.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/snapshot.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/stream_type.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/token_flow.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/token_flow.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/volume.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/volume.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal.egg-info/requires.txt +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal.egg-info/top_level.txt +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_docs/__init__.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/__init__.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/api.proto +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/api_grpc.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/api_pb2.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/modal_options_grpc.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/options.proto +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/options_grpc.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/options_pb2.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/options_pb2.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/options_pb2_grpc.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/options_pb2_grpc.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/py.typed +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/sandbox_router.proto +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/sandbox_router_grpc.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/sandbox_router_pb2.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/sandbox_router_pb2.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/sandbox_router_pb2_grpc.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/sandbox_router_pb2_grpc.pyi +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_version/__main__.py +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/pyproject.toml +0 -0
- {modal-1.1.5.dev61 → modal-1.1.5.dev63}/setup.cfg +0 -0
|
@@ -22,7 +22,7 @@ from ..app import App, LocalEntrypoint
|
|
|
22
22
|
from ..cls import _get_class_constructor_signature
|
|
23
23
|
from ..config import config
|
|
24
24
|
from ..environments import ensure_env
|
|
25
|
-
from ..exception import ExecutionError, InvalidError, _CliUserExecutionError
|
|
25
|
+
from ..exception import ExecutionError, InvalidError, NotFoundError, _CliUserExecutionError
|
|
26
26
|
from ..functions import Function
|
|
27
27
|
from ..image import Image
|
|
28
28
|
from ..output import enable_output
|
|
@@ -516,13 +516,12 @@ def serve(
|
|
|
516
516
|
|
|
517
517
|
|
|
518
518
|
def shell(
|
|
519
|
-
|
|
519
|
+
ref: Optional[str] = typer.Argument(
|
|
520
520
|
default=None,
|
|
521
521
|
help=(
|
|
522
|
-
"ID of running container, or path to a Python file containing
|
|
523
|
-
" Can also include a
|
|
522
|
+
"ID of running container or Sandbox, or path to a Python file containing an App."
|
|
523
|
+
" Can also include a Function specifier, like `module.py::func`, if the file defines multiple Functions."
|
|
524
524
|
),
|
|
525
|
-
metavar="REF",
|
|
526
525
|
),
|
|
527
526
|
cmd: str = typer.Option("/bin/bash", "-c", "--cmd", help="Command to run inside the Modal image."),
|
|
528
527
|
env: str = ENV_OPTION,
|
|
@@ -602,6 +601,12 @@ def shell(
|
|
|
602
601
|
```
|
|
603
602
|
modal shell hello_world.py -c 'uv pip list' > env.txt
|
|
604
603
|
```
|
|
604
|
+
|
|
605
|
+
Connect to a running Sandbox by ID:
|
|
606
|
+
|
|
607
|
+
```
|
|
608
|
+
modal shell sb-abc123xyz
|
|
609
|
+
```
|
|
605
610
|
"""
|
|
606
611
|
env = ensure_env(env)
|
|
607
612
|
|
|
@@ -613,19 +618,28 @@ def shell(
|
|
|
613
618
|
|
|
614
619
|
app = App("modal shell")
|
|
615
620
|
|
|
616
|
-
if
|
|
621
|
+
if ref is not None:
|
|
622
|
+
# `modal shell` with a sandbox ID gets the task_id, that's then handled by the `ta-*` flow below.
|
|
623
|
+
if ref.startswith("sb-") and len(ref[3:]) > 0 and ref[3:].isalnum():
|
|
624
|
+
from ..sandbox import Sandbox
|
|
625
|
+
|
|
626
|
+
try:
|
|
627
|
+
sandbox = Sandbox.from_id(ref)
|
|
628
|
+
task_id = sandbox._get_task_id()
|
|
629
|
+
ref = task_id
|
|
630
|
+
except NotFoundError as e:
|
|
631
|
+
raise ClickException(f"Sandbox '{ref}' not found")
|
|
632
|
+
except Exception as e:
|
|
633
|
+
raise ClickException(f"Error connecting to sandbox '{ref}': {str(e)}")
|
|
634
|
+
|
|
617
635
|
# `modal shell` with a container ID is a special case, alias for `modal container exec`.
|
|
618
|
-
if (
|
|
619
|
-
container_or_function.startswith("ta-")
|
|
620
|
-
and len(container_or_function[3:]) > 0
|
|
621
|
-
and container_or_function[3:].isalnum()
|
|
622
|
-
):
|
|
636
|
+
if ref.startswith("ta-") and len(ref[3:]) > 0 and ref[3:].isalnum():
|
|
623
637
|
from .container import exec
|
|
624
638
|
|
|
625
|
-
exec(container_id=
|
|
639
|
+
exec(container_id=ref, command=shlex.split(cmd), pty=pty)
|
|
626
640
|
return
|
|
627
641
|
|
|
628
|
-
import_ref = parse_import_ref(
|
|
642
|
+
import_ref = parse_import_ref(ref, use_module_mode=use_module_mode)
|
|
629
643
|
runnable, all_usable_commands = import_and_filter(
|
|
630
644
|
import_ref, base_cmd="modal shell", accept_local_entrypoint=False, accept_webhook=True
|
|
631
645
|
)
|
|
@@ -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.5.
|
|
36
|
+
version: str = "1.1.5.dev63",
|
|
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.5.
|
|
167
|
+
version: str = "1.1.5.dev63",
|
|
168
168
|
):
|
|
169
169
|
"""mdmd:hidden
|
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|