modal 1.4.3.dev5__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.dev5 → modal-1.4.3.dev6}/PKG-INFO +1 -1
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/client.pyi +2 -2
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/exception.py +4 -4
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/functions.pyi +6 -6
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/sandbox.py +29 -29
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_proto/api_pb2.py +396 -394
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_proto/api_pb2.pyi +1 -4
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_proto/task_command_router_pb2.py +14 -14
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_proto/task_command_router_pb2.pyi +5 -1
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_version/__init__.py +1 -1
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/LICENSE +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/README.md +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/__init__.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/__main__.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_billing.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_clustered_functions.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_clustered_functions.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_container_entrypoint.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_functions.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_grpc_client.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_ipython.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_load_context.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_location.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_logs.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_object.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_output/__init__.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_output/manager.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_output/pty.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_output/rich.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_output/status.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_partial_function.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_resolver.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_resources.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_runtime/__init__.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_runtime/asgi.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_runtime/execution_context.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_runtime/telemetry.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_serialization.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_server.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_traceback.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_tunnel.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_tunnel.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_type_manager.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/__init__.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/app_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/async_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/blob_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/browser_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/deprecation.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/docker_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/function_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/git_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/hash_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/http_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/logger.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/mount_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/name_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/package_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/shell_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_utils/time_utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_vendor/__init__.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_vendor/tblib.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_vendor/version.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/_watcher.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/app.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/app.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/billing.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/builder/2023.12.txt +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/builder/2024.04.txt +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/builder/2024.10.txt +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/builder/2025.06.txt +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/builder/README.md +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/builder/base-images.json +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/call_graph.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/__init__.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/_download.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/_help.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/_traceback.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/app.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/billing.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/bootstrap.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/changelog.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/cluster.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/config.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/container.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/dashboard.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/dict.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/entry_point.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/environment.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/import_refs.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/launch.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/logo.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/network_file_system.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/profile.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/programs/__init__.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/programs/vscode.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/queues.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/run.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/secret.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/selector.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/shell.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/token.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/utils.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cli/volume.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/client.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cls.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/cls.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/config.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/container_process.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/container_process.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/dict.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/dict.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/environments.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/environments.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/experimental/__init__.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/experimental/flash.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/experimental/flash.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/experimental/ipython.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/file_io.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/file_io.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/file_pattern_matcher.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/functions.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/image.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/image.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/io_streams.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/io_streams.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/mount.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/mount.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/network_file_system.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/network_file_system.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/object.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/object.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/output.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/parallel_map.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/parallel_map.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/partial_function.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/partial_function.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/proxy.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/proxy.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/py.typed +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/queue.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/queue.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/retries.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/runner.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/runner.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/running_app.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/sandbox.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/sandbox_fs.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/sandbox_fs.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/schedule.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/scheduler_placement.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/secret.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/secret.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/server.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/server.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/serving.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/serving.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/snapshot.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/snapshot.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/stream_type.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/token_flow.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/token_flow.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/volume.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal/volume.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal.egg-info/requires.txt +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal.egg-info/top_level.txt +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_docs/__init__.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_proto/__init__.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_proto/api_grpc.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_proto/py.typed +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/modal_version/__main__.py +0 -0
- {modal-1.4.3.dev5 → modal-1.4.3.dev6}/pyproject.toml +0 -0
- {modal-1.4.3.dev5 → 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
|
|
@@ -347,7 +347,7 @@ class Function(
|
|
|
347
347
|
|
|
348
348
|
_call_generator: ___call_generator_spec
|
|
349
349
|
|
|
350
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
350
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
351
351
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
352
352
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
353
353
|
...
|
|
@@ -356,7 +356,7 @@ class Function(
|
|
|
356
356
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
357
357
|
...
|
|
358
358
|
|
|
359
|
-
remote: __remote_spec[modal._functions.
|
|
359
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P]
|
|
360
360
|
|
|
361
361
|
class __remote_gen_spec(typing_extensions.Protocol):
|
|
362
362
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -383,7 +383,7 @@ class Function(
|
|
|
383
383
|
"""
|
|
384
384
|
...
|
|
385
385
|
|
|
386
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
386
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
387
387
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
388
388
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
389
389
|
|
|
@@ -406,7 +406,7 @@ class Function(
|
|
|
406
406
|
"""
|
|
407
407
|
...
|
|
408
408
|
|
|
409
|
-
_experimental_spawn: ___experimental_spawn_spec[modal._functions.
|
|
409
|
+
_experimental_spawn: ___experimental_spawn_spec[modal._functions.ReturnType, modal._functions.P]
|
|
410
410
|
|
|
411
411
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
|
|
412
412
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
|
|
@@ -414,7 +414,7 @@ class Function(
|
|
|
414
414
|
|
|
415
415
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
|
|
416
416
|
|
|
417
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
417
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
418
418
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
419
419
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
420
420
|
|
|
@@ -435,7 +435,7 @@ class Function(
|
|
|
435
435
|
"""
|
|
436
436
|
...
|
|
437
437
|
|
|
438
|
-
spawn: __spawn_spec[modal._functions.
|
|
438
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P]
|
|
439
439
|
|
|
440
440
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
|
441
441
|
"""Return the inner Python object wrapped by this Modal Function."""
|
|
@@ -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
|
|