modal 1.6.0__tar.gz → 1.6.1.dev1__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.0 → modal-1.6.1.dev1}/PKG-INFO +1 -1
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_functions.py +2 -2
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_object.py +17 -9
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/grpc_utils.py +11 -12
- modal-1.6.1.dev1/modal/cli/endpoint.py +779 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/server.py +170 -107
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/client.pyi +2 -2
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/config.py +14 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/dict.py +4 -4
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/dict.pyi +9 -9
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/functions.pyi +6 -4
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/network_file_system.py +3 -3
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/network_file_system.pyi +6 -6
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/object.pyi +1 -1
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/parallel_map.py +4 -4
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/parallel_map.pyi +3 -3
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/sandbox.py +15 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/sandbox.pyi +12 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/token_flow.py +2 -1
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/volume.py +2 -2
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/volume.pyi +9 -3
- {modal-1.6.0 → modal-1.6.1.dev1}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_version/__init__.py +1 -1
- {modal-1.6.0 → modal-1.6.1.dev1}/pyproject.toml +1 -1
- modal-1.6.0/modal/cli/endpoint.py +0 -372
- {modal-1.6.0 → modal-1.6.1.dev1}/LICENSE +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/README.md +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/__init__.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/__main__.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_billing.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_cluster.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_cluster.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_container_entrypoint.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_environments.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_function_variants.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_grpc_client.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_image.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_ipython.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_load_context.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_location.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_logs.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_logs_manager.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_logs_manager.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_outbound_policy.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_outbound_policy.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_output/__init__.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_output/manager.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_output/pty.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_output/rich.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_output/status.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_partial_function.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_resolver.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_resources.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/__init__.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/asgi.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/execution_context.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/task_lifecycle_manager.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/telemetry.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_serialization.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_server.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_server.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_supports_logs.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_traceback.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_tunnel.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_tunnel.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_type_manager.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/__init__.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/app_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/async_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/blob_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/browser_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/curl_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/deprecation.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/display_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/docker_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/function_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/git_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/hash_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/http_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/idle_countdown.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/logger.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/mount_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/name_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/package_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/proxy_support.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/shell_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/time_utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_vendor/__init__.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_vendor/tblib.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_vendor/version.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_watcher.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/_workspace.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/app.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/app.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/billing.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/billing.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/2023.12.txt +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/2024.04.txt +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/2024.10.txt +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/2025.06.txt +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/README.md +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/base-images.json +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/call_graph.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/__init__.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/_download.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/_help.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/_logs.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/_stats.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/_traceback.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/app.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/billing.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/changelog.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/config.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/container.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/curl.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/dashboard.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/dict.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/entry_point.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/environment.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/function.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/image.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/import_refs.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/logo.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/network_file_system.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/profile.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/queues.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/run.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/secret.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/selector.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/shell.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/skills.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/token.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/utils.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/volume.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/workspace.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/client.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cls.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cls.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cluster.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/cluster.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/container_process.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/container_process.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/environments.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/environments.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/exception.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/__init__.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/_flash_container_entry.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/flash.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/flash.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/flash_server.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/flash_server.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/ipython.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/file_pattern_matcher.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/functions.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/image.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/image.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/io_streams.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/io_streams.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/mount.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/mount.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/object.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/output.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/partial_function.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/partial_function.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/proxy.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/proxy.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/py.typed +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/queue.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/queue.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/retries.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/runner.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/runner.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/running_app.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/sandbox_fs.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/sandbox_fs.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/schedule.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/scheduler_placement.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/secret.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/secret.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/server.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/server.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/serving.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/serving.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/skills/modal/SKILL.md +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/snapshot.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/snapshot.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/stream_type.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/token_flow.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/types.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/workspace.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal/workspace.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal.egg-info/requires.txt +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal.egg-info/top_level.txt +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/__init__.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/mdmd/types.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/reference_intro.md +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/__init__.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/api_grpc.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/api_pb2.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/py.typed +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/modal_version/__main__.py +0 -0
- {modal-1.6.0 → modal-1.6.1.dev1}/setup.cfg +0 -0
|
@@ -7,7 +7,7 @@ import time
|
|
|
7
7
|
import typing
|
|
8
8
|
import warnings
|
|
9
9
|
from collections import OrderedDict
|
|
10
|
-
from collections.abc import AsyncGenerator,
|
|
10
|
+
from collections.abc import AsyncGenerator, Callable, Collection, Sequence
|
|
11
11
|
from dataclasses import dataclass
|
|
12
12
|
from datetime import datetime, timedelta, timezone
|
|
13
13
|
from pathlib import PurePosixPath
|
|
@@ -2405,7 +2405,7 @@ class _FunctionCall(typing.Generic[ReturnType], _Object, type_prefix="fc"):
|
|
|
2405
2405
|
return await self._invocation().poll_function(timeout=timeout, index=index)
|
|
2406
2406
|
|
|
2407
2407
|
@live_method_gen
|
|
2408
|
-
async def iter(self, *, start: int = 0, end: int | None = None) ->
|
|
2408
|
+
async def iter(self, *, start: int = 0, end: int | None = None) -> AsyncGenerator[ReturnType, None]:
|
|
2409
2409
|
"""Iterate in-order over the results of the function call.
|
|
2410
2410
|
|
|
2411
2411
|
Optionally, specify a range [start, end) to iterate over.
|
|
@@ -4,10 +4,10 @@ import typing
|
|
|
4
4
|
import uuid
|
|
5
5
|
from collections.abc import Awaitable, Callable, Hashable, Sequence
|
|
6
6
|
from functools import wraps
|
|
7
|
-
from typing import ClassVar
|
|
7
|
+
from typing import Any, AsyncContextManager, AsyncGenerator, AsyncIterator, ClassVar, ParamSpec, TypeVar
|
|
8
8
|
|
|
9
9
|
from google.protobuf.message import Message
|
|
10
|
-
from typing_extensions import Self
|
|
10
|
+
from typing_extensions import Concatenate, Self
|
|
11
11
|
|
|
12
12
|
from ._load_context import LoadContext
|
|
13
13
|
from ._resolver import Resolver
|
|
@@ -38,18 +38,24 @@ def _get_environment_name(
|
|
|
38
38
|
return config.get("environment") or ""
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
P = ParamSpec("P")
|
|
42
|
+
T = TypeVar("T")
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def live_method(method: Callable[Concatenate[Any, P], Awaitable[T]]) -> Callable[Concatenate[Any, P], Awaitable[T]]:
|
|
42
46
|
@wraps(method)
|
|
43
|
-
async def wrapped(self, *args, **kwargs):
|
|
47
|
+
async def wrapped(self, *args: P.args, **kwargs: P.kwargs) -> T:
|
|
44
48
|
await self.hydrate()
|
|
45
49
|
return await method(self, *args, **kwargs)
|
|
46
50
|
|
|
47
51
|
return wrapped
|
|
48
52
|
|
|
49
53
|
|
|
50
|
-
def live_method_gen(
|
|
54
|
+
def live_method_gen(
|
|
55
|
+
method: Callable[Concatenate[Any, P], AsyncGenerator[T, None]],
|
|
56
|
+
) -> Callable[Concatenate[Any, P], AsyncIterator[T]]:
|
|
51
57
|
@wraps(method)
|
|
52
|
-
async def wrapped(self, *args, **kwargs):
|
|
58
|
+
async def wrapped(self, *args: P.args, **kwargs: P.kwargs) -> AsyncIterator[T]:
|
|
53
59
|
await self.hydrate()
|
|
54
60
|
async with aclosing(method(self, *args, **kwargs)) as stream:
|
|
55
61
|
async for item in stream:
|
|
@@ -58,14 +64,16 @@ def live_method_gen(method):
|
|
|
58
64
|
return wrapped
|
|
59
65
|
|
|
60
66
|
|
|
61
|
-
def live_method_contextmanager(
|
|
67
|
+
def live_method_contextmanager(
|
|
68
|
+
method: Callable[Concatenate[Any, P], AsyncContextManager[T]],
|
|
69
|
+
) -> Callable[Concatenate[Any, P], AsyncContextManager[T]]:
|
|
62
70
|
# make sure a wrapped function returning an async context manager
|
|
63
71
|
# will not require both an `await func.aio()` and `async with`
|
|
64
72
|
# which would have been the case if it was wrapped in live_method
|
|
65
73
|
|
|
66
74
|
@wraps(method)
|
|
67
75
|
@contextlib.asynccontextmanager
|
|
68
|
-
async def wrapped(self, *args, **kwargs):
|
|
76
|
+
async def wrapped(self, *args: P.args, **kwargs: P.kwargs):
|
|
69
77
|
await self.hydrate()
|
|
70
78
|
async with method(self, *args, **kwargs) as ctx:
|
|
71
79
|
yield ctx
|
|
@@ -75,7 +83,7 @@ def live_method_contextmanager(method):
|
|
|
75
83
|
|
|
76
84
|
class _Object:
|
|
77
85
|
_type_prefix: ClassVar[str | None] = None
|
|
78
|
-
_prefix_to_type: ClassVar[dict[str, type]] = {}
|
|
86
|
+
_prefix_to_type: ClassVar[dict[str, type["_Object"]]] = {}
|
|
79
87
|
|
|
80
88
|
# For constructors
|
|
81
89
|
_load: Callable[[Self, Resolver, LoadContext, str | None], Awaitable[None]] | None = None
|
|
@@ -307,20 +307,19 @@ def create_channel_config(*, sustained_keepalive: bool = False) -> grpclib.confi
|
|
|
307
307
|
HTTP/2 keepalive probes keep idle transports warm through stateful
|
|
308
308
|
middleboxes and surface dead connections before retries reuse them.
|
|
309
309
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
open.
|
|
310
|
+
A probe goes out every `_keepalive_time` while the connection keeps sending
|
|
311
|
+
requests. `sustained_keepalive` also keeps probing a connection that only
|
|
312
|
+
awaits responses, for as long as it is open.
|
|
313
313
|
"""
|
|
314
|
-
ping_throttle_overrides: dict[str, Any] = {
|
|
314
|
+
ping_throttle_overrides: dict[str, Any] = {
|
|
315
|
+
# Default 300s floor between probes, applied regardless of data
|
|
316
|
+
# despite the name, so it has to stay under `_keepalive_time`.
|
|
317
|
+
"_http2_min_sent_ping_interval_without_data": GRPC_KEEPALIVE_TIME_SECS / 2,
|
|
318
|
+
}
|
|
315
319
|
if sustained_keepalive:
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
"_http2_max_pings_without_data": 0,
|
|
320
|
-
# Default 300s floor between probes, applied regardless of data
|
|
321
|
-
# despite the name, so it has to stay under `_keepalive_time`.
|
|
322
|
-
"_http2_min_sent_ping_interval_without_data": GRPC_KEEPALIVE_TIME_SECS / 2,
|
|
323
|
-
}
|
|
320
|
+
# Default 2: probing stops after two probes with no request sent in
|
|
321
|
+
# between. Requests reset the count, acks don't. 0 = no cap.
|
|
322
|
+
ping_throttle_overrides["_http2_max_pings_without_data"] = 0
|
|
324
323
|
|
|
325
324
|
return grpclib.config.Configuration(
|
|
326
325
|
_keepalive_time=GRPC_KEEPALIVE_TIME_SECS,
|