modal 1.4.3.dev4__tar.gz → 1.4.3.dev6__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.3.dev4 → modal-1.4.3.dev6}/PKG-INFO +1 -1
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/client.pyi +2 -2
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/exception.py +4 -4
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/sandbox.py +29 -29
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_proto/api_pb2.py +662 -660
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_proto/api_pb2.pyi +19 -8
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_proto/task_command_router_pb2.py +14 -14
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_proto/task_command_router_pb2.pyi +5 -1
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_version/__init__.py +1 -1
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/LICENSE +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/README.md +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/__init__.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/__main__.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_billing.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_clustered_functions.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_clustered_functions.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_container_entrypoint.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_functions.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_grpc_client.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_ipython.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_load_context.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_location.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_logs.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_object.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_output/__init__.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_output/manager.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_output/pty.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_output/rich.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_output/status.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_partial_function.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_resolver.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_resources.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_runtime/__init__.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_runtime/asgi.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_runtime/execution_context.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_runtime/telemetry.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_serialization.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_server.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_traceback.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_tunnel.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_tunnel.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_type_manager.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/__init__.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/app_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/async_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/blob_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/browser_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/deprecation.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/docker_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/function_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/git_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/hash_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/http_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/logger.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/mount_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/name_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/package_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/shell_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_utils/time_utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_vendor/__init__.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_vendor/tblib.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_vendor/version.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/_watcher.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/app.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/app.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/billing.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/builder/2023.12.txt +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/builder/2024.04.txt +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/builder/2024.10.txt +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/builder/2025.06.txt +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/builder/README.md +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/builder/base-images.json +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/call_graph.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/__init__.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/_download.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/_help.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/_traceback.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/app.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/billing.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/bootstrap.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/changelog.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/cluster.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/config.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/container.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/dashboard.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/dict.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/entry_point.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/environment.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/import_refs.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/launch.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/logo.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/network_file_system.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/profile.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/programs/__init__.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/programs/vscode.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/queues.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/run.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/secret.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/selector.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/shell.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/token.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/utils.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cli/volume.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/client.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cls.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/cls.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/config.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/container_process.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/container_process.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/dict.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/dict.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/environments.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/environments.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/experimental/__init__.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/experimental/flash.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/experimental/flash.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/experimental/ipython.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/file_io.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/file_io.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/file_pattern_matcher.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/functions.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/functions.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/image.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/image.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/io_streams.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/io_streams.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/mount.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/mount.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/network_file_system.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/network_file_system.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/object.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/object.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/output.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/parallel_map.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/parallel_map.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/partial_function.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/partial_function.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/proxy.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/proxy.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/py.typed +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/queue.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/queue.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/retries.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/runner.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/runner.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/running_app.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/sandbox.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/sandbox_fs.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/sandbox_fs.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/schedule.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/scheduler_placement.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/secret.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/secret.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/server.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/server.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/serving.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/serving.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/snapshot.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/snapshot.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/stream_type.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/token_flow.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/token_flow.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/volume.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal/volume.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal.egg-info/requires.txt +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal.egg-info/top_level.txt +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_docs/__init__.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_proto/__init__.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_proto/api_grpc.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_proto/py.typed +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/modal_version/__main__.py +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/pyproject.toml +0 -0
- {modal-1.4.3.dev4 → modal-1.4.3.dev6}/setup.cfg +0 -0
|
@@ -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.3.
|
|
38
|
+
version: str = "1.4.3.dev6",
|
|
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.3.
|
|
178
|
+
version: str = "1.4.3.dev6",
|
|
179
179
|
):
|
|
180
180
|
"""mdmd:hidden
|
|
181
181
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -90,7 +90,7 @@ class _GRPCErrorWrapper(grpclib.GRPCError):
|
|
|
90
90
|
def __repr__(self) -> str:
|
|
91
91
|
return f"{type(self).__name__}({self._message!r})"
|
|
92
92
|
|
|
93
|
-
def
|
|
93
|
+
def _attribute_warning(self) -> None:
|
|
94
94
|
from ._utils.deprecation import deprecation_warning # Avoid circular import
|
|
95
95
|
|
|
96
96
|
exc_type = type(self).__name__
|
|
@@ -104,7 +104,7 @@ class _GRPCErrorWrapper(grpclib.GRPCError):
|
|
|
104
104
|
|
|
105
105
|
@property
|
|
106
106
|
def message(self) -> str:
|
|
107
|
-
self.
|
|
107
|
+
self._attribute_warning()
|
|
108
108
|
return self._grpc_message
|
|
109
109
|
|
|
110
110
|
@message.setter
|
|
@@ -113,7 +113,7 @@ class _GRPCErrorWrapper(grpclib.GRPCError):
|
|
|
113
113
|
|
|
114
114
|
@property
|
|
115
115
|
def status(self) -> grpclib.Status:
|
|
116
|
-
self.
|
|
116
|
+
self._attribute_warning()
|
|
117
117
|
return self._grpc_status
|
|
118
118
|
|
|
119
119
|
@status.setter
|
|
@@ -122,7 +122,7 @@ class _GRPCErrorWrapper(grpclib.GRPCError):
|
|
|
122
122
|
|
|
123
123
|
@property
|
|
124
124
|
def details(self) -> Any:
|
|
125
|
-
self.
|
|
125
|
+
self._attribute_warning()
|
|
126
126
|
return self._grpc_details
|
|
127
127
|
|
|
128
128
|
@details.setter
|
|
@@ -268,22 +268,28 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
268
268
|
if pty:
|
|
269
269
|
pty_info = _Sandbox._default_pty_info()
|
|
270
270
|
|
|
271
|
-
def
|
|
272
|
-
|
|
271
|
+
async def _load(
|
|
272
|
+
self: _Sandbox, resolver: Resolver, load_context: LoadContext, _existing_object_id: Optional[str]
|
|
273
|
+
):
|
|
274
|
+
# An already-hydrated image (e.g. one returned by
|
|
275
|
+
# `Sandbox.snapshot_directory`) is skipped — there's nothing to load.
|
|
276
|
+
dep_tasks: list = []
|
|
277
|
+
if not image._is_hydrated:
|
|
278
|
+
dep_tasks.append(resolver.load(image, load_context))
|
|
279
|
+
for dep in list(mounts) + list(secrets):
|
|
280
|
+
dep_tasks.append(resolver.load(dep, load_context))
|
|
273
281
|
for _, vol in validated_network_file_systems:
|
|
274
|
-
|
|
282
|
+
dep_tasks.append(resolver.load(vol, load_context))
|
|
275
283
|
for _, vol in validated_volumes:
|
|
276
|
-
|
|
284
|
+
dep_tasks.append(resolver.load(vol, load_context))
|
|
277
285
|
for _, cloud_bucket_mount in cloud_bucket_mounts:
|
|
278
286
|
if cloud_bucket_mount.secret:
|
|
279
|
-
|
|
287
|
+
dep_tasks.append(resolver.load(cloud_bucket_mount.secret, load_context))
|
|
280
288
|
if proxy:
|
|
281
|
-
|
|
282
|
-
|
|
289
|
+
dep_tasks.append(resolver.load(proxy, load_context))
|
|
290
|
+
if dep_tasks:
|
|
291
|
+
await asyncio.gather(*dep_tasks)
|
|
283
292
|
|
|
284
|
-
async def _load(
|
|
285
|
-
self: _Sandbox, resolver: Resolver, load_context: LoadContext, _existing_object_id: Optional[str]
|
|
286
|
-
):
|
|
287
293
|
# Validate that the same volume (by object_id) isn't mounted at multiple paths
|
|
288
294
|
validate_volumes_by_object_id(validated_volumes)
|
|
289
295
|
|
|
@@ -363,7 +369,7 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
363
369
|
sandbox_id = create_resp.sandbox_id
|
|
364
370
|
self._hydrate(sandbox_id, load_context.client, None)
|
|
365
371
|
|
|
366
|
-
return _Sandbox._from_loader(_load, "Sandbox()",
|
|
372
|
+
return _Sandbox._from_loader(_load, "Sandbox()", load_context_overrides=LoadContext.empty())
|
|
367
373
|
|
|
368
374
|
@staticmethod
|
|
369
375
|
async def create(
|
|
@@ -689,12 +695,17 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
689
695
|
allowed_cidrs=cidr_allowlist,
|
|
690
696
|
)
|
|
691
697
|
|
|
692
|
-
def _deps() -> list[_Object]:
|
|
693
|
-
return [image] + list(secrets)
|
|
694
|
-
|
|
695
698
|
async def _load(
|
|
696
699
|
self: _Sandbox, resolver: Resolver, load_context: LoadContext, _existing_object_id: Optional[str]
|
|
697
700
|
):
|
|
701
|
+
dep_tasks: list = []
|
|
702
|
+
if not image._is_hydrated:
|
|
703
|
+
dep_tasks.append(resolver.load(image, load_context))
|
|
704
|
+
for secret in secrets:
|
|
705
|
+
dep_tasks.append(resolver.load(secret, load_context))
|
|
706
|
+
if dep_tasks:
|
|
707
|
+
await asyncio.gather(*dep_tasks)
|
|
708
|
+
|
|
698
709
|
definition = api_pb2.Sandbox(
|
|
699
710
|
entrypoint_args=args,
|
|
700
711
|
image_id=image.object_id,
|
|
@@ -732,7 +743,7 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
732
743
|
for t in create_resp.tunnels
|
|
733
744
|
}
|
|
734
745
|
|
|
735
|
-
obj = _Sandbox._from_loader(_load, "Sandbox()",
|
|
746
|
+
obj = _Sandbox._from_loader(_load, "Sandbox()", load_context_overrides=LoadContext.empty())
|
|
736
747
|
|
|
737
748
|
app_id: Optional[str] = None
|
|
738
749
|
app_client: Optional[_Client] = None
|
|
@@ -906,19 +917,7 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
906
917
|
if resp.result.status != api_pb2.GenericResult.GENERIC_STATUS_SUCCESS:
|
|
907
918
|
raise ExecutionError(resp.result.exception)
|
|
908
919
|
|
|
909
|
-
image_id
|
|
910
|
-
metadata = resp.image_metadata
|
|
911
|
-
|
|
912
|
-
async def _load(self: _Image, resolver: Resolver, load_context: LoadContext, existing_object_id: Optional[str]):
|
|
913
|
-
# no need to hydrate again since we do it eagerly below
|
|
914
|
-
pass
|
|
915
|
-
|
|
916
|
-
rep = "Image()"
|
|
917
|
-
# TODO: use ._new_hydrated instead
|
|
918
|
-
image = _Image._from_loader(_load, rep, hydrate_lazily=True, load_context_overrides=LoadContext.empty())
|
|
919
|
-
image._hydrate(image_id, self._client, metadata) # hydrating eagerly since we have all of the data
|
|
920
|
-
|
|
921
|
-
return image
|
|
920
|
+
return _Image._new_hydrated(resp.image_id, self._client, resp.image_metadata)
|
|
922
921
|
|
|
923
922
|
async def mount_image(self, path: Union[PurePosixPath, str], image: _Image):
|
|
924
923
|
"""Mount an Image at a specified path in a running Sandbox.
|
|
@@ -1032,7 +1031,8 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
1032
1031
|
raise InvalidError(f"Snapshot path must be absolute; got: {posix_path}")
|
|
1033
1032
|
path_bytes = posix_path.as_posix().encode("utf8")
|
|
1034
1033
|
|
|
1035
|
-
|
|
1034
|
+
snapshot_id = str(uuid.uuid4())
|
|
1035
|
+
req = sr_pb2.TaskSnapshotDirectoryRequest(task_id=task_id, path=path_bytes, snapshot_id=snapshot_id)
|
|
1036
1036
|
res = await command_router_client.snapshot_directory(req)
|
|
1037
1037
|
return _Image._new_hydrated(res.image_id, self._client, None)
|
|
1038
1038
|
|