modal 1.6.4.dev7__tar.gz → 1.6.4.dev8__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.6.4.dev7 → modal-1.6.4.dev8}/PKG-INFO +1 -1
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/client.pyi +2 -2
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_task_command_router_client.py +33 -5
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_version/__init__.py +1 -1
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/pyproject.toml +1 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/LICENSE +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/README.md +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/__init__.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/__main__.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_billing.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_cluster.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_cluster.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_container_entrypoint.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_environments.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_function_variants.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_functions.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_grpc_client.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_image.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_ipython.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_load_context.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_location.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_logs.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_logs_manager.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_logs_manager.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_metrics.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_metrics.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_object.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_outbound_policy.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_outbound_policy.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_output/__init__.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_output/manager.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_output/pty.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_output/rich.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_output/status.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_partial_function.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_resolver.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_resources.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/__init__.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/asgi.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/execution_context.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/task_lifecycle_manager.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/telemetry.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_serialization.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_server.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_server.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_supports_logs.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_traceback.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_tunnel.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_tunnel.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_type_manager.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/__init__.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/app_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/async_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/blob_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/browser_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/curl_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/deprecation.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/display_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/docker_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/function_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/git_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/hash_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/http_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/idle_countdown.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/logger.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/mount_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/name_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/oauth.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/package_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/proxy_support.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/shell_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/time_utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_vendor/__init__.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_vendor/tblib.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_vendor/version.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_watcher.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_workspace.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/app.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/app.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/billing.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/billing.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/2023.12.txt +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/2024.04.txt +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/2024.10.txt +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/2025.06.txt +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/2026.10.txt +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/README.md +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/base-images.json +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/call_graph.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/__init__.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/_download.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/_help.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/_logs.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/_stats.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/_traceback.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/app.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/billing.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/changelog.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/config.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/container.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/curl.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/dashboard.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/dict.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/endpoint.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/entry_point.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/environment.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/function.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/image.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/import_refs.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/logo.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/network_file_system.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/profile.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/queues.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/run.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/secret.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/selector.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/server.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/shell.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/skills.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/token.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/utils.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/volume.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/workspace.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/client.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cls.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cls.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cluster.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cluster.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/config.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/container_process.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/container_process.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/dict.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/dict.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/environments.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/environments.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/exception.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/__init__.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/_flash_container_entry.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/flash.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/flash.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/flash_server.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/flash_server.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/ipython.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/file_pattern_matcher.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/functions.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/functions.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/image.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/image.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/io_streams.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/io_streams.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/mount.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/mount.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/network_file_system.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/network_file_system.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/object.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/object.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/output.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/parallel_map.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/parallel_map.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/partial_function.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/partial_function.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/proxy.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/proxy.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/py.typed +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/queue.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/queue.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/retries.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/runner.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/runner.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/running_app.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/__init__.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_common.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_filesystem.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_impl_persistent.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_impl_v1.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_impl_v2.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_sandbox.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_sidecar.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_snapshot.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/sandbox.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/sandbox.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/schedule.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/scheduler_placement.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/secret.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/secret.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/server.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/server.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/serving.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/serving.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/skills/modal/SKILL.md +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/stream_type.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/token_flow.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/token_flow.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/types.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/volume.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/volume.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/workspace.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/workspace.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal.egg-info/requires.txt +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal.egg-info/top_level.txt +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/__init__.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/mdmd/types.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/reference_intro.md +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/__init__.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/api_grpc.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/api_pb2.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/py.typed +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_version/__main__.py +0 -0
- {modal-1.6.4.dev7 → modal-1.6.4.dev8}/setup.cfg +0 -0
|
@@ -87,7 +87,7 @@ class _Client:
|
|
|
87
87
|
server_url: str,
|
|
88
88
|
client_type: int,
|
|
89
89
|
credentials: typing.Optional[tuple[str, str]],
|
|
90
|
-
version: str = "1.6.4.
|
|
90
|
+
version: str = "1.6.4.dev8",
|
|
91
91
|
*,
|
|
92
92
|
oauth_credentials: typing.Optional[_OAuthCredentials] = None,
|
|
93
93
|
):
|
|
@@ -304,7 +304,7 @@ class Client:
|
|
|
304
304
|
server_url: str,
|
|
305
305
|
client_type: int,
|
|
306
306
|
credentials: typing.Optional[tuple[str, str]],
|
|
307
|
-
version: str = "1.6.4.
|
|
307
|
+
version: str = "1.6.4.dev8",
|
|
308
308
|
*,
|
|
309
309
|
oauth_credentials: typing.Optional[_OAuthCredentials] = None,
|
|
310
310
|
):
|
|
@@ -55,6 +55,36 @@ _STREAMING_STDIN_RESUMABLE_EXCEPTIONS = (
|
|
|
55
55
|
)
|
|
56
56
|
|
|
57
57
|
|
|
58
|
+
_shared_verifying_ssl_context_instance: ssl.SSLContext | None = None
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _shared_verifying_ssl_context() -> ssl.SSLContext:
|
|
62
|
+
"""Process-wide TLS context that verifies certificates against the system CAs.
|
|
63
|
+
|
|
64
|
+
Creating a context parses the system CA bundle while holding the GIL, so one
|
|
65
|
+
per channel blocks the event loop when many Sandboxes connect at once. Every
|
|
66
|
+
Sandbox's command router channel shares this context, so it must never be
|
|
67
|
+
modified; a change would apply to every connection in the process.
|
|
68
|
+
"""
|
|
69
|
+
global _shared_verifying_ssl_context_instance
|
|
70
|
+
if _shared_verifying_ssl_context_instance is None:
|
|
71
|
+
_shared_verifying_ssl_context_instance = ssl.create_default_context()
|
|
72
|
+
return _shared_verifying_ssl_context_instance
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _unverified_ssl_context() -> ssl.SSLContext:
|
|
76
|
+
"""New TLS context that skips certificate and hostname checks.
|
|
77
|
+
|
|
78
|
+
Only for local e2e servers on localhost, which use self-signed certificates.
|
|
79
|
+
Built per call so that turning verification off cannot reach the shared
|
|
80
|
+
verifying context.
|
|
81
|
+
"""
|
|
82
|
+
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
|
83
|
+
ssl_context.check_hostname = False
|
|
84
|
+
ssl_context.verify_mode = ssl.CERT_NONE
|
|
85
|
+
return ssl_context
|
|
86
|
+
|
|
87
|
+
|
|
58
88
|
@retry(n_attempts=34, base_delay=1, max_delay=10, attempt_timeout=10, total_timeout=310)
|
|
59
89
|
async def _connect_channel(channel: grpclib.client.Channel):
|
|
60
90
|
"""Connect to the command router channel.
|
|
@@ -320,13 +350,11 @@ class TaskCommandRouterClient:
|
|
|
320
350
|
raise ValueError(f"Task router URL must be https, got: {url}")
|
|
321
351
|
ssl_context = None
|
|
322
352
|
elif o.scheme == "https":
|
|
323
|
-
ssl_context = ssl.create_default_context()
|
|
324
353
|
if is_localhost_client:
|
|
325
|
-
# Allow insecure TLS when the Modal server client points to localhost
|
|
326
|
-
# This is typically triggered from local e2e testing
|
|
327
354
|
logger.warning("Using insecure TLS for task command router because server client points to localhost")
|
|
328
|
-
ssl_context
|
|
329
|
-
|
|
355
|
+
ssl_context = _unverified_ssl_context()
|
|
356
|
+
else:
|
|
357
|
+
ssl_context = _shared_verifying_ssl_context()
|
|
330
358
|
else:
|
|
331
359
|
raise ValueError(f"Task router URL must be https, got: {url}")
|
|
332
360
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|