modal 1.6.2.dev13__tar.gz → 1.6.3.dev0__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.2.dev13 → modal-1.6.3.dev0}/PKG-INFO +1 -1
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/auth_token_manager.py +8 -4
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/client.pyi +2 -2
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/functions.pyi +6 -6
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/_sandbox.py +11 -5
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/sandbox.pyi +4 -4
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/api_pb2.py +846 -845
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/api_pb2.pyi +11 -1
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_version/__init__.py +1 -1
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/LICENSE +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/README.md +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/__init__.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/__main__.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_billing.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_cluster.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_cluster.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_container_entrypoint.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_environments.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_function_variants.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_functions.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_grpc_client.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_image.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_ipython.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_load_context.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_location.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_logs.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_logs_manager.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_logs_manager.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_metrics.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_metrics.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_object.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_outbound_policy.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_outbound_policy.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_output/__init__.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_output/manager.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_output/pty.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_output/rich.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_output/status.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_partial_function.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_resolver.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_resources.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/__init__.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/asgi.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/execution_context.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/task_lifecycle_manager.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/telemetry.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_serialization.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_server.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_server.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_supports_logs.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_traceback.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_tunnel.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_tunnel.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_type_manager.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/__init__.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/app_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/async_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/blob_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/browser_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/curl_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/deprecation.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/display_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/docker_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/function_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/git_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/hash_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/http_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/idle_countdown.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/logger.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/mount_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/name_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/package_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/proxy_support.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/shell_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_utils/time_utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_vendor/__init__.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_vendor/tblib.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_vendor/version.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_watcher.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/_workspace.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/app.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/app.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/billing.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/billing.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/2023.12.txt +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/2024.04.txt +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/2024.10.txt +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/2025.06.txt +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/README.md +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/builder/base-images.json +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/call_graph.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/__init__.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/_download.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/_help.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/_logs.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/_stats.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/_traceback.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/app.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/billing.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/changelog.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/config.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/container.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/curl.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/dashboard.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/dict.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/endpoint.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/entry_point.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/environment.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/function.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/image.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/import_refs.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/logo.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/network_file_system.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/profile.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/queues.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/run.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/secret.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/selector.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/server.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/shell.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/skills.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/token.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/utils.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/volume.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cli/workspace.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/client.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cls.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cls.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cluster.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/cluster.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/config.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/container_process.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/container_process.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/dict.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/dict.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/environments.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/environments.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/exception.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/__init__.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/_flash_container_entry.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/flash.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/flash.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/flash_server.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/flash_server.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/experimental/ipython.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/file_pattern_matcher.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/functions.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/image.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/image.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/io_streams.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/io_streams.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/mount.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/mount.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/network_file_system.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/network_file_system.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/object.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/object.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/output.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/parallel_map.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/parallel_map.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/partial_function.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/partial_function.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/proxy.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/proxy.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/py.typed +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/queue.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/queue.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/retries.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/runner.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/runner.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/running_app.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/__init__.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/_common.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/_filesystem.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/_sidecar.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/_snapshot.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/_task_command_router_client.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/sandbox/sandbox.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/schedule.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/scheduler_placement.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/secret.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/secret.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/server.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/server.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/serving.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/serving.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/skills/modal/SKILL.md +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/stream_type.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/token_flow.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/token_flow.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/types.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/volume.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/volume.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/workspace.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal/workspace.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal.egg-info/requires.txt +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal.egg-info/top_level.txt +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/__init__.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/mdmd/types.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_docs/reference_intro.md +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/__init__.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/api_grpc.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/py.typed +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/modal_version/__main__.py +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/pyproject.toml +0 -0
- {modal-1.6.2.dev13 → modal-1.6.3.dev0}/setup.cfg +0 -0
|
@@ -98,8 +98,9 @@ class _AuthTokenManager:
|
|
|
98
98
|
caller goes away.
|
|
99
99
|
"""
|
|
100
100
|
if self._refresh_task is None:
|
|
101
|
-
# Maybe another coroutine refreshed already, or we're cooling down after a failure.
|
|
102
|
-
|
|
101
|
+
# Maybe another coroutine refreshed already, or we're cooling down after a failure. The cooldown
|
|
102
|
+
# only applies while the cached token is still usable.
|
|
103
|
+
if self._has_valid_token() and not self._should_refresh():
|
|
103
104
|
return
|
|
104
105
|
# Note: the task is created in async code so it binds to the synchronicity event loop.
|
|
105
106
|
self._refresh_task = asyncio.create_task(self._fetch_token())
|
|
@@ -121,12 +122,12 @@ class _AuthTokenManager:
|
|
|
121
122
|
async def _fetch_token(self):
|
|
122
123
|
"""Fetch a new token and cache it, or arm the failure backoff."""
|
|
123
124
|
try:
|
|
124
|
-
#
|
|
125
|
+
# Retry transient errors if the cached token is missing or expired.
|
|
125
126
|
# Otherwise one attempt, and _retry_after handles the cooldown.
|
|
126
127
|
retry = Retry(
|
|
127
128
|
attempt_timeout=self.AUTH_TOKEN_TIMEOUT,
|
|
128
129
|
total_timeout=self.AUTH_TOKEN_RETRY_TOTAL_TIMEOUT,
|
|
129
|
-
max_retries=0 if self.
|
|
130
|
+
max_retries=0 if self._has_valid_token() else DEFAULT_MAX_RETRIES,
|
|
130
131
|
)
|
|
131
132
|
token = await self._fetch(retry)
|
|
132
133
|
if not token:
|
|
@@ -166,6 +167,9 @@ class _AuthTokenManager:
|
|
|
166
167
|
except Exception as e:
|
|
167
168
|
raise ValueError("Internal error: Cannot parse auth token. Please contact Modal support.") from e
|
|
168
169
|
|
|
170
|
+
def _has_valid_token(self):
|
|
171
|
+
return bool(self._token) and not self._is_expired()
|
|
172
|
+
|
|
169
173
|
def _in_backoff(self):
|
|
170
174
|
return time.time() < self._retry_after
|
|
171
175
|
|
|
@@ -80,7 +80,7 @@ class _Client:
|
|
|
80
80
|
server_url: str,
|
|
81
81
|
client_type: int,
|
|
82
82
|
credentials: typing.Optional[tuple[str, str]],
|
|
83
|
-
version: str = "1.6.
|
|
83
|
+
version: str = "1.6.3.dev0",
|
|
84
84
|
*,
|
|
85
85
|
oauth_credentials: typing.Optional[_OAuthCredentials] = None,
|
|
86
86
|
):
|
|
@@ -290,7 +290,7 @@ class Client:
|
|
|
290
290
|
server_url: str,
|
|
291
291
|
client_type: int,
|
|
292
292
|
credentials: typing.Optional[tuple[str, str]],
|
|
293
|
-
version: str = "1.6.
|
|
293
|
+
version: str = "1.6.3.dev0",
|
|
294
294
|
*,
|
|
295
295
|
oauth_credentials: typing.Optional[_OAuthCredentials] = None,
|
|
296
296
|
):
|
|
@@ -619,7 +619,7 @@ class Function(
|
|
|
619
619
|
|
|
620
620
|
_call_generator: ___call_generator_spec
|
|
621
621
|
|
|
622
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
622
|
+
class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
|
|
623
623
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
624
624
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result.
|
|
625
625
|
|
|
@@ -644,7 +644,7 @@ class Function(
|
|
|
644
644
|
"""
|
|
645
645
|
...
|
|
646
646
|
|
|
647
|
-
remote: __remote_spec[modal._functions.
|
|
647
|
+
remote: __remote_spec[modal._functions.P, modal._functions.ReturnType]
|
|
648
648
|
|
|
649
649
|
class __remote_gen_spec(typing_extensions.Protocol):
|
|
650
650
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -694,7 +694,7 @@ class Function(
|
|
|
694
694
|
"""
|
|
695
695
|
...
|
|
696
696
|
|
|
697
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
697
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
|
|
698
698
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
699
699
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
700
700
|
|
|
@@ -727,7 +727,7 @@ class Function(
|
|
|
727
727
|
"""
|
|
728
728
|
...
|
|
729
729
|
|
|
730
|
-
_experimental_spawn: ___experimental_spawn_spec[modal._functions.
|
|
730
|
+
_experimental_spawn: ___experimental_spawn_spec[modal._functions.P, modal._functions.ReturnType]
|
|
731
731
|
|
|
732
732
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
|
|
733
733
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
|
|
@@ -735,7 +735,7 @@ class Function(
|
|
|
735
735
|
|
|
736
736
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
|
|
737
737
|
|
|
738
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
738
|
+
class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
|
|
739
739
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
740
740
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
741
741
|
|
|
@@ -768,7 +768,7 @@ class Function(
|
|
|
768
768
|
"""
|
|
769
769
|
...
|
|
770
770
|
|
|
771
|
-
spawn: __spawn_spec[modal._functions.
|
|
771
|
+
spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType]
|
|
772
772
|
|
|
773
773
|
@property
|
|
774
774
|
def _raw_f_(self) -> collections.abc.Callable[..., typing.Any]: ...
|
|
@@ -112,6 +112,11 @@ _EXIT_SNAPSHOT_LONG_POLL_TIMEOUT = 10.0
|
|
|
112
112
|
# client-side deadline.
|
|
113
113
|
_EXIT_SNAPSHOT_POLL_DEADLINE_MARGIN = 5.0
|
|
114
114
|
|
|
115
|
+
# `Sandbox.wait` re-polls a server-side long poll of this many seconds. Each poll gets a network deadline
|
|
116
|
+
# with a margin over the hold, so a poll the server never answers fails and is retried instead of hanging.
|
|
117
|
+
_WAIT_LONG_POLL_TIMEOUT = 10.0
|
|
118
|
+
_WAIT_POLL_DEADLINE_MARGIN = 5.0
|
|
119
|
+
|
|
115
120
|
# How long `Sandbox.create` waits for capacity before giving up.
|
|
116
121
|
_SANDBOX_SCHEDULING_TIMEOUT: float = 21 * 60
|
|
117
122
|
|
|
@@ -484,8 +489,8 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
484
489
|
wildcard prefixes (``*.``); a bare ``"*"`` allows all domains. The outbound policy
|
|
485
490
|
can be replaced later via `Sandbox._experimental_set_outbound_network_policy`.
|
|
486
491
|
inbound_cidr_allowlist:
|
|
487
|
-
List of CIDRs allowed to connect inbound to the sandbox (tunnels and connection tokens).
|
|
488
|
-
all CIDRs are allowed.
|
|
492
|
+
List of CIDRs allowed to connect inbound to the sandbox (encrypted tunnels and connection tokens).
|
|
493
|
+
If None, all CIDRs are allowed.
|
|
489
494
|
_experimental_outbound_policy: Configuration for replacing headers in outbound HTTPS requests from
|
|
490
495
|
the Sandbox. Secrets referenced by the policy are resolved outside the Sandbox and are never
|
|
491
496
|
visible to the workload. See `modal.experimental.OutboundPolicy`. This API is experimental and
|
|
@@ -1682,14 +1687,15 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
1682
1687
|
|
|
1683
1688
|
"""
|
|
1684
1689
|
|
|
1690
|
+
poll_retry = Retry(attempt_timeout=_WAIT_LONG_POLL_TIMEOUT + _WAIT_POLL_DEADLINE_MARGIN)
|
|
1685
1691
|
while True:
|
|
1686
|
-
req = api_pb2.SandboxWaitRequest(sandbox_id=self.object_id, timeout=
|
|
1692
|
+
req = api_pb2.SandboxWaitRequest(sandbox_id=self.object_id, timeout=_WAIT_LONG_POLL_TIMEOUT)
|
|
1687
1693
|
# Use the private __client to allow `wait` to work with a detached sandbox
|
|
1688
1694
|
stub = self.__client._stub
|
|
1689
1695
|
if self._is_v2:
|
|
1690
|
-
resp = await stub.SandboxWaitV2(req, metadata=await self._v2_metadata(self.__client))
|
|
1696
|
+
resp = await stub.SandboxWaitV2(req, retry=poll_retry, metadata=await self._v2_metadata(self.__client))
|
|
1691
1697
|
else:
|
|
1692
|
-
resp = await stub.SandboxWait(req)
|
|
1698
|
+
resp = await stub.SandboxWait(req, retry=poll_retry)
|
|
1693
1699
|
if resp.result.status:
|
|
1694
1700
|
logger.debug(f"Sandbox {self.object_id} wait completed with status {resp.result.status}")
|
|
1695
1701
|
self._result = resp.result
|
|
@@ -1474,8 +1474,8 @@ class Sandbox(modal.object.Object):
|
|
|
1474
1474
|
wildcard prefixes (``*.``); a bare ``"*"`` allows all domains. The outbound policy
|
|
1475
1475
|
can be replaced later via `Sandbox._experimental_set_outbound_network_policy`.
|
|
1476
1476
|
inbound_cidr_allowlist:
|
|
1477
|
-
List of CIDRs allowed to connect inbound to the sandbox (tunnels and connection tokens).
|
|
1478
|
-
all CIDRs are allowed.
|
|
1477
|
+
List of CIDRs allowed to connect inbound to the sandbox (encrypted tunnels and connection tokens).
|
|
1478
|
+
If None, all CIDRs are allowed.
|
|
1479
1479
|
_experimental_outbound_policy: Configuration for replacing headers in outbound HTTPS requests from
|
|
1480
1480
|
the Sandbox. Secrets referenced by the policy are resolved outside the Sandbox and are never
|
|
1481
1481
|
visible to the workload. See `modal.experimental.OutboundPolicy`. This API is experimental and
|
|
@@ -1598,8 +1598,8 @@ class Sandbox(modal.object.Object):
|
|
|
1598
1598
|
wildcard prefixes (``*.``); a bare ``"*"`` allows all domains. The outbound policy
|
|
1599
1599
|
can be replaced later via `Sandbox._experimental_set_outbound_network_policy`.
|
|
1600
1600
|
inbound_cidr_allowlist:
|
|
1601
|
-
List of CIDRs allowed to connect inbound to the sandbox (tunnels and connection tokens).
|
|
1602
|
-
all CIDRs are allowed.
|
|
1601
|
+
List of CIDRs allowed to connect inbound to the sandbox (encrypted tunnels and connection tokens).
|
|
1602
|
+
If None, all CIDRs are allowed.
|
|
1603
1603
|
_experimental_outbound_policy: Configuration for replacing headers in outbound HTTPS requests from
|
|
1604
1604
|
the Sandbox. Secrets referenced by the policy are resolved outside the Sandbox and are never
|
|
1605
1605
|
visible to the workload. See `modal.experimental.OutboundPolicy`. This API is experimental and
|