modal 1.4.4.dev2__tar.gz → 1.4.4.dev3__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.4.dev2 → modal-1.4.4.dev3}/PKG-INFO +1 -1
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/task_command_router_client.py +16 -9
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/client.pyi +2 -2
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/functions.pyi +6 -6
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_proto/api_grpc.py +16 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_proto/api_pb2.py +831 -781
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_proto/api_pb2.pyi +79 -2
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_proto/api_pb2_grpc.py +33 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_proto/api_pb2_grpc.pyi +10 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_proto/modal_api_grpc.py +1 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_version/__init__.py +1 -1
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/LICENSE +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/README.md +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/__init__.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/__main__.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_billing.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_clustered_functions.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_clustered_functions.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_container_entrypoint.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_environments.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_function_variants.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_functions.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_grpc_client.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_ipython.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_load_context.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_location.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_logs.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_object.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_output/__init__.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_output/manager.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_output/pty.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_output/rich.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_output/status.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_partial_function.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_resolver.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_resources.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_runtime/__init__.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_runtime/asgi.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_runtime/execution_context.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_runtime/telemetry.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_serialization.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_server.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_traceback.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_tunnel.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_tunnel.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_type_manager.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/__init__.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/app_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/async_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/blob_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/browser_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/deprecation.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/docker_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/function_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/git_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/hash_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/http_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/logger.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/mount_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/name_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/package_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/shell_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_utils/time_utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_vendor/__init__.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_vendor/tblib.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_vendor/version.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/_watcher.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/app.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/app.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/billing.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/builder/2023.12.txt +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/builder/2024.04.txt +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/builder/2024.10.txt +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/builder/2025.06.txt +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/builder/README.md +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/builder/base-images.json +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/call_graph.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/__init__.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/_download.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/_help.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/_traceback.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/app.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/billing.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/bootstrap.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/changelog.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/cluster.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/config.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/container.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/dashboard.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/dict.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/entry_point.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/environment.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/import_refs.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/launch.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/logo.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/network_file_system.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/profile.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/programs/__init__.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/programs/vscode.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/queues.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/run.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/secret.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/selector.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/shell.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/token.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/utils.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cli/volume.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/client.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cls.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/cls.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/config.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/container_process.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/container_process.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/dict.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/dict.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/environments.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/environments.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/exception.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/experimental/__init__.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/experimental/flash.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/experimental/flash.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/experimental/ipython.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/file_io.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/file_io.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/file_pattern_matcher.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/functions.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/image.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/image.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/io_streams.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/io_streams.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/mount.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/mount.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/network_file_system.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/network_file_system.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/object.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/object.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/output.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/parallel_map.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/parallel_map.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/partial_function.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/partial_function.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/proxy.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/proxy.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/py.typed +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/queue.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/queue.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/retries.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/runner.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/runner.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/running_app.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/sandbox.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/sandbox.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/sandbox_fs.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/sandbox_fs.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/schedule.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/scheduler_placement.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/secret.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/secret.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/server.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/server.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/serving.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/serving.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/snapshot.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/snapshot.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/stream_type.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/token_flow.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/token_flow.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/volume.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal/volume.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal.egg-info/requires.txt +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal.egg-info/top_level.txt +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_docs/__init__.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_proto/__init__.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_proto/py.typed +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/modal_version/__main__.py +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/pyproject.toml +0 -0
- {modal-1.4.4.dev2 → modal-1.4.4.dev3}/setup.cfg +0 -0
|
@@ -193,18 +193,25 @@ class TaskCommandRouterClient:
|
|
|
193
193
|
) -> "TaskCommandRouterClient":
|
|
194
194
|
"""Build a connected client from a jwt and url."""
|
|
195
195
|
o = urllib.parse.urlparse(url)
|
|
196
|
-
|
|
196
|
+
is_localhost_client = server_client._is_localhost
|
|
197
|
+
if o.scheme == "http":
|
|
198
|
+
# plain http serving should only be used for unit tests
|
|
199
|
+
if not is_localhost_client:
|
|
200
|
+
raise ValueError(f"Task router URL must be https, got: {url}")
|
|
201
|
+
ssl_context = None
|
|
202
|
+
elif o.scheme == "https":
|
|
203
|
+
ssl_context = ssl.create_default_context()
|
|
204
|
+
if is_localhost_client:
|
|
205
|
+
# Allow insecure TLS when the Modal server client points to localhost
|
|
206
|
+
# This is typically triggered from local e2e testing
|
|
207
|
+
logger.warning("Using insecure TLS for task command router because server client points to localhost")
|
|
208
|
+
ssl_context.check_hostname = False
|
|
209
|
+
ssl_context.verify_mode = ssl.CERT_NONE
|
|
210
|
+
else:
|
|
197
211
|
raise ValueError(f"Task router URL must be https, got: {url}")
|
|
198
212
|
|
|
199
213
|
host, _, port_str = o.netloc.partition(":")
|
|
200
|
-
port = int(port_str) if port_str else 443
|
|
201
|
-
ssl_context = ssl.create_default_context()
|
|
202
|
-
|
|
203
|
-
# Allow insecure TLS when explicitly enabled via config.
|
|
204
|
-
if server_client._is_localhost:
|
|
205
|
-
logger.warning("Using insecure TLS for task command router because server client points to localhost")
|
|
206
|
-
ssl_context.check_hostname = False
|
|
207
|
-
ssl_context.verify_mode = ssl.CERT_NONE
|
|
214
|
+
port = int(port_str) if port_str else (443 if o.scheme == "https" else 80)
|
|
208
215
|
|
|
209
216
|
channel = PermanentCloseableChannel(
|
|
210
217
|
host,
|
|
@@ -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.4.
|
|
38
|
+
version: str = "1.4.4.dev3",
|
|
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.4.
|
|
178
|
+
version: str = "1.4.4.dev3",
|
|
179
179
|
):
|
|
180
180
|
"""mdmd:hidden
|
|
181
181
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -421,7 +421,7 @@ class Function(
|
|
|
421
421
|
|
|
422
422
|
_call_generator: ___call_generator_spec
|
|
423
423
|
|
|
424
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
424
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
425
425
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
426
426
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
427
427
|
...
|
|
@@ -430,7 +430,7 @@ class Function(
|
|
|
430
430
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
431
431
|
...
|
|
432
432
|
|
|
433
|
-
remote: __remote_spec[modal._functions.
|
|
433
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P]
|
|
434
434
|
|
|
435
435
|
class __remote_gen_spec(typing_extensions.Protocol):
|
|
436
436
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -457,7 +457,7 @@ class Function(
|
|
|
457
457
|
"""
|
|
458
458
|
...
|
|
459
459
|
|
|
460
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
460
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
461
461
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
462
462
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
463
463
|
|
|
@@ -480,7 +480,7 @@ class Function(
|
|
|
480
480
|
"""
|
|
481
481
|
...
|
|
482
482
|
|
|
483
|
-
_experimental_spawn: ___experimental_spawn_spec[modal._functions.
|
|
483
|
+
_experimental_spawn: ___experimental_spawn_spec[modal._functions.ReturnType, modal._functions.P]
|
|
484
484
|
|
|
485
485
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
|
|
486
486
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
|
|
@@ -488,7 +488,7 @@ class Function(
|
|
|
488
488
|
|
|
489
489
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
|
|
490
490
|
|
|
491
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
491
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
492
492
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
493
493
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
494
494
|
|
|
@@ -509,7 +509,7 @@ class Function(
|
|
|
509
509
|
"""
|
|
510
510
|
...
|
|
511
511
|
|
|
512
|
-
spawn: __spawn_spec[modal._functions.
|
|
512
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P]
|
|
513
513
|
|
|
514
514
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
|
515
515
|
"""Return the inner Python object wrapped by this Modal Function."""
|
|
@@ -267,6 +267,10 @@ class ModalClientBase(abc.ABC):
|
|
|
267
267
|
async def EndpointList(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.EndpointListRequest, modal_proto.api_pb2.EndpointListResponse]') -> None:
|
|
268
268
|
pass
|
|
269
269
|
|
|
270
|
+
@abc.abstractmethod
|
|
271
|
+
async def EndpointStop(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.EndpointStopRequest, modal_proto.api_pb2.EndpointStopResponse]') -> None:
|
|
272
|
+
pass
|
|
273
|
+
|
|
270
274
|
@abc.abstractmethod
|
|
271
275
|
async def EnvironmentCreate(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.EnvironmentCreateRequest, google.protobuf.empty_pb2.Empty]') -> None:
|
|
272
276
|
pass
|
|
@@ -1193,6 +1197,12 @@ class ModalClientBase(abc.ABC):
|
|
|
1193
1197
|
modal_proto.api_pb2.EndpointListRequest,
|
|
1194
1198
|
modal_proto.api_pb2.EndpointListResponse,
|
|
1195
1199
|
),
|
|
1200
|
+
'/modal.client.ModalClient/EndpointStop': grpclib.const.Handler(
|
|
1201
|
+
self.EndpointStop,
|
|
1202
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
|
1203
|
+
modal_proto.api_pb2.EndpointStopRequest,
|
|
1204
|
+
modal_proto.api_pb2.EndpointStopResponse,
|
|
1205
|
+
),
|
|
1196
1206
|
'/modal.client.ModalClient/EnvironmentCreate': grpclib.const.Handler(
|
|
1197
1207
|
self.EnvironmentCreate,
|
|
1198
1208
|
grpclib.const.Cardinality.UNARY_UNARY,
|
|
@@ -2399,6 +2409,12 @@ class ModalClientStub:
|
|
|
2399
2409
|
modal_proto.api_pb2.EndpointListRequest,
|
|
2400
2410
|
modal_proto.api_pb2.EndpointListResponse,
|
|
2401
2411
|
)
|
|
2412
|
+
self.EndpointStop = grpclib.client.UnaryUnaryMethod(
|
|
2413
|
+
channel,
|
|
2414
|
+
'/modal.client.ModalClient/EndpointStop',
|
|
2415
|
+
modal_proto.api_pb2.EndpointStopRequest,
|
|
2416
|
+
modal_proto.api_pb2.EndpointStopResponse,
|
|
2417
|
+
)
|
|
2402
2418
|
self.EnvironmentCreate = grpclib.client.UnaryUnaryMethod(
|
|
2403
2419
|
channel,
|
|
2404
2420
|
'/modal.client.ModalClient/EnvironmentCreate',
|