modal 1.4.2.dev12__tar.gz → 1.4.2.dev13__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.4.2.dev12 → modal-1.4.2.dev13}/PKG-INFO +1 -1
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/task_command_router_client.py +3 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/client.pyi +2 -2
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/sandbox.py +23 -6
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/sandbox.pyi +3 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_version/__init__.py +1 -1
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/LICENSE +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/README.md +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/__init__.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/__main__.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_billing.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_clustered_functions.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_clustered_functions.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_container_entrypoint.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_functions.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_grpc_client.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_ipython.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_load_context.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_location.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_logs.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_object.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_output/__init__.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_output/manager.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_output/pty.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_output/rich.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_output/status.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_partial_function.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_resolver.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_resources.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_runtime/__init__.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_runtime/asgi.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_runtime/execution_context.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_runtime/telemetry.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_serialization.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_server.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_traceback.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_tunnel.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_tunnel.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_type_manager.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/__init__.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/app_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/async_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/blob_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/browser_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/deprecation.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/docker_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/function_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/git_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/hash_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/http_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/logger.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/mount_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/name_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/package_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/shell_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_utils/time_utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_vendor/__init__.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_vendor/tblib.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_vendor/version.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/_watcher.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/app.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/app.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/billing.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/builder/2023.12.txt +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/builder/2024.04.txt +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/builder/2024.10.txt +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/builder/2025.06.txt +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/builder/README.md +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/builder/base-images.json +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/call_graph.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/__init__.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/_download.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/_traceback.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/app.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/billing.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/changelog.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/cluster.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/config.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/container.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/dashboard.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/dict.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/entry_point.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/environment.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/import_refs.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/launch.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/network_file_system.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/profile.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/programs/__init__.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/programs/vscode.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/queues.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/run.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/secret.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/selector.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/shell.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/token.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/utils.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cli/volume.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/client.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cls.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/cls.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/config.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/container_process.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/container_process.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/dict.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/dict.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/environments.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/environments.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/exception.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/experimental/__init__.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/experimental/flash.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/experimental/flash.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/experimental/ipython.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/file_io.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/file_io.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/file_pattern_matcher.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/functions.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/functions.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/image.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/image.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/io_streams.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/io_streams.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/mount.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/mount.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/network_file_system.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/network_file_system.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/object.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/object.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/output.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/parallel_map.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/parallel_map.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/partial_function.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/partial_function.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/proxy.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/proxy.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/py.typed +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/queue.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/queue.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/retries.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/runner.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/runner.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/running_app.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/sandbox_fs.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/sandbox_fs.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/schedule.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/scheduler_placement.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/secret.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/secret.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/server.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/server.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/serving.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/serving.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/snapshot.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/snapshot.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/stream_type.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/token_flow.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/token_flow.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/volume.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal/volume.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal.egg-info/requires.txt +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal.egg-info/top_level.txt +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_docs/__init__.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_proto/__init__.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_proto/api_grpc.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_proto/api_pb2.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_proto/py.typed +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/modal_version/__main__.py +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/pyproject.toml +0 -0
- {modal-1.4.2.dev12 → modal-1.4.2.dev13}/setup.cfg +0 -0
|
@@ -126,8 +126,11 @@ async def fetch_command_router_access_v2(
|
|
|
126
126
|
server_client, sandbox_id: str
|
|
127
127
|
) -> api_pb2.SandboxGetCommandRouterAccessResponse:
|
|
128
128
|
"""Fetch direct command router access info from Modal server for a V2 sandbox."""
|
|
129
|
+
assert server_client._auth_token_manager
|
|
130
|
+
auth_token = await server_client._auth_token_manager.get_token()
|
|
129
131
|
return await server_client.stub.SandboxGetCommandRouterAccess(
|
|
130
132
|
api_pb2.SandboxGetCommandRouterAccessRequest(sandbox_id=sandbox_id),
|
|
133
|
+
metadata=[("x-modal-auth-token", auth_token)],
|
|
131
134
|
)
|
|
132
135
|
|
|
133
136
|
|
|
@@ -35,7 +35,7 @@ class _Client:
|
|
|
35
35
|
server_url: str,
|
|
36
36
|
client_type: int,
|
|
37
37
|
credentials: typing.Optional[tuple[str, str]],
|
|
38
|
-
version: str = "1.4.2.
|
|
38
|
+
version: str = "1.4.2.dev13",
|
|
39
39
|
):
|
|
40
40
|
"""mdmd:hidden
|
|
41
41
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -175,7 +175,7 @@ class Client:
|
|
|
175
175
|
server_url: str,
|
|
176
176
|
client_type: int,
|
|
177
177
|
credentials: typing.Optional[tuple[str, str]],
|
|
178
|
-
version: str = "1.4.2.
|
|
178
|
+
version: str = "1.4.2.dev13",
|
|
179
179
|
):
|
|
180
180
|
"""mdmd:hidden
|
|
181
181
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -1045,7 +1045,12 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
1045
1045
|
req = api_pb2.SandboxWaitRequest(sandbox_id=self.object_id, timeout=10)
|
|
1046
1046
|
# Use the private __client to allow `wait` to work with a detached sandbox
|
|
1047
1047
|
stub = self.__client.stub
|
|
1048
|
-
|
|
1048
|
+
if self._is_v2:
|
|
1049
|
+
assert self.__client._auth_token_manager
|
|
1050
|
+
auth_token = await self.__client._auth_token_manager.get_token()
|
|
1051
|
+
resp = await stub.SandboxWaitV2(req, metadata=[("x-modal-auth-token", auth_token)])
|
|
1052
|
+
else:
|
|
1053
|
+
resp = await stub.SandboxWait(req)
|
|
1049
1054
|
if resp.result.status:
|
|
1050
1055
|
logger.debug(f"Sandbox {self.object_id} wait completed with status {resp.result.status}")
|
|
1051
1056
|
self._result = resp.result
|
|
@@ -1187,7 +1192,12 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
1187
1192
|
|
|
1188
1193
|
req = api_pb2.SandboxWaitRequest(sandbox_id=self.object_id, timeout=0)
|
|
1189
1194
|
stub = self._client.stub
|
|
1190
|
-
|
|
1195
|
+
if self._is_v2:
|
|
1196
|
+
assert self._client._auth_token_manager
|
|
1197
|
+
auth_token = await self._client._auth_token_manager.get_token()
|
|
1198
|
+
resp = await stub.SandboxWaitV2(req, metadata=[("x-modal-auth-token", auth_token)])
|
|
1199
|
+
else:
|
|
1200
|
+
resp = await stub.SandboxWait(req)
|
|
1191
1201
|
|
|
1192
1202
|
if resp.result.status:
|
|
1193
1203
|
self._result = resp.result
|
|
@@ -1338,11 +1348,10 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
1338
1348
|
raise InvalidError(f"workdir must be an absolute path, got: {workdir}")
|
|
1339
1349
|
_validate_exec_args(args)
|
|
1340
1350
|
|
|
1341
|
-
secrets = secrets or []
|
|
1342
|
-
if
|
|
1343
|
-
secrets = [*secrets, _Secret.from_dict(env)]
|
|
1351
|
+
secrets = list(secrets or [])
|
|
1352
|
+
env_dict = {k: v for k, v in (env or {}).items() if v is not None}
|
|
1344
1353
|
|
|
1345
|
-
# Force secret resolution so we can pass the secret IDs to the backend.
|
|
1354
|
+
# Force explicit secret resolution so we can pass the secret IDs to the backend.
|
|
1346
1355
|
secret_coros = [secret.hydrate(client=self._client) for secret in secrets]
|
|
1347
1356
|
await TaskContext.gather(*secret_coros)
|
|
1348
1357
|
|
|
@@ -1355,6 +1364,7 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
1355
1364
|
"timeout": timeout,
|
|
1356
1365
|
"workdir": workdir,
|
|
1357
1366
|
"secret_ids": [secret.object_id for secret in secrets],
|
|
1367
|
+
"env": env_dict,
|
|
1358
1368
|
"text": text,
|
|
1359
1369
|
"bufsize": bufsize,
|
|
1360
1370
|
"runtime_debug": config.get("function_runtime_debug"),
|
|
@@ -1366,6 +1376,11 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
1366
1376
|
kwargs["command_router_client"] = command_router_client
|
|
1367
1377
|
return await self._exec_through_command_router(*args, **kwargs)
|
|
1368
1378
|
else:
|
|
1379
|
+
if env_dict:
|
|
1380
|
+
env_secret = _Secret.from_dict(env)
|
|
1381
|
+
await env_secret.hydrate(client=self._client)
|
|
1382
|
+
kwargs["secret_ids"] = [*kwargs["secret_ids"], env_secret.object_id]
|
|
1383
|
+
kwargs.pop("env", None)
|
|
1369
1384
|
return await self._exec_through_server(*args, **kwargs)
|
|
1370
1385
|
|
|
1371
1386
|
async def _exec_through_server(
|
|
@@ -1421,6 +1436,7 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
1421
1436
|
timeout: Optional[int] = None,
|
|
1422
1437
|
workdir: Optional[str] = None,
|
|
1423
1438
|
secret_ids: Optional[Collection[str]] = None,
|
|
1439
|
+
env: Optional[dict[str, str]] = None,
|
|
1424
1440
|
text: bool = True,
|
|
1425
1441
|
bufsize: Literal[-1, 1] = -1,
|
|
1426
1442
|
runtime_debug: bool = False,
|
|
@@ -1463,6 +1479,7 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
1463
1479
|
pty_info=pty_info,
|
|
1464
1480
|
runtime_debug=runtime_debug,
|
|
1465
1481
|
container_id=container_id or "",
|
|
1482
|
+
env=env or {},
|
|
1466
1483
|
)
|
|
1467
1484
|
_ = await command_router_client.exec_start(start_req)
|
|
1468
1485
|
|
|
@@ -584,6 +584,7 @@ class _Sandbox(modal._object._Object):
|
|
|
584
584
|
timeout: typing.Optional[int] = None,
|
|
585
585
|
workdir: typing.Optional[str] = None,
|
|
586
586
|
secret_ids: typing.Optional[collections.abc.Collection[str]] = None,
|
|
587
|
+
env: typing.Optional[dict[str, str]] = None,
|
|
587
588
|
text: bool = True,
|
|
588
589
|
bufsize: typing.Literal[-1, 1] = -1,
|
|
589
590
|
runtime_debug: bool = False,
|
|
@@ -1814,6 +1815,7 @@ class Sandbox(modal.object.Object):
|
|
|
1814
1815
|
timeout: typing.Optional[int] = None,
|
|
1815
1816
|
workdir: typing.Optional[str] = None,
|
|
1816
1817
|
secret_ids: typing.Optional[collections.abc.Collection[str]] = None,
|
|
1818
|
+
env: typing.Optional[dict[str, str]] = None,
|
|
1817
1819
|
text: bool = True,
|
|
1818
1820
|
bufsize: typing.Literal[-1, 1] = -1,
|
|
1819
1821
|
runtime_debug: bool = False,
|
|
@@ -1836,6 +1838,7 @@ class Sandbox(modal.object.Object):
|
|
|
1836
1838
|
timeout: typing.Optional[int] = None,
|
|
1837
1839
|
workdir: typing.Optional[str] = None,
|
|
1838
1840
|
secret_ids: typing.Optional[collections.abc.Collection[str]] = None,
|
|
1841
|
+
env: typing.Optional[dict[str, str]] = None,
|
|
1839
1842
|
text: bool = True,
|
|
1840
1843
|
bufsize: typing.Literal[-1, 1] = -1,
|
|
1841
1844
|
runtime_debug: bool = False,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|