modal 1.2.3.dev12__tar.gz → 1.2.3.dev13__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.2.3.dev12 → modal-1.2.3.dev13}/PKG-INFO +1 -1
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_functions.py +1 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_load_context.py +2 -1
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_object.py +12 -6
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/client.py +9 -9
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/client.pyi +8 -9
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/functions.pyi +6 -6
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_version/__init__.py +1 -1
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/LICENSE +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/README.md +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/__init__.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/__main__.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_billing.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_clustered_functions.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_clustered_functions.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_container_entrypoint.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_grpc_client.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_ipython.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_location.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_output.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_partial_function.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_pty.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_resolver.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_resources.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_runtime/__init__.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_runtime/asgi.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_runtime/execution_context.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_runtime/telemetry.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_serialization.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_traceback.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_tunnel.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_tunnel.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_type_manager.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/__init__.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/app_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/async_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/blob_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/deprecation.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/docker_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/function_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/git_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/hash_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/http_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/logger.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/mount_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/name_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/package_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/shell_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_utils/time_utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_vendor/__init__.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_vendor/tblib.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/_watcher.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/app.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/app.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/billing.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/builder/2023.12.txt +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/builder/2024.04.txt +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/builder/2024.10.txt +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/builder/2025.06.txt +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/builder/README.md +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/builder/base-images.json +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/call_graph.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/__init__.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/_download.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/_traceback.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/app.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/cluster.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/config.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/container.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/dict.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/entry_point.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/environment.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/import_refs.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/launch.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/network_file_system.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/profile.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/programs/__init__.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/programs/launch_instance_ssh.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/programs/run_marimo.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/programs/vscode.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/queues.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/run.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/secret.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/token.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/utils.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cli/volume.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cls.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/cls.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/config.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/container_process.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/container_process.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/dict.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/dict.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/environments.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/environments.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/exception.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/experimental/__init__.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/experimental/flash.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/experimental/flash.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/experimental/ipython.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/file_io.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/file_io.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/file_pattern_matcher.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/functions.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/gpu.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/image.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/image.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/io_streams.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/io_streams.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/mount.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/mount.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/network_file_system.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/network_file_system.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/object.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/object.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/output.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/parallel_map.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/parallel_map.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/partial_function.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/partial_function.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/proxy.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/proxy.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/py.typed +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/queue.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/queue.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/retries.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/runner.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/runner.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/running_app.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/sandbox.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/sandbox.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/schedule.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/scheduler_placement.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/secret.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/secret.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/serving.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/serving.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/snapshot.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/snapshot.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/stream_type.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/token_flow.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/token_flow.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/volume.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal/volume.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal.egg-info/requires.txt +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal.egg-info/top_level.txt +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_docs/__init__.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/__init__.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/api.proto +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/api_grpc.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/api_pb2.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/py.typed +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/sandbox_router.proto +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/sandbox_router_grpc.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/sandbox_router_pb2.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/sandbox_router_pb2.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/sandbox_router_pb2_grpc.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/sandbox_router_pb2_grpc.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/task_command_router.proto +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/modal_version/__main__.py +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/pyproject.toml +0 -0
- {modal-1.2.3.dev12 → modal-1.2.3.dev13}/setup.cfg +0 -0
|
@@ -536,6 +536,7 @@ class _InputPlaneInvocation:
|
|
|
536
536
|
async def _get_metadata(input_plane_region: str, client: _Client) -> list[tuple[str, str]]:
|
|
537
537
|
if not input_plane_region:
|
|
538
538
|
return []
|
|
539
|
+
assert client._auth_token_manager, "Client is not open"
|
|
539
540
|
token = await client._auth_token_manager.get_token()
|
|
540
541
|
return [("x-modal-input-plane-region", input_plane_region), ("x-modal-auth-token", token)]
|
|
541
542
|
|
|
@@ -66,8 +66,9 @@ class LoadContext:
|
|
|
66
66
|
|
|
67
67
|
Returns a new instance (no in place mutation)"""
|
|
68
68
|
|
|
69
|
+
is_valid_client = self._client is not None and not self._client._snapshotted
|
|
69
70
|
return LoadContext(
|
|
70
|
-
client=
|
|
71
|
+
client=self.client if is_valid_client else await _Client.from_env(),
|
|
71
72
|
environment_name=self._environment_name or config.get("environment") or "",
|
|
72
73
|
app_id=self._app_id,
|
|
73
74
|
)
|
|
@@ -43,7 +43,7 @@ class _Object:
|
|
|
43
43
|
_prefix_to_type: ClassVar[dict[str, type]] = {}
|
|
44
44
|
|
|
45
45
|
# For constructors
|
|
46
|
-
_load: Optional[Callable[[Self, Resolver, LoadContext, Optional[str]], Awaitable[None]]]
|
|
46
|
+
_load: Optional[Callable[[Self, Resolver, LoadContext, Optional[str]], Awaitable[None]]] = None
|
|
47
47
|
_preload: Optional[Callable[[Self, Resolver, LoadContext, Optional[str]], Awaitable[None]]]
|
|
48
48
|
_rep: str
|
|
49
49
|
_is_another_app: bool
|
|
@@ -308,11 +308,17 @@ class _Object:
|
|
|
308
308
|
# memory snapshots capture references which must be rehydrated
|
|
309
309
|
# on restore to handle staleness.
|
|
310
310
|
logger.debug(f"rehydrating {self} after snapshot")
|
|
311
|
-
self.
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
311
|
+
if self._hydrate_lazily:
|
|
312
|
+
logger.debug(f"reloading lazy {self} from server")
|
|
313
|
+
self._is_hydrated = False # un-hydrate and re-resolve
|
|
314
|
+
# we don't set an explicit Client here, relying on the default
|
|
315
|
+
# env client to be applied by LoadContext.apply_default
|
|
316
|
+
root_load_context = LoadContext.empty()
|
|
317
|
+
resolver = Resolver()
|
|
318
|
+
await resolver.load(typing.cast(_Object, self), root_load_context)
|
|
319
|
+
else:
|
|
320
|
+
logger.debug(f"reloading non-lazy {self} by replacing client")
|
|
321
|
+
self._client = client or await _Client.from_env()
|
|
316
322
|
self._is_rehydrated = True
|
|
317
323
|
logger.debug(f"rehydrated {self} with client {id(self.client)}")
|
|
318
324
|
elif not self._hydrate_lazily:
|
|
@@ -5,7 +5,7 @@ import platform
|
|
|
5
5
|
import sys
|
|
6
6
|
import urllib.parse
|
|
7
7
|
import warnings
|
|
8
|
-
from collections.abc import AsyncGenerator,
|
|
8
|
+
from collections.abc import AsyncGenerator, Collection, Mapping
|
|
9
9
|
from typing import Any, ClassVar, Optional, TypeVar, Union
|
|
10
10
|
|
|
11
11
|
import grpclib.client
|
|
@@ -14,7 +14,7 @@ from google.protobuf.message import Message
|
|
|
14
14
|
from synchronicity.async_wrap import asynccontextmanager
|
|
15
15
|
|
|
16
16
|
from modal._utils.async_utils import synchronizer
|
|
17
|
-
from modal_proto import
|
|
17
|
+
from modal_proto import api_pb2, modal_api_grpc
|
|
18
18
|
from modal_version import __version__
|
|
19
19
|
|
|
20
20
|
from ._traceback import print_server_warnings
|
|
@@ -70,10 +70,10 @@ class _Client:
|
|
|
70
70
|
_client_from_env: ClassVar[Optional["_Client"]] = None
|
|
71
71
|
_client_from_env_lock: ClassVar[Optional[asyncio.Lock]] = None
|
|
72
72
|
_cancellation_context: TaskContext
|
|
73
|
-
_cancellation_context_event_loop: asyncio.AbstractEventLoop = None
|
|
74
|
-
_stub: Optional[
|
|
75
|
-
_auth_token_manager: _AuthTokenManager = None
|
|
76
|
-
_snapshotted: bool
|
|
73
|
+
_cancellation_context_event_loop: Optional[asyncio.AbstractEventLoop] = None
|
|
74
|
+
_stub: Optional[modal_api_grpc.ModalClientModal]
|
|
75
|
+
_auth_token_manager: Optional[_AuthTokenManager] = None
|
|
76
|
+
_snapshotted: bool = False
|
|
77
77
|
|
|
78
78
|
def __init__(
|
|
79
79
|
self,
|
|
@@ -90,8 +90,8 @@ class _Client:
|
|
|
90
90
|
self._credentials = credentials
|
|
91
91
|
self.version = version
|
|
92
92
|
self._closed = False
|
|
93
|
-
self._stub
|
|
94
|
-
self._auth_token_manager
|
|
93
|
+
self._stub = None
|
|
94
|
+
self._auth_token_manager = None
|
|
95
95
|
self._snapshotted = False
|
|
96
96
|
self._owner_pid = None
|
|
97
97
|
|
|
@@ -163,7 +163,7 @@ class _Client:
|
|
|
163
163
|
|
|
164
164
|
@classmethod
|
|
165
165
|
@asynccontextmanager
|
|
166
|
-
async def anonymous(cls, server_url: str) ->
|
|
166
|
+
async def anonymous(cls, server_url: str) -> AsyncGenerator["_Client", None]:
|
|
167
167
|
"""mdmd:hidden
|
|
168
168
|
Create a connection with no credentials; to be used for token creation.
|
|
169
169
|
"""
|
|
@@ -5,7 +5,6 @@ import google.protobuf.message
|
|
|
5
5
|
import grpclib.client
|
|
6
6
|
import modal._utils.async_utils
|
|
7
7
|
import modal._utils.auth_token_manager
|
|
8
|
-
import modal_proto.api_grpc
|
|
9
8
|
import modal_proto.modal_api_grpc
|
|
10
9
|
import synchronicity.combined_types
|
|
11
10
|
import typing
|
|
@@ -23,9 +22,9 @@ class _Client:
|
|
|
23
22
|
_client_from_env: typing.ClassVar[typing.Optional[_Client]]
|
|
24
23
|
_client_from_env_lock: typing.ClassVar[typing.Optional[asyncio.locks.Lock]]
|
|
25
24
|
_cancellation_context: modal._utils.async_utils.TaskContext
|
|
26
|
-
_cancellation_context_event_loop: asyncio.events.AbstractEventLoop
|
|
27
|
-
_stub: typing.Optional[modal_proto.
|
|
28
|
-
_auth_token_manager: modal._utils.auth_token_manager._AuthTokenManager
|
|
25
|
+
_cancellation_context_event_loop: typing.Optional[asyncio.events.AbstractEventLoop]
|
|
26
|
+
_stub: typing.Optional[modal_proto.modal_api_grpc.ModalClientModal]
|
|
27
|
+
_auth_token_manager: typing.Optional[modal._utils.auth_token_manager._AuthTokenManager]
|
|
29
28
|
_snapshotted: bool
|
|
30
29
|
|
|
31
30
|
def __init__(
|
|
@@ -33,7 +32,7 @@ class _Client:
|
|
|
33
32
|
server_url: str,
|
|
34
33
|
client_type: int,
|
|
35
34
|
credentials: typing.Optional[tuple[str, str]],
|
|
36
|
-
version: str = "1.2.3.
|
|
35
|
+
version: str = "1.2.3.dev13",
|
|
37
36
|
):
|
|
38
37
|
"""mdmd:hidden
|
|
39
38
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -154,9 +153,9 @@ class Client:
|
|
|
154
153
|
_client_from_env: typing.ClassVar[typing.Optional[Client]]
|
|
155
154
|
_client_from_env_lock: typing.ClassVar[typing.Optional[asyncio.locks.Lock]]
|
|
156
155
|
_cancellation_context: modal._utils.async_utils.TaskContext
|
|
157
|
-
_cancellation_context_event_loop: asyncio.events.AbstractEventLoop
|
|
158
|
-
_stub: typing.Optional[modal_proto.
|
|
159
|
-
_auth_token_manager: modal._utils.auth_token_manager._AuthTokenManager
|
|
156
|
+
_cancellation_context_event_loop: typing.Optional[asyncio.events.AbstractEventLoop]
|
|
157
|
+
_stub: typing.Optional[modal_proto.modal_api_grpc.ModalClientModal]
|
|
158
|
+
_auth_token_manager: typing.Optional[modal._utils.auth_token_manager._AuthTokenManager]
|
|
160
159
|
_snapshotted: bool
|
|
161
160
|
|
|
162
161
|
def __init__(
|
|
@@ -164,7 +163,7 @@ class Client:
|
|
|
164
163
|
server_url: str,
|
|
165
164
|
client_type: int,
|
|
166
165
|
credentials: typing.Optional[tuple[str, str]],
|
|
167
|
-
version: str = "1.2.3.
|
|
166
|
+
version: str = "1.2.3.dev13",
|
|
168
167
|
):
|
|
169
168
|
"""mdmd:hidden
|
|
170
169
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -408,7 +408,7 @@ class Function(
|
|
|
408
408
|
|
|
409
409
|
_call_generator: ___call_generator_spec[typing_extensions.Self]
|
|
410
410
|
|
|
411
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
411
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
412
412
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
413
413
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
414
414
|
...
|
|
@@ -417,7 +417,7 @@ class Function(
|
|
|
417
417
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
418
418
|
...
|
|
419
419
|
|
|
420
|
-
remote: __remote_spec[modal._functions.
|
|
420
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
|
421
421
|
|
|
422
422
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
423
423
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -444,7 +444,7 @@ class Function(
|
|
|
444
444
|
"""
|
|
445
445
|
...
|
|
446
446
|
|
|
447
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
447
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
448
448
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
449
449
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
450
450
|
|
|
@@ -468,7 +468,7 @@ class Function(
|
|
|
468
468
|
...
|
|
469
469
|
|
|
470
470
|
_experimental_spawn: ___experimental_spawn_spec[
|
|
471
|
-
modal._functions.
|
|
471
|
+
modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
|
|
472
472
|
]
|
|
473
473
|
|
|
474
474
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
|
|
@@ -477,7 +477,7 @@ class Function(
|
|
|
477
477
|
|
|
478
478
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
|
|
479
479
|
|
|
480
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
480
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
481
481
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
482
482
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
483
483
|
|
|
@@ -498,7 +498,7 @@ class Function(
|
|
|
498
498
|
"""
|
|
499
499
|
...
|
|
500
500
|
|
|
501
|
-
spawn: __spawn_spec[modal._functions.
|
|
501
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
|
502
502
|
|
|
503
503
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
|
504
504
|
"""Return the inner Python object wrapped by this Modal Function."""
|
|
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
|