modal 1.5.6.dev17__tar.gz → 1.5.6.dev18__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.6.dev17 → modal-1.5.6.dev18}/PKG-INFO +1 -1
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_workspace.py +8 -3
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/workspace.py +52 -8
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/client.pyi +2 -2
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/functions.pyi +6 -6
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/types.py +2 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/workspace.pyi +15 -5
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_proto/api_pb2.py +1403 -1379
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_proto/api_pb2.pyi +48 -1
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_version/__init__.py +1 -1
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/LICENSE +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/README.md +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/__init__.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/__main__.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_billing.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_clustered_functions.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_clustered_functions.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_container_entrypoint.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_environments.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_function_variants.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_functions.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_grpc_client.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_image.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_ipython.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_load_context.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_location.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_logs.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_logs_manager.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_logs_manager.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_object.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_output/__init__.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_output/manager.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_output/pty.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_output/rich.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_output/status.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_partial_function.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_resolver.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_resources.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_runtime/__init__.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_runtime/asgi.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_runtime/execution_context.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_runtime/task_lifecycle_manager.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_runtime/telemetry.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_serialization.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_server.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_supports_logs.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_traceback.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_tunnel.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_tunnel.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_type_manager.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/__init__.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/app_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/async_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/blob_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/browser_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/curl_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/deprecation.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/display_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/docker_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/function_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/git_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/hash_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/http_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/idle_countdown.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/logger.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/mount_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/name_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/package_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/proxy_support.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/shell_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_utils/time_utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_vendor/__init__.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_vendor/tblib.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_vendor/version.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/_watcher.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/app.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/app.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/billing.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/billing.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/builder/2023.12.txt +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/builder/2024.04.txt +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/builder/2024.10.txt +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/builder/2025.06.txt +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/builder/README.md +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/builder/base-images.json +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/call_graph.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/__init__.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/_download.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/_help.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/_logs.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/_stats.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/_traceback.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/app.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/billing.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/bootstrap.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/changelog.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/cluster.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/config.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/container.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/curl.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/dashboard.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/dict.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/endpoint.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/entry_point.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/environment.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/function.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/image.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/import_refs.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/launch.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/logo.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/network_file_system.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/profile.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/programs/__init__.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/programs/vscode.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/queues.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/run.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/secret.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/selector.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/server.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/shell.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/skills.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/token.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/utils.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cli/volume.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/client.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cls.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/cls.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/config.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/container_process.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/container_process.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/dict.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/dict.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/environments.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/environments.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/exception.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/experimental/__init__.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/experimental/flash.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/experimental/flash.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/experimental/ipython.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/file_pattern_matcher.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/functions.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/image.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/image.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/io_streams.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/io_streams.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/mount.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/mount.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/network_file_system.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/network_file_system.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/object.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/object.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/output.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/parallel_map.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/parallel_map.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/partial_function.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/partial_function.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/proxy.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/proxy.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/py.typed +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/queue.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/queue.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/retries.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/runner.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/runner.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/running_app.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/sandbox.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/sandbox.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/sandbox_fs.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/sandbox_fs.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/schedule.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/scheduler_placement.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/secret.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/secret.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/server.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/server.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/serving.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/serving.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/skills/modal/SKILL.md +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/snapshot.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/snapshot.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/stream_type.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/token_flow.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/token_flow.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/volume.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/volume.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal/workspace.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal.egg-info/requires.txt +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal.egg-info/top_level.txt +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_docs/__init__.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_docs/mdmd/types.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_docs/reference_intro.md +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_proto/__init__.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_proto/api_grpc.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_proto/py.typed +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/modal_version/__main__.py +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/pyproject.toml +0 -0
- {modal-1.5.6.dev17 → modal-1.5.6.dev18}/setup.cfg +0 -0
|
@@ -137,17 +137,20 @@ class _WorkspaceProxyTokenManager:
|
|
|
137
137
|
"""mdmd:hidden"""
|
|
138
138
|
self._workspace = workspace
|
|
139
139
|
|
|
140
|
-
async def create(self) -> TokenData:
|
|
140
|
+
async def create(self, name: str = "") -> TokenData:
|
|
141
141
|
"""Create a new proxy token for the Workspace.
|
|
142
142
|
|
|
143
|
+
Args:
|
|
144
|
+
name: An optional name to help identify the token.
|
|
145
|
+
|
|
143
146
|
Examples:
|
|
144
147
|
```python notest
|
|
145
|
-
token = modal.Workspace.from_context().proxy_tokens.create()
|
|
148
|
+
token = modal.Workspace.from_context().proxy_tokens.create(name="production-webhooks")
|
|
146
149
|
print(token.token_id, token.token_secret)
|
|
147
150
|
```
|
|
148
151
|
"""
|
|
149
152
|
await self._workspace.hydrate()
|
|
150
|
-
resp = await self._workspace.client.stub.WebhookTokenCreate(api_pb2.WebhookTokenCreateRequest())
|
|
153
|
+
resp = await self._workspace.client.stub.WebhookTokenCreate(api_pb2.WebhookTokenCreateRequest(name=name))
|
|
151
154
|
return TokenData(token_id=resp.token_id, token_secret=resp.token_secret)
|
|
152
155
|
|
|
153
156
|
async def list(self, environment_name: Optional[str] = None) -> builtins.list[ProxyTokenInfo]:
|
|
@@ -180,6 +183,8 @@ class _WorkspaceProxyTokenManager:
|
|
|
180
183
|
token_id=token.token_id,
|
|
181
184
|
created_at=timestamp_to_localized_dt(token.created_at),
|
|
182
185
|
scoped=token.scoped,
|
|
186
|
+
name=token.name,
|
|
187
|
+
created_by=token.created_by.username,
|
|
183
188
|
)
|
|
184
189
|
for token in resp.tokens
|
|
185
190
|
]
|
|
@@ -76,15 +76,23 @@ proxy_tokens_cli = ModalGroup(name="proxy-tokens", help=PROXY_TOKENS_HELP_TEXT)
|
|
|
76
76
|
workspace_cli.add_command(proxy_tokens_cli)
|
|
77
77
|
|
|
78
78
|
|
|
79
|
-
@proxy_tokens_cli.command("create"
|
|
79
|
+
@proxy_tokens_cli.command("create")
|
|
80
|
+
@click.option("--name", default="", help="Name to help identify the token.")
|
|
80
81
|
@click.option("--json", is_flag=True, default=False)
|
|
81
|
-
def proxy_tokens_create(*, json: bool = False):
|
|
82
|
+
def proxy_tokens_create(*, name: str = "", json: bool = False):
|
|
82
83
|
"""Create a proxy token in the current Workspace.
|
|
83
84
|
|
|
84
85
|
The new token's ID and secret will be printed to stdout. The secret is only
|
|
85
86
|
shown at creation time and cannot be retrieved later.
|
|
87
|
+
|
|
88
|
+
Examples:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
modal workspace proxy-tokens create --name production-webhooks
|
|
92
|
+
modal workspace proxy-tokens create --json
|
|
93
|
+
```
|
|
86
94
|
"""
|
|
87
|
-
token = Workspace.from_context().proxy_tokens.create()
|
|
95
|
+
token = Workspace.from_context().proxy_tokens.create(name=name)
|
|
88
96
|
output_manager = OutputManager.get()
|
|
89
97
|
bearer = f"Bearer {token.token_id}.{token.token_secret}"
|
|
90
98
|
if json:
|
|
@@ -104,7 +112,7 @@ def proxy_tokens_create(*, json: bool = False):
|
|
|
104
112
|
output_manager.print(table)
|
|
105
113
|
|
|
106
114
|
|
|
107
|
-
@proxy_tokens_cli.command("list"
|
|
115
|
+
@proxy_tokens_cli.command("list")
|
|
108
116
|
@click.option(
|
|
109
117
|
"-e",
|
|
110
118
|
"--environment",
|
|
@@ -113,39 +121,75 @@ def proxy_tokens_create(*, json: bool = False):
|
|
|
113
121
|
)
|
|
114
122
|
@click.option("--json", is_flag=True, default=False)
|
|
115
123
|
def proxy_tokens_list(environment: str | None = None, json: bool = False):
|
|
124
|
+
"""List the proxy tokens of the current Workspace.
|
|
125
|
+
|
|
126
|
+
Examples:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
modal workspace proxy-tokens list
|
|
130
|
+
modal workspace proxy-tokens list --environment prod
|
|
131
|
+
modal workspace proxy-tokens list --json
|
|
132
|
+
```
|
|
133
|
+
"""
|
|
116
134
|
tokens = Workspace.from_context().proxy_tokens.list(environment_name=environment)
|
|
117
135
|
# Emit a real boolean for JSON output, but a string for the rich table (which can't render a bare bool).
|
|
118
136
|
rows = [
|
|
119
137
|
[
|
|
138
|
+
token.name,
|
|
120
139
|
token.token_id,
|
|
121
140
|
timestamp_to_localized_str(token.created_at.timestamp(), json),
|
|
141
|
+
token.created_by,
|
|
122
142
|
token.scoped if json else str(token.scoped),
|
|
123
143
|
]
|
|
124
144
|
for token in tokens
|
|
125
145
|
]
|
|
126
|
-
display_table(["Token ID", "Created at", "Scoped"], rows, json=json)
|
|
146
|
+
display_table(["Name", "Token ID", "Created at", "Created by", "Scoped"], rows, json=json)
|
|
127
147
|
|
|
128
148
|
|
|
129
|
-
@proxy_tokens_cli.command("allow",
|
|
149
|
+
@proxy_tokens_cli.command("allow", no_args_is_help=True)
|
|
130
150
|
@click.argument("token_id")
|
|
131
151
|
@click.argument("environment_name")
|
|
132
152
|
def proxy_tokens_allow(token_id: str, environment_name: str):
|
|
153
|
+
"""Allow a proxy token to authenticate to an environment.
|
|
154
|
+
|
|
155
|
+
Example:
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
modal workspace proxy-tokens allow wk-123 prod
|
|
159
|
+
```
|
|
160
|
+
"""
|
|
133
161
|
Workspace.from_context().proxy_tokens.allow(token_id, environment_name)
|
|
134
162
|
rich.print(f"[green]✓[/green] Allowed proxy token {token_id!r} to authenticate to environment {environment_name!r}")
|
|
135
163
|
|
|
136
164
|
|
|
137
|
-
@proxy_tokens_cli.command("revoke",
|
|
165
|
+
@proxy_tokens_cli.command("revoke", no_args_is_help=True)
|
|
138
166
|
@click.argument("token_id")
|
|
139
167
|
@click.argument("environment_name")
|
|
140
168
|
def proxy_tokens_revoke(token_id: str, environment_name: str):
|
|
169
|
+
"""Revoke a proxy token's access to an environment.
|
|
170
|
+
|
|
171
|
+
Example:
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
modal workspace proxy-tokens revoke wk-123 prod
|
|
175
|
+
```
|
|
176
|
+
"""
|
|
141
177
|
Workspace.from_context().proxy_tokens.revoke(token_id, environment_name)
|
|
142
178
|
rich.print(f"[green]✓[/green] Revoked proxy token {token_id!r} access to environment {environment_name!r}")
|
|
143
179
|
|
|
144
180
|
|
|
145
|
-
@proxy_tokens_cli.command("delete",
|
|
181
|
+
@proxy_tokens_cli.command("delete", no_args_is_help=True)
|
|
146
182
|
@click.argument("token_id")
|
|
147
183
|
@yes_option
|
|
148
184
|
def proxy_tokens_delete(token_id: str, yes: bool = False):
|
|
185
|
+
"""Delete a proxy token from the current Workspace.
|
|
186
|
+
|
|
187
|
+
Example:
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
modal workspace proxy-tokens delete wk-123
|
|
191
|
+
```
|
|
192
|
+
"""
|
|
149
193
|
if not yes:
|
|
150
194
|
message = (
|
|
151
195
|
f"Are you sure you want to delete proxy token {token_id!r}? Requests using this token will be rejected."
|
|
@@ -77,7 +77,7 @@ class _Client:
|
|
|
77
77
|
server_url: str,
|
|
78
78
|
client_type: int,
|
|
79
79
|
credentials: typing.Optional[tuple[str, str]],
|
|
80
|
-
version: str = "1.5.6.
|
|
80
|
+
version: str = "1.5.6.dev18",
|
|
81
81
|
*,
|
|
82
82
|
oauth_credentials: typing.Optional[_OAuthCredentials] = None,
|
|
83
83
|
):
|
|
@@ -277,7 +277,7 @@ class Client:
|
|
|
277
277
|
server_url: str,
|
|
278
278
|
client_type: int,
|
|
279
279
|
credentials: typing.Optional[tuple[str, str]],
|
|
280
|
-
version: str = "1.5.6.
|
|
280
|
+
version: str = "1.5.6.dev18",
|
|
281
281
|
*,
|
|
282
282
|
oauth_credentials: typing.Optional[_OAuthCredentials] = None,
|
|
283
283
|
):
|
|
@@ -653,7 +653,7 @@ class Function(
|
|
|
653
653
|
|
|
654
654
|
_call_generator: ___call_generator_spec
|
|
655
655
|
|
|
656
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
656
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
657
657
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
658
658
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result.
|
|
659
659
|
|
|
@@ -678,7 +678,7 @@ class Function(
|
|
|
678
678
|
"""
|
|
679
679
|
...
|
|
680
680
|
|
|
681
|
-
remote: __remote_spec[modal._functions.
|
|
681
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P]
|
|
682
682
|
|
|
683
683
|
class __remote_gen_spec(typing_extensions.Protocol):
|
|
684
684
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -728,7 +728,7 @@ class Function(
|
|
|
728
728
|
"""
|
|
729
729
|
...
|
|
730
730
|
|
|
731
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
731
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
732
732
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
733
733
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
734
734
|
|
|
@@ -761,7 +761,7 @@ class Function(
|
|
|
761
761
|
"""
|
|
762
762
|
...
|
|
763
763
|
|
|
764
|
-
_experimental_spawn: ___experimental_spawn_spec[modal._functions.
|
|
764
|
+
_experimental_spawn: ___experimental_spawn_spec[modal._functions.ReturnType, modal._functions.P]
|
|
765
765
|
|
|
766
766
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
|
|
767
767
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
|
|
@@ -769,7 +769,7 @@ class Function(
|
|
|
769
769
|
|
|
770
770
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
|
|
771
771
|
|
|
772
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
772
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
773
773
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
774
774
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
775
775
|
|
|
@@ -802,7 +802,7 @@ class Function(
|
|
|
802
802
|
"""
|
|
803
803
|
...
|
|
804
804
|
|
|
805
|
-
spawn: __spawn_spec[modal._functions.
|
|
805
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P]
|
|
806
806
|
|
|
807
807
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
|
808
808
|
"""Return the inner Python object wrapped by this Modal Function.
|
|
@@ -12,8 +12,12 @@ class ProxyTokenInfo:
|
|
|
12
12
|
token_id: str
|
|
13
13
|
created_at: datetime.datetime
|
|
14
14
|
scoped: bool
|
|
15
|
+
name: str
|
|
16
|
+
created_by: str
|
|
15
17
|
|
|
16
|
-
def __init__(
|
|
18
|
+
def __init__(
|
|
19
|
+
self, token_id: str, created_at: datetime.datetime, scoped: bool, name: str = "", created_by: str = ""
|
|
20
|
+
) -> None:
|
|
17
21
|
"""Initialize self. See help(type(self)) for accurate signature."""
|
|
18
22
|
...
|
|
19
23
|
|
|
@@ -395,23 +399,29 @@ class WorkspaceProxyTokenManager:
|
|
|
395
399
|
...
|
|
396
400
|
|
|
397
401
|
class __create_spec(typing_extensions.Protocol):
|
|
398
|
-
def __call__(self,
|
|
402
|
+
def __call__(self, /, name: str = "") -> modal.types.TokenData:
|
|
399
403
|
"""Create a new proxy token for the Workspace.
|
|
400
404
|
|
|
405
|
+
Args:
|
|
406
|
+
name: An optional name to help identify the token.
|
|
407
|
+
|
|
401
408
|
Examples:
|
|
402
409
|
```python notest
|
|
403
|
-
token = modal.Workspace.from_context().proxy_tokens.create()
|
|
410
|
+
token = modal.Workspace.from_context().proxy_tokens.create(name="production-webhooks")
|
|
404
411
|
print(token.token_id, token.token_secret)
|
|
405
412
|
```
|
|
406
413
|
"""
|
|
407
414
|
...
|
|
408
415
|
|
|
409
|
-
async def aio(self,
|
|
416
|
+
async def aio(self, /, name: str = "") -> modal.types.TokenData:
|
|
410
417
|
"""Create a new proxy token for the Workspace.
|
|
411
418
|
|
|
419
|
+
Args:
|
|
420
|
+
name: An optional name to help identify the token.
|
|
421
|
+
|
|
412
422
|
Examples:
|
|
413
423
|
```python notest
|
|
414
|
-
token = modal.Workspace.from_context().proxy_tokens.create()
|
|
424
|
+
token = modal.Workspace.from_context().proxy_tokens.create(name="production-webhooks")
|
|
415
425
|
print(token.token_id, token.token_secret)
|
|
416
426
|
```
|
|
417
427
|
"""
|