modal 1.5.2.dev4__tar.gz → 1.5.2.dev5__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.5.2.dev4 → modal-1.5.2.dev5}/PKG-INFO +1 -1
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/blob_utils.py +7 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/client.pyi +2 -2
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/sandbox.py +56 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/sandbox.pyi +55 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_version/__init__.py +1 -1
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/LICENSE +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/README.md +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/__init__.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/__main__.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_billing.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_clustered_functions.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_clustered_functions.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_container_entrypoint.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_environments.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_function_variants.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_functions.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_grpc_client.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_image.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_ipython.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_load_context.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_location.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_logs.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_object.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_output/__init__.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_output/manager.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_output/pty.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_output/rich.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_output/status.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_partial_function.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_resolver.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_resources.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_runtime/__init__.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_runtime/asgi.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_runtime/execution_context.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_runtime/task_lifecycle_manager.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_runtime/telemetry.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_serialization.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_server.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_traceback.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_tunnel.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_tunnel.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_type_manager.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/__init__.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/app_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/async_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/browser_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/curl_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/deprecation.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/docker_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/function_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/git_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/hash_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/http_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/logger.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/mount_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/name_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/package_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/proxy_support.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/shell_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_utils/time_utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_vendor/__init__.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_vendor/tblib.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_vendor/version.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_watcher.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/_workspace.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/app.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/app.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/billing.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/billing.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/builder/2023.12.txt +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/builder/2024.04.txt +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/builder/2024.10.txt +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/builder/2025.06.txt +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/builder/README.md +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/builder/base-images.json +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/call_graph.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/__init__.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/_download.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/_help.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/_traceback.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/app.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/billing.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/bootstrap.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/changelog.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/cluster.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/config.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/container.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/curl.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/dashboard.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/dict.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/endpoint.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/entry_point.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/environment.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/image.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/import_refs.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/launch.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/logo.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/network_file_system.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/profile.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/programs/__init__.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/programs/vscode.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/queues.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/run.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/secret.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/selector.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/shell.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/skills.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/token.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/utils.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/volume.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cli/workspace.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/client.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cls.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/cls.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/config.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/container_process.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/container_process.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/dict.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/dict.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/environments.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/environments.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/exception.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/experimental/__init__.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/experimental/flash.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/experimental/flash.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/experimental/ipython.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/file_io.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/file_io.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/file_pattern_matcher.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/functions.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/functions.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/image.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/image.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/io_streams.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/io_streams.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/mount.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/mount.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/network_file_system.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/network_file_system.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/object.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/object.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/output.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/parallel_map.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/parallel_map.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/partial_function.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/partial_function.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/proxy.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/proxy.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/py.typed +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/queue.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/queue.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/retries.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/runner.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/runner.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/running_app.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/sandbox_fs.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/sandbox_fs.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/schedule.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/scheduler_placement.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/secret.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/secret.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/server.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/server.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/serving.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/serving.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/skills/modal/SKILL.md +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/snapshot.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/snapshot.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/stream_type.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/token_flow.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/token_flow.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/volume.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/volume.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/workspace.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal/workspace.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal.egg-info/requires.txt +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal.egg-info/top_level.txt +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_docs/__init__.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_docs/mdmd/types.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_proto/__init__.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_proto/api_grpc.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_proto/api_pb2.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_proto/py.typed +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/modal_version/__main__.py +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/pyproject.toml +0 -0
- {modal-1.5.2.dev4 → modal-1.5.2.dev5}/setup.cfg +0 -0
|
@@ -138,6 +138,13 @@ async def _upload_to_s3_url(
|
|
|
138
138
|
text = await resp.text()
|
|
139
139
|
except Exception:
|
|
140
140
|
text = "<no body>"
|
|
141
|
+
|
|
142
|
+
if "The Content-MD5 you specified did not match what we received." in text:
|
|
143
|
+
raise ExecutionError(
|
|
144
|
+
"Hash mismatch during upload. This may be caused by files changing while an upload is in "
|
|
145
|
+
"progress. Please try again."
|
|
146
|
+
)
|
|
147
|
+
|
|
141
148
|
raise ExecutionError(f"Put to url {upload_url} failed with status {resp.status}: {text}")
|
|
142
149
|
|
|
143
150
|
# client side ETag checksum verification
|
|
@@ -35,7 +35,7 @@ class _Client:
|
|
|
35
35
|
server_url: str,
|
|
36
36
|
client_type: int,
|
|
37
37
|
credentials: typing.Optional[tuple[str, str]],
|
|
38
|
-
version: str = "1.5.2.
|
|
38
|
+
version: str = "1.5.2.dev5",
|
|
39
39
|
):
|
|
40
40
|
"""mdmd:hidden
|
|
41
41
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -205,7 +205,7 @@ class Client:
|
|
|
205
205
|
server_url: str,
|
|
206
206
|
client_type: int,
|
|
207
207
|
credentials: typing.Optional[tuple[str, str]],
|
|
208
|
-
version: str = "1.5.2.
|
|
208
|
+
version: str = "1.5.2.dev5",
|
|
209
209
|
):
|
|
210
210
|
"""mdmd:hidden
|
|
211
211
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -2282,6 +2282,62 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
2282
2282
|
# Fetch the next batch starting from the end of the current one.
|
|
2283
2283
|
before_timestamp = resp.sandboxes[-1].created_at
|
|
2284
2284
|
|
|
2285
|
+
@staticmethod
|
|
2286
|
+
async def _experimental_list(
|
|
2287
|
+
*, app_id: str | None = None, client: _Client | None = None
|
|
2288
|
+
) -> AsyncGenerator["_Sandbox", None]:
|
|
2289
|
+
"""List v2 Sandboxes in an App.
|
|
2290
|
+
|
|
2291
|
+
This function lists v2 sandboxes, ie sandboxes created via modal.Sandbox._experimental_create.
|
|
2292
|
+
Filtering based on tags is not yet supported.
|
|
2293
|
+
|
|
2294
|
+
Args:
|
|
2295
|
+
app_id: The App to list Sandboxes under.
|
|
2296
|
+
client: Optional client to use for the session.
|
|
2297
|
+
|
|
2298
|
+
Yields:
|
|
2299
|
+
`Sandbox` objects that are currently running in the App.
|
|
2300
|
+
"""
|
|
2301
|
+
if not app_id:
|
|
2302
|
+
raise InvalidError(
|
|
2303
|
+
"Sandbox._experimental_list requires an `app_id`:\n\n"
|
|
2304
|
+
'app = modal.App.lookup("my-app")\n'
|
|
2305
|
+
"Sandbox._experimental_list(app_id=app.app_id)"
|
|
2306
|
+
)
|
|
2307
|
+
|
|
2308
|
+
before_timestamp = None
|
|
2309
|
+
if client is None:
|
|
2310
|
+
client = await _Client.from_env()
|
|
2311
|
+
|
|
2312
|
+
assert client._auth_token_manager
|
|
2313
|
+
while True:
|
|
2314
|
+
req = api_pb2.SandboxListRequest(
|
|
2315
|
+
app_id=app_id,
|
|
2316
|
+
before_timestamp=before_timestamp,
|
|
2317
|
+
include_finished=False,
|
|
2318
|
+
)
|
|
2319
|
+
|
|
2320
|
+
# Fetches a batch of sandboxes. SandboxListV2 authenticates via the
|
|
2321
|
+
# auth-token metadata, like the other V2 sandbox RPCs.
|
|
2322
|
+
auth_token = await client._auth_token_manager.get_token()
|
|
2323
|
+
resp = await client.stub.SandboxListV2(req, metadata=[("x-modal-auth-token", auth_token)])
|
|
2324
|
+
|
|
2325
|
+
if not resp.sandboxes:
|
|
2326
|
+
return
|
|
2327
|
+
|
|
2328
|
+
for sandbox_info in resp.sandboxes:
|
|
2329
|
+
sandbox_info: api_pb2.SandboxInfo
|
|
2330
|
+
obj = _Sandbox._new_hydrated(sandbox_info.id, client, None)
|
|
2331
|
+
# SandboxListV2 only returns V2 sandboxes; mark them as such so
|
|
2332
|
+
# operations like wait/terminate/exec use the V2 RPCs and stdio.
|
|
2333
|
+
obj._is_v2 = True
|
|
2334
|
+
obj._hydrate_metadata_v2()
|
|
2335
|
+
obj._result = sandbox_info.task_info.result
|
|
2336
|
+
yield obj
|
|
2337
|
+
|
|
2338
|
+
# Fetch the next batch starting from the end of the current one.
|
|
2339
|
+
before_timestamp = resp.sandboxes[-1].created_at
|
|
2340
|
+
|
|
2285
2341
|
|
|
2286
2342
|
class _SidecarContainer:
|
|
2287
2343
|
"""Handle to an additional container running in a Sandbox."""
|
|
@@ -942,6 +942,24 @@ class _Sandbox(modal._object._Object):
|
|
|
942
942
|
"""
|
|
943
943
|
...
|
|
944
944
|
|
|
945
|
+
@staticmethod
|
|
946
|
+
def _experimental_list(
|
|
947
|
+
*, app_id: typing.Optional[str] = None, client: typing.Optional[modal.client._Client] = None
|
|
948
|
+
) -> collections.abc.AsyncGenerator[_Sandbox, None]:
|
|
949
|
+
"""List v2 Sandboxes in an App.
|
|
950
|
+
|
|
951
|
+
This function lists v2 sandboxes, ie sandboxes created via modal.Sandbox._experimental_create.
|
|
952
|
+
Filtering based on tags is not yet supported.
|
|
953
|
+
|
|
954
|
+
Args:
|
|
955
|
+
app_id: The App to list Sandboxes under.
|
|
956
|
+
client: Optional client to use for the session.
|
|
957
|
+
|
|
958
|
+
Yields:
|
|
959
|
+
`Sandbox` objects that are currently running in the App.
|
|
960
|
+
"""
|
|
961
|
+
...
|
|
962
|
+
|
|
945
963
|
class _SidecarContainer:
|
|
946
964
|
"""Handle to an additional container running in a Sandbox."""
|
|
947
965
|
|
|
@@ -2790,6 +2808,43 @@ class Sandbox(modal.object.Object):
|
|
|
2790
2808
|
|
|
2791
2809
|
list: typing.ClassVar[__list_spec]
|
|
2792
2810
|
|
|
2811
|
+
class ___experimental_list_spec(typing_extensions.Protocol):
|
|
2812
|
+
def __call__(
|
|
2813
|
+
self, /, *, app_id: typing.Optional[str] = None, client: typing.Optional[modal.client.Client] = None
|
|
2814
|
+
) -> typing.Generator[Sandbox, None, None]:
|
|
2815
|
+
"""List v2 Sandboxes in an App.
|
|
2816
|
+
|
|
2817
|
+
This function lists v2 sandboxes, ie sandboxes created via modal.Sandbox._experimental_create.
|
|
2818
|
+
Filtering based on tags is not yet supported.
|
|
2819
|
+
|
|
2820
|
+
Args:
|
|
2821
|
+
app_id: The App to list Sandboxes under.
|
|
2822
|
+
client: Optional client to use for the session.
|
|
2823
|
+
|
|
2824
|
+
Yields:
|
|
2825
|
+
`Sandbox` objects that are currently running in the App.
|
|
2826
|
+
"""
|
|
2827
|
+
...
|
|
2828
|
+
|
|
2829
|
+
def aio(
|
|
2830
|
+
self, /, *, app_id: typing.Optional[str] = None, client: typing.Optional[modal.client.Client] = None
|
|
2831
|
+
) -> collections.abc.AsyncGenerator[Sandbox, None]:
|
|
2832
|
+
"""List v2 Sandboxes in an App.
|
|
2833
|
+
|
|
2834
|
+
This function lists v2 sandboxes, ie sandboxes created via modal.Sandbox._experimental_create.
|
|
2835
|
+
Filtering based on tags is not yet supported.
|
|
2836
|
+
|
|
2837
|
+
Args:
|
|
2838
|
+
app_id: The App to list Sandboxes under.
|
|
2839
|
+
client: Optional client to use for the session.
|
|
2840
|
+
|
|
2841
|
+
Yields:
|
|
2842
|
+
`Sandbox` objects that are currently running in the App.
|
|
2843
|
+
"""
|
|
2844
|
+
...
|
|
2845
|
+
|
|
2846
|
+
_experimental_list: typing.ClassVar[___experimental_list_spec]
|
|
2847
|
+
|
|
2793
2848
|
_default_image: modal._image._Image
|
|
2794
2849
|
|
|
2795
2850
|
_MAIN_CONTAINER_NAME: str
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|