modal 1.5.2.dev5__tar.gz → 1.5.2.dev7__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.dev5 → modal-1.5.2.dev7}/PKG-INFO +1 -1
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/image.py +97 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/client.pyi +2 -2
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/sandbox.py +0 -1
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_docs/mdmd/mdmd.py +4 -2
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_proto/api_grpc.py +48 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_proto/api_pb2.py +998 -958
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_proto/api_pb2.pyi +64 -1
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_proto/api_pb2_grpc.py +99 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_proto/api_pb2_grpc.pyi +30 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_proto/modal_api_grpc.py +3 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_version/__init__.py +1 -1
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/LICENSE +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/README.md +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/__init__.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/__main__.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_billing.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_clustered_functions.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_clustered_functions.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_container_entrypoint.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_environments.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_function_variants.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_functions.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_grpc_client.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_image.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_ipython.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_load_context.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_location.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_logs.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_object.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_output/__init__.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_output/manager.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_output/pty.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_output/rich.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_output/status.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_partial_function.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_resolver.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_resources.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_runtime/__init__.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_runtime/asgi.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_runtime/execution_context.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_runtime/task_lifecycle_manager.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_runtime/telemetry.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_serialization.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_server.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_traceback.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_tunnel.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_tunnel.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_type_manager.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/__init__.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/app_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/async_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/blob_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/browser_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/curl_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/deprecation.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/docker_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/function_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/git_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/hash_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/http_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/logger.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/mount_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/name_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/package_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/proxy_support.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/shell_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_utils/time_utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_vendor/__init__.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_vendor/tblib.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_vendor/version.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_watcher.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/_workspace.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/app.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/app.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/billing.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/billing.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/builder/2023.12.txt +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/builder/2024.04.txt +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/builder/2024.10.txt +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/builder/2025.06.txt +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/builder/README.md +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/builder/base-images.json +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/call_graph.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/__init__.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/_download.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/_help.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/_traceback.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/app.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/billing.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/bootstrap.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/changelog.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/cluster.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/config.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/container.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/curl.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/dashboard.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/dict.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/endpoint.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/entry_point.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/environment.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/import_refs.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/launch.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/logo.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/network_file_system.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/profile.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/programs/__init__.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/programs/vscode.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/queues.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/run.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/secret.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/selector.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/shell.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/skills.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/token.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/utils.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/volume.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cli/workspace.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/client.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cls.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/cls.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/config.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/container_process.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/container_process.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/dict.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/dict.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/environments.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/environments.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/exception.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/experimental/__init__.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/experimental/flash.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/experimental/flash.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/experimental/ipython.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/file_io.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/file_io.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/file_pattern_matcher.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/functions.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/functions.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/image.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/image.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/io_streams.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/io_streams.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/mount.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/mount.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/network_file_system.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/network_file_system.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/object.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/object.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/output.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/parallel_map.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/parallel_map.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/partial_function.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/partial_function.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/proxy.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/proxy.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/py.typed +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/queue.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/queue.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/retries.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/runner.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/runner.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/running_app.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/sandbox.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/sandbox_fs.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/sandbox_fs.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/schedule.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/scheduler_placement.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/secret.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/secret.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/server.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/server.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/serving.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/serving.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/skills/modal/SKILL.md +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/snapshot.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/snapshot.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/stream_type.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/token_flow.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/token_flow.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/volume.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/volume.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/workspace.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal/workspace.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal.egg-info/requires.txt +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal.egg-info/top_level.txt +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_docs/__init__.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_docs/mdmd/types.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_proto/__init__.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_proto/py.typed +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/modal_version/__main__.py +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/pyproject.toml +0 -0
- {modal-1.5.2.dev5 → modal-1.5.2.dev7}/setup.cfg +0 -0
|
@@ -10,10 +10,12 @@ from typing import Optional
|
|
|
10
10
|
import click
|
|
11
11
|
|
|
12
12
|
from modal._environments import ensure_env
|
|
13
|
+
from modal._image import _parse_named_image_ref
|
|
13
14
|
from modal._utils.async_utils import synchronizer
|
|
14
15
|
from modal._utils.time_utils import timestamp_to_localized_str
|
|
15
16
|
from modal.cli.utils import display_table, env_option
|
|
16
17
|
from modal.client import _Client
|
|
18
|
+
from modal.exception import InvalidError
|
|
17
19
|
from modal.output import OutputManager
|
|
18
20
|
from modal_proto import api_pb2
|
|
19
21
|
|
|
@@ -21,6 +23,8 @@ from ._help import ModalGroup
|
|
|
21
23
|
|
|
22
24
|
IMAGE_NAMES_LIST_PAGE_SIZE = 100
|
|
23
25
|
IMAGE_NAMES_LIST_PAGE_DELAY_SECONDS = 1.0
|
|
26
|
+
IMAGE_NAMES_HISTORY_PAGE_SIZE = 100
|
|
27
|
+
IMAGE_NAMES_HISTORY_PAGE_DELAY_SECONDS = 1.0
|
|
24
28
|
|
|
25
29
|
image_cli = ModalGroup(name="image", help="Manage Images.")
|
|
26
30
|
image_names_cli = ModalGroup(name="names", help="Manage Modal Image names.")
|
|
@@ -49,6 +53,20 @@ def _tag_item_row(item: api_pb2.ImageListTagsItem) -> tuple[str, str, str]:
|
|
|
49
53
|
)
|
|
50
54
|
|
|
51
55
|
|
|
56
|
+
def _history_item_json(item: api_pb2.ImageTagRevisionsItem) -> dict[str, str]:
|
|
57
|
+
return {
|
|
58
|
+
"image_id": item.image_id,
|
|
59
|
+
"published_at": timestamp_to_localized_str(item.created_at, True) or "-",
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _history_item_row(item: api_pb2.ImageTagRevisionsItem) -> tuple[str, str]:
|
|
64
|
+
return (
|
|
65
|
+
item.image_id,
|
|
66
|
+
timestamp_to_localized_str(item.created_at, False) or "-",
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
|
|
52
70
|
async def _iter_tag_pages(
|
|
53
71
|
client: _Client, env: str, prefix: str
|
|
54
72
|
) -> AsyncIterator[tuple[str, list[api_pb2.ImageListTagsItem]]]:
|
|
@@ -73,6 +91,36 @@ async def _iter_tag_pages(
|
|
|
73
91
|
await asyncio.sleep(IMAGE_NAMES_LIST_PAGE_DELAY_SECONDS)
|
|
74
92
|
|
|
75
93
|
|
|
94
|
+
async def _fetch_history_page(
|
|
95
|
+
client: _Client,
|
|
96
|
+
env: str,
|
|
97
|
+
tag: str,
|
|
98
|
+
page_token: str,
|
|
99
|
+
) -> api_pb2.ImageTagRevisionsResponse:
|
|
100
|
+
return await client.stub.ImageTagRevisions(
|
|
101
|
+
api_pb2.ImageTagRevisionsRequest(
|
|
102
|
+
tag=tag,
|
|
103
|
+
environment_name=env,
|
|
104
|
+
max_objects=IMAGE_NAMES_HISTORY_PAGE_SIZE,
|
|
105
|
+
page_token=page_token,
|
|
106
|
+
)
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
async def _iter_history_pages(
|
|
111
|
+
client: _Client, env: str, tag: str, first_page: api_pb2.ImageTagRevisionsResponse
|
|
112
|
+
) -> AsyncIterator[api_pb2.ImageTagRevisionsResponse]:
|
|
113
|
+
response = first_page
|
|
114
|
+
|
|
115
|
+
while True:
|
|
116
|
+
yield response
|
|
117
|
+
|
|
118
|
+
if not response.next_page_token:
|
|
119
|
+
return
|
|
120
|
+
await asyncio.sleep(IMAGE_NAMES_HISTORY_PAGE_DELAY_SECONDS)
|
|
121
|
+
response = await _fetch_history_page(client, env, tag, response.next_page_token)
|
|
122
|
+
|
|
123
|
+
|
|
76
124
|
@image_names_cli.command("list", help="List named Images.")
|
|
77
125
|
@env_option
|
|
78
126
|
@click.option("--prefix", default="", help="Only include named image tags that start with this prefix.")
|
|
@@ -108,3 +156,52 @@ async def list_(
|
|
|
108
156
|
count += len(page_items)
|
|
109
157
|
|
|
110
158
|
_print_result_summary(count)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
@image_names_cli.command("history", help="Show publishing history for a named Image.", hidden=True)
|
|
162
|
+
@click.argument("name")
|
|
163
|
+
@env_option
|
|
164
|
+
@click.option("--json", is_flag=True, default=False)
|
|
165
|
+
@synchronizer.create_blocking
|
|
166
|
+
async def history(
|
|
167
|
+
name: str,
|
|
168
|
+
env: Optional[str] = None,
|
|
169
|
+
json: bool = False,
|
|
170
|
+
):
|
|
171
|
+
env = ensure_env(env)
|
|
172
|
+
try:
|
|
173
|
+
name_tag = _parse_named_image_ref(name)
|
|
174
|
+
except InvalidError as exc:
|
|
175
|
+
raise click.UsageError(str(exc)) from exc
|
|
176
|
+
client = await _Client.from_env()
|
|
177
|
+
|
|
178
|
+
first_page = await _fetch_history_page(client, env, name_tag, "")
|
|
179
|
+
if not first_page.items:
|
|
180
|
+
raise click.ClickException(f"No publishing history found for named image {first_page.tag!r}.")
|
|
181
|
+
|
|
182
|
+
if json:
|
|
183
|
+
click.echo("[", nl=False)
|
|
184
|
+
count = 0
|
|
185
|
+
async for response in _iter_history_pages(client, env, name_tag, first_page):
|
|
186
|
+
for item in response.items:
|
|
187
|
+
if count:
|
|
188
|
+
click.echo(",", nl=False)
|
|
189
|
+
click.echo(json_module.dumps(_history_item_json(item)), nl=False)
|
|
190
|
+
count += 1
|
|
191
|
+
click.echo("]")
|
|
192
|
+
return
|
|
193
|
+
|
|
194
|
+
count = 0
|
|
195
|
+
show_title = True
|
|
196
|
+
async for response in _iter_history_pages(client, env, name_tag, first_page):
|
|
197
|
+
if response.items:
|
|
198
|
+
title = f"History for {response.tag}" if show_title else ""
|
|
199
|
+
display_table(
|
|
200
|
+
["Image ID", "Published at"],
|
|
201
|
+
[_history_item_row(item) for item in response.items],
|
|
202
|
+
title=title,
|
|
203
|
+
)
|
|
204
|
+
show_title = False
|
|
205
|
+
count += len(response.items)
|
|
206
|
+
|
|
207
|
+
_print_result_summary(count)
|
|
@@ -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.dev7",
|
|
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.dev7",
|
|
209
209
|
):
|
|
210
210
|
"""mdmd:hidden
|
|
211
211
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -1284,7 +1284,6 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
1284
1284
|
outbound_domain_allowlist: List of domain names the Sandbox is allowed to access. Supports
|
|
1285
1285
|
wildcard prefixes (``*.``); a bare ``"*"`` allows all domains.
|
|
1286
1286
|
"""
|
|
1287
|
-
self._ensure_v1("_experimental_set_outbound_network_policy")
|
|
1288
1287
|
task_id = await self._get_task_id()
|
|
1289
1288
|
command_router_client = await self._get_command_router_client(task_id)
|
|
1290
1289
|
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
|
|
4
4
|
import html
|
|
5
5
|
import inspect
|
|
6
|
+
import logging
|
|
6
7
|
import re
|
|
7
8
|
import typing
|
|
8
|
-
import warnings
|
|
9
9
|
from collections.abc import Callable
|
|
10
10
|
from enum import Enum, EnumMeta
|
|
11
11
|
from types import ModuleType
|
|
@@ -15,6 +15,8 @@ import synchronicity.synchronizer
|
|
|
15
15
|
from .signatures import get_signature, parse_params_from_signature, strip_signature
|
|
16
16
|
from .types import ParsedDoc, ParsedParam, ParsedRaise
|
|
17
17
|
|
|
18
|
+
logger = logging.getLogger(__name__)
|
|
19
|
+
|
|
18
20
|
|
|
19
21
|
def _escape_svelte_html_attr(value: str) -> str:
|
|
20
22
|
"""Escape text for double-quoted HTML / Svelte component attributes.
|
|
@@ -475,7 +477,7 @@ def module_str(header, module, title_level="#", filter_items: Callable[[ModuleTy
|
|
|
475
477
|
object_docs.append(f"{member_title_level} {qual_name}\n\n")
|
|
476
478
|
object_docs.append(item_doc)
|
|
477
479
|
else:
|
|
478
|
-
|
|
480
|
+
logger.warning(f"[mdmd] Not sure how to document {name} ({item.__class__.__name__})")
|
|
479
481
|
|
|
480
482
|
if object_docs:
|
|
481
483
|
return "".join(header + object_docs)
|
|
@@ -891,6 +891,18 @@ class ModalClientBase(abc.ABC):
|
|
|
891
891
|
async def WorkspaceNameLookup(self, stream: 'grpclib.server.Stream[google.protobuf.empty_pb2.Empty, modal_proto.api_pb2.WorkspaceNameLookupResponse]') -> None:
|
|
892
892
|
pass
|
|
893
893
|
|
|
894
|
+
@abc.abstractmethod
|
|
895
|
+
async def WorkspaceSetDefaultEnvironment(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.WorkspaceSetDefaultEnvironmentRequest, google.protobuf.empty_pb2.Empty]') -> None:
|
|
896
|
+
pass
|
|
897
|
+
|
|
898
|
+
@abc.abstractmethod
|
|
899
|
+
async def WorkspaceSetImageBuilderVersion(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.WorkspaceSetImageBuilderVersionRequest, modal_proto.api_pb2.WorkspaceSetImageBuilderVersionResponse]') -> None:
|
|
900
|
+
pass
|
|
901
|
+
|
|
902
|
+
@abc.abstractmethod
|
|
903
|
+
async def WorkspaceSettings(self, stream: 'grpclib.server.Stream[google.protobuf.empty_pb2.Empty, modal_proto.api_pb2.WorkspaceSettingsResponse]') -> None:
|
|
904
|
+
pass
|
|
905
|
+
|
|
894
906
|
def __mapping__(self) -> typing.Dict[str, grpclib.const.Handler]:
|
|
895
907
|
return {
|
|
896
908
|
'/modal.client.ModalClient/AppClientDisconnect': grpclib.const.Handler(
|
|
@@ -2201,6 +2213,24 @@ class ModalClientBase(abc.ABC):
|
|
|
2201
2213
|
google.protobuf.empty_pb2.Empty,
|
|
2202
2214
|
modal_proto.api_pb2.WorkspaceNameLookupResponse,
|
|
2203
2215
|
),
|
|
2216
|
+
'/modal.client.ModalClient/WorkspaceSetDefaultEnvironment': grpclib.const.Handler(
|
|
2217
|
+
self.WorkspaceSetDefaultEnvironment,
|
|
2218
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
|
2219
|
+
modal_proto.api_pb2.WorkspaceSetDefaultEnvironmentRequest,
|
|
2220
|
+
google.protobuf.empty_pb2.Empty,
|
|
2221
|
+
),
|
|
2222
|
+
'/modal.client.ModalClient/WorkspaceSetImageBuilderVersion': grpclib.const.Handler(
|
|
2223
|
+
self.WorkspaceSetImageBuilderVersion,
|
|
2224
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
|
2225
|
+
modal_proto.api_pb2.WorkspaceSetImageBuilderVersionRequest,
|
|
2226
|
+
modal_proto.api_pb2.WorkspaceSetImageBuilderVersionResponse,
|
|
2227
|
+
),
|
|
2228
|
+
'/modal.client.ModalClient/WorkspaceSettings': grpclib.const.Handler(
|
|
2229
|
+
self.WorkspaceSettings,
|
|
2230
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
|
2231
|
+
google.protobuf.empty_pb2.Empty,
|
|
2232
|
+
modal_proto.api_pb2.WorkspaceSettingsResponse,
|
|
2233
|
+
),
|
|
2204
2234
|
}
|
|
2205
2235
|
|
|
2206
2236
|
|
|
@@ -3515,3 +3545,21 @@ class ModalClientStub:
|
|
|
3515
3545
|
google.protobuf.empty_pb2.Empty,
|
|
3516
3546
|
modal_proto.api_pb2.WorkspaceNameLookupResponse,
|
|
3517
3547
|
)
|
|
3548
|
+
self.WorkspaceSetDefaultEnvironment = grpclib.client.UnaryUnaryMethod(
|
|
3549
|
+
channel,
|
|
3550
|
+
'/modal.client.ModalClient/WorkspaceSetDefaultEnvironment',
|
|
3551
|
+
modal_proto.api_pb2.WorkspaceSetDefaultEnvironmentRequest,
|
|
3552
|
+
google.protobuf.empty_pb2.Empty,
|
|
3553
|
+
)
|
|
3554
|
+
self.WorkspaceSetImageBuilderVersion = grpclib.client.UnaryUnaryMethod(
|
|
3555
|
+
channel,
|
|
3556
|
+
'/modal.client.ModalClient/WorkspaceSetImageBuilderVersion',
|
|
3557
|
+
modal_proto.api_pb2.WorkspaceSetImageBuilderVersionRequest,
|
|
3558
|
+
modal_proto.api_pb2.WorkspaceSetImageBuilderVersionResponse,
|
|
3559
|
+
)
|
|
3560
|
+
self.WorkspaceSettings = grpclib.client.UnaryUnaryMethod(
|
|
3561
|
+
channel,
|
|
3562
|
+
'/modal.client.ModalClient/WorkspaceSettings',
|
|
3563
|
+
google.protobuf.empty_pb2.Empty,
|
|
3564
|
+
modal_proto.api_pb2.WorkspaceSettingsResponse,
|
|
3565
|
+
)
|