modal 1.4.1.dev3__tar.gz → 1.4.1.dev5__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.1.dev3 → modal-1.4.1.dev5}/PKG-INFO +2 -2
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/task_command_router_client.py +5 -1
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/import_refs.py +13 -4
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/shell.py +5 -1
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/client.py +1 -2
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/client.pyi +2 -2
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/dict.py +2 -1
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/dict.pyi +4 -2
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/queue.py +2 -1
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/queue.pyi +4 -2
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/secret.py +2 -1
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/secret.pyi +4 -2
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/volume.py +2 -1
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/volume.pyi +4 -2
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal.egg-info/PKG-INFO +2 -2
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal.egg-info/requires.txt +1 -1
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/api_grpc.py +16 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/api_pb2.py +375 -355
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/api_pb2.pyi +35 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/api_pb2_grpc.py +33 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/api_pb2_grpc.pyi +10 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/modal_api_grpc.py +1 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/task_command_router_pb2.py +43 -30
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/task_command_router_pb2.pyi +21 -1
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_version/__init__.py +1 -1
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/pyproject.toml +2 -2
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/LICENSE +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/README.md +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/__init__.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/__main__.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_billing.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_clustered_functions.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_clustered_functions.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_container_entrypoint.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_functions.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_grpc_client.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_ipython.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_load_context.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_location.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_logs.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_object.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_output/__init__.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_output/manager.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_output/pty.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_output/rich.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_output/status.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_partial_function.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_resolver.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_resources.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/__init__.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/asgi.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/execution_context.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/telemetry.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_serialization.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_server.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_traceback.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_tunnel.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_tunnel.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_type_manager.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/__init__.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/app_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/async_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/blob_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/browser_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/deprecation.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/docker_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/function_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/git_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/hash_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/http_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/logger.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/mount_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/name_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/package_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/shell_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/time_utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_vendor/__init__.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_vendor/tblib.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_vendor/version.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_watcher.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/app.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/app.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/billing.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/2023.12.txt +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/2024.04.txt +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/2024.10.txt +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/2025.06.txt +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/README.md +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/base-images.json +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/call_graph.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/__init__.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/_download.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/_traceback.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/app.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/billing.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/changelog.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/cluster.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/config.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/container.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/dashboard.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/dict.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/entry_point.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/environment.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/launch.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/network_file_system.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/profile.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/programs/__init__.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/programs/vscode.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/queues.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/run.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/secret.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/selector.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/token.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/utils.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/volume.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cls.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cls.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/config.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/container_process.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/container_process.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/environments.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/environments.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/exception.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/experimental/__init__.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/experimental/flash.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/experimental/flash.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/experimental/ipython.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/file_io.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/file_io.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/file_pattern_matcher.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/functions.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/functions.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/image.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/image.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/io_streams.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/io_streams.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/mount.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/mount.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/network_file_system.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/network_file_system.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/object.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/object.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/output.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/parallel_map.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/parallel_map.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/partial_function.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/partial_function.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/proxy.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/proxy.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/py.typed +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/retries.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/runner.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/runner.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/running_app.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/sandbox.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/sandbox.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/sandbox_fs.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/sandbox_fs.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/schedule.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/scheduler_placement.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/server.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/server.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/serving.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/serving.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/snapshot.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/snapshot.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/stream_type.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/token_flow.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/token_flow.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal.egg-info/top_level.txt +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/__init__.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/__init__.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/py.typed +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_version/__main__.py +0 -0
- {modal-1.4.1.dev3 → modal-1.4.1.dev5}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: modal
|
|
3
|
-
Version: 1.4.1.
|
|
3
|
+
Version: 1.4.1.dev5
|
|
4
4
|
Summary: Python client library for Modal
|
|
5
5
|
Author-email: Modal Labs <support@modal.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -23,7 +23,7 @@ Requires-Dist: grpclib<0.4.10,>=0.4.7; python_version < "3.14"
|
|
|
23
23
|
Requires-Dist: grpclib<0.4.10,>=0.4.9; python_version >= "3.14"
|
|
24
24
|
Requires-Dist: protobuf!=4.24.0,<7.0,>=3.19
|
|
25
25
|
Requires-Dist: rich>=12.0.0
|
|
26
|
-
Requires-Dist: synchronicity~=0.
|
|
26
|
+
Requires-Dist: synchronicity~=0.12.0
|
|
27
27
|
Requires-Dist: toml
|
|
28
28
|
Requires-Dist: typer>=0.9
|
|
29
29
|
Requires-Dist: types-certifi
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import asyncio
|
|
3
3
|
import base64
|
|
4
4
|
import json
|
|
5
|
+
import socket
|
|
5
6
|
import ssl
|
|
6
7
|
import time
|
|
7
8
|
import urllib.parse
|
|
@@ -181,7 +182,10 @@ class TaskCommandRouterClient:
|
|
|
181
182
|
closed_error_message="Unable to perform operation on a detached sandbox",
|
|
182
183
|
)
|
|
183
184
|
|
|
184
|
-
|
|
185
|
+
try:
|
|
186
|
+
await _connect_channel(channel)
|
|
187
|
+
except socket.gaierror as exc:
|
|
188
|
+
raise ConnectionError(f"Could not resolve hostname '{host}': {exc}") from exc
|
|
185
189
|
loop = asyncio.get_running_loop()
|
|
186
190
|
jwt_refresh_lock = asyncio.Lock()
|
|
187
191
|
|
|
@@ -127,6 +127,7 @@ class AutoRunPriority:
|
|
|
127
127
|
|
|
128
128
|
def list_cli_commands(
|
|
129
129
|
module_members: dict[str, typing.Any],
|
|
130
|
+
include_service_functions: bool = False,
|
|
130
131
|
) -> list[CLICommand]:
|
|
131
132
|
"""
|
|
132
133
|
Extracts all runnables found either directly in the input module, or in any of the Apps listed in that module
|
|
@@ -149,8 +150,8 @@ def list_cli_commands(
|
|
|
149
150
|
all_runnables[local_entrypoint].append(f"{app_name}.{name}")
|
|
150
151
|
priorities[local_entrypoint] = AutoRunPriority.APP_LOCAL_ENTRYPOINT
|
|
151
152
|
for name, function in app.registered_functions.items():
|
|
152
|
-
if function.info.is_service_class():
|
|
153
|
-
continue # Skip class and server service functions
|
|
153
|
+
if function.info.is_service_class() and not include_service_functions:
|
|
154
|
+
continue # Skip class and server service functions for all commands except `modal shell`.
|
|
154
155
|
all_runnables[function].append(f"{app_name}.{name}")
|
|
155
156
|
priorities[function] = AutoRunPriority.APP_FUNCTION
|
|
156
157
|
for cls_name, cls in app.registered_classes.items():
|
|
@@ -322,7 +323,12 @@ def _get_runnable_app(runnable: Runnable) -> App:
|
|
|
322
323
|
|
|
323
324
|
|
|
324
325
|
def import_and_filter(
|
|
325
|
-
import_ref: ImportRef,
|
|
326
|
+
import_ref: ImportRef,
|
|
327
|
+
*,
|
|
328
|
+
base_cmd: str,
|
|
329
|
+
accept_local_entrypoint=True,
|
|
330
|
+
accept_webhook=False,
|
|
331
|
+
accept_service_functions=False,
|
|
326
332
|
) -> tuple[Optional[Runnable], list[CLICommand]]:
|
|
327
333
|
"""Takes a function ref string and returns a single determined "runnable" to use, and a list of all available
|
|
328
334
|
runnables.
|
|
@@ -339,7 +345,10 @@ def import_and_filter(
|
|
|
339
345
|
"""
|
|
340
346
|
# all commands:
|
|
341
347
|
module = import_file_or_module(import_ref, base_cmd)
|
|
342
|
-
cli_commands = list_cli_commands(
|
|
348
|
+
cli_commands = list_cli_commands(
|
|
349
|
+
dict(inspect.getmembers(module)),
|
|
350
|
+
include_service_functions=accept_service_functions,
|
|
351
|
+
)
|
|
343
352
|
|
|
344
353
|
# all commands that satisfy local entrypoint/accept webhook limitations AND object path prefix
|
|
345
354
|
|
|
@@ -142,7 +142,11 @@ def _start_shell_in_running_container(ref: str, cmd: str, pty: bool) -> None:
|
|
|
142
142
|
def _function_spec_from_ref(ref: str, use_module_mode: bool) -> _FunctionSpec:
|
|
143
143
|
import_ref = parse_import_ref(ref, use_module_mode=use_module_mode)
|
|
144
144
|
runnable, all_usable_commands = import_and_filter(
|
|
145
|
-
import_ref,
|
|
145
|
+
import_ref,
|
|
146
|
+
base_cmd="modal shell",
|
|
147
|
+
accept_local_entrypoint=False,
|
|
148
|
+
accept_webhook=True,
|
|
149
|
+
accept_service_functions=True,
|
|
146
150
|
)
|
|
147
151
|
if not runnable:
|
|
148
152
|
help_header = (
|
|
@@ -56,8 +56,7 @@ def _get_metadata(client_type: int, credentials: Optional[tuple[str, str]], vers
|
|
|
56
56
|
"x-modal-token-secret": token_secret,
|
|
57
57
|
}
|
|
58
58
|
)
|
|
59
|
-
agent_env
|
|
60
|
-
if agent_env:
|
|
59
|
+
if agent_env := _agent_environment():
|
|
61
60
|
metadata["x-modal-agent-harness"] = urllib.parse.quote(agent_env)
|
|
62
61
|
return metadata
|
|
63
62
|
|
|
@@ -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.1.
|
|
38
|
+
version: str = "1.4.1.dev5",
|
|
39
39
|
):
|
|
40
40
|
"""mdmd:hidden
|
|
41
41
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -171,7 +171,7 @@ class Client:
|
|
|
171
171
|
server_url: str,
|
|
172
172
|
client_type: int,
|
|
173
173
|
credentials: typing.Optional[tuple[str, str]],
|
|
174
|
-
version: str = "1.4.1.
|
|
174
|
+
version: str = "1.4.1.dev5",
|
|
175
175
|
):
|
|
176
176
|
"""mdmd:hidden
|
|
177
177
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -412,7 +412,8 @@ class _Dict(modal._object._Object):
|
|
|
412
412
|
...
|
|
413
413
|
|
|
414
414
|
@synchronicity.classproperty
|
|
415
|
-
|
|
415
|
+
@classmethod
|
|
416
|
+
def objects(cls) -> type[_DictManager]: ...
|
|
416
417
|
@property
|
|
417
418
|
def name(self) -> typing.Optional[str]: ...
|
|
418
419
|
def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
|
|
@@ -653,7 +654,8 @@ class Dict(modal.object.Object):
|
|
|
653
654
|
...
|
|
654
655
|
|
|
655
656
|
@synchronicity.classproperty
|
|
656
|
-
|
|
657
|
+
@classmethod
|
|
658
|
+
def objects(cls) -> type[DictManager]: ...
|
|
657
659
|
@property
|
|
658
660
|
def name(self) -> typing.Optional[str]: ...
|
|
659
661
|
def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
|
|
@@ -291,7 +291,8 @@ class _Queue(_Object, type_prefix="qu"):
|
|
|
291
291
|
raise RuntimeError("Queue() is not allowed. Please use `Queue.from_name(...)` or `Queue.ephemeral()` instead.")
|
|
292
292
|
|
|
293
293
|
@classproperty
|
|
294
|
-
|
|
294
|
+
@classmethod
|
|
295
|
+
def objects(cls) -> type[_QueueManager]:
|
|
295
296
|
return _QueueManager
|
|
296
297
|
|
|
297
298
|
@property
|
|
@@ -431,7 +431,8 @@ class _Queue(modal._object._Object):
|
|
|
431
431
|
...
|
|
432
432
|
|
|
433
433
|
@synchronicity.classproperty
|
|
434
|
-
|
|
434
|
+
@classmethod
|
|
435
|
+
def objects(cls) -> type[_QueueManager]: ...
|
|
435
436
|
@property
|
|
436
437
|
def name(self) -> typing.Optional[str]: ...
|
|
437
438
|
def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
|
|
@@ -726,7 +727,8 @@ class Queue(modal.object.Object):
|
|
|
726
727
|
...
|
|
727
728
|
|
|
728
729
|
@synchronicity.classproperty
|
|
729
|
-
|
|
730
|
+
@classmethod
|
|
731
|
+
def objects(cls) -> type[QueueManager]: ...
|
|
730
732
|
@property
|
|
731
733
|
def name(self) -> typing.Optional[str]: ...
|
|
732
734
|
def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
|
|
@@ -237,7 +237,8 @@ class _Secret(_Object, type_prefix="st"):
|
|
|
237
237
|
_metadata: Optional[api_pb2.SecretMetadata] = None
|
|
238
238
|
|
|
239
239
|
@classproperty
|
|
240
|
-
|
|
240
|
+
@classmethod
|
|
241
|
+
def objects(cls) -> type[_SecretManager]:
|
|
241
242
|
return _SecretManager
|
|
242
243
|
|
|
243
244
|
@property
|
|
@@ -375,7 +375,8 @@ class _Secret(modal._object._Object):
|
|
|
375
375
|
_metadata: typing.Optional[modal_proto.api_pb2.SecretMetadata]
|
|
376
376
|
|
|
377
377
|
@synchronicity.classproperty
|
|
378
|
-
|
|
378
|
+
@classmethod
|
|
379
|
+
def objects(cls) -> type[_SecretManager]: ...
|
|
379
380
|
@property
|
|
380
381
|
def name(self) -> typing.Optional[str]: ...
|
|
381
382
|
def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
|
|
@@ -500,7 +501,8 @@ class Secret(modal.object.Object):
|
|
|
500
501
|
...
|
|
501
502
|
|
|
502
503
|
@synchronicity.classproperty
|
|
503
|
-
|
|
504
|
+
@classmethod
|
|
505
|
+
def objects(cls) -> type[SecretManager]: ...
|
|
504
506
|
@property
|
|
505
507
|
def name(self) -> typing.Optional[str]: ...
|
|
506
508
|
def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
|
|
@@ -454,7 +454,8 @@ class _Volume(modal._object._Object):
|
|
|
454
454
|
_read_only: bool
|
|
455
455
|
|
|
456
456
|
@synchronicity.classproperty
|
|
457
|
-
|
|
457
|
+
@classmethod
|
|
458
|
+
def objects(cls) -> type[_VolumeManager]: ...
|
|
458
459
|
@property
|
|
459
460
|
def name(self) -> typing.Optional[str]: ...
|
|
460
461
|
def read_only(self) -> _Volume:
|
|
@@ -789,7 +790,8 @@ class Volume(modal.object.Object):
|
|
|
789
790
|
...
|
|
790
791
|
|
|
791
792
|
@synchronicity.classproperty
|
|
792
|
-
|
|
793
|
+
@classmethod
|
|
794
|
+
def objects(cls) -> type[VolumeManager]: ...
|
|
793
795
|
@property
|
|
794
796
|
def name(self) -> typing.Optional[str]: ...
|
|
795
797
|
def read_only(self) -> Volume:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: modal
|
|
3
|
-
Version: 1.4.1.
|
|
3
|
+
Version: 1.4.1.dev5
|
|
4
4
|
Summary: Python client library for Modal
|
|
5
5
|
Author-email: Modal Labs <support@modal.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -23,7 +23,7 @@ Requires-Dist: grpclib<0.4.10,>=0.4.7; python_version < "3.14"
|
|
|
23
23
|
Requires-Dist: grpclib<0.4.10,>=0.4.9; python_version >= "3.14"
|
|
24
24
|
Requires-Dist: protobuf!=4.24.0,<7.0,>=3.19
|
|
25
25
|
Requires-Dist: rich>=12.0.0
|
|
26
|
-
Requires-Dist: synchronicity~=0.
|
|
26
|
+
Requires-Dist: synchronicity~=0.12.0
|
|
27
27
|
Requires-Dist: toml
|
|
28
28
|
Requires-Dist: typer>=0.9
|
|
29
29
|
Requires-Dist: types-certifi
|
|
@@ -503,6 +503,10 @@ class ModalClientBase(abc.ABC):
|
|
|
503
503
|
async def SandboxCreateV2(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxCreateV2Request, modal_proto.api_pb2.SandboxCreateV2Response]') -> None:
|
|
504
504
|
pass
|
|
505
505
|
|
|
506
|
+
@abc.abstractmethod
|
|
507
|
+
async def SandboxGetCommandRouterAccess(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest, modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse]') -> None:
|
|
508
|
+
pass
|
|
509
|
+
|
|
506
510
|
@abc.abstractmethod
|
|
507
511
|
async def SandboxGetFromName(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxGetFromNameRequest, modal_proto.api_pb2.SandboxGetFromNameResponse]') -> None:
|
|
508
512
|
pass
|
|
@@ -1503,6 +1507,12 @@ class ModalClientBase(abc.ABC):
|
|
|
1503
1507
|
modal_proto.api_pb2.SandboxCreateV2Request,
|
|
1504
1508
|
modal_proto.api_pb2.SandboxCreateV2Response,
|
|
1505
1509
|
),
|
|
1510
|
+
'/modal.client.ModalClient/SandboxGetCommandRouterAccess': grpclib.const.Handler(
|
|
1511
|
+
self.SandboxGetCommandRouterAccess,
|
|
1512
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
|
1513
|
+
modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest,
|
|
1514
|
+
modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse,
|
|
1515
|
+
),
|
|
1506
1516
|
'/modal.client.ModalClient/SandboxGetFromName': grpclib.const.Handler(
|
|
1507
1517
|
self.SandboxGetFromName,
|
|
1508
1518
|
grpclib.const.Cardinality.UNARY_UNARY,
|
|
@@ -2643,6 +2653,12 @@ class ModalClientStub:
|
|
|
2643
2653
|
modal_proto.api_pb2.SandboxCreateV2Request,
|
|
2644
2654
|
modal_proto.api_pb2.SandboxCreateV2Response,
|
|
2645
2655
|
)
|
|
2656
|
+
self.SandboxGetCommandRouterAccess = grpclib.client.UnaryUnaryMethod(
|
|
2657
|
+
channel,
|
|
2658
|
+
'/modal.client.ModalClient/SandboxGetCommandRouterAccess',
|
|
2659
|
+
modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest,
|
|
2660
|
+
modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse,
|
|
2661
|
+
)
|
|
2646
2662
|
self.SandboxGetFromName = grpclib.client.UnaryUnaryMethod(
|
|
2647
2663
|
channel,
|
|
2648
2664
|
'/modal.client.ModalClient/SandboxGetFromName',
|