modal 1.1.5.dev78__tar.gz → 1.1.5.dev81__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.
Potentially problematic release.
This version of modal might be problematic. Click here for more details.
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/PKG-INFO +1 -1
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/client.pyi +2 -2
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/sandbox_router.proto +24 -2
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/sandbox_router_grpc.py +16 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/sandbox_router_pb2.py +45 -25
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/sandbox_router_pb2.pyi +44 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/sandbox_router_pb2_grpc.py +34 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/sandbox_router_pb2_grpc.pyi +12 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_version/__init__.py +1 -1
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/LICENSE +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/README.md +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/__init__.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/__main__.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_clustered_functions.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_clustered_functions.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_container_entrypoint.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_functions.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_ipython.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_location.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_object.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_output.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_partial_function.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_pty.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_resolver.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_resources.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_runtime/__init__.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_runtime/asgi.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_runtime/execution_context.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_runtime/telemetry.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_serialization.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_traceback.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_tunnel.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_tunnel.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_type_manager.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/__init__.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/app_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/async_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/blob_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/deprecation.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/docker_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/function_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/git_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/hash_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/http_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/logger.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/mount_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/name_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/package_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/shell_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_utils/time_utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_vendor/__init__.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_vendor/tblib.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/_watcher.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/app.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/app.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/builder/2023.12.txt +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/builder/2024.04.txt +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/builder/2024.10.txt +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/builder/2025.06.txt +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/builder/README.md +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/builder/base-images.json +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/call_graph.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/__init__.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/_download.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/_traceback.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/app.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/cluster.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/config.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/container.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/dict.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/entry_point.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/environment.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/import_refs.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/launch.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/network_file_system.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/profile.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/programs/__init__.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/programs/launch_instance_ssh.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/programs/run_marimo.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/programs/vscode.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/queues.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/run.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/secret.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/token.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/utils.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cli/volume.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/client.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cls.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/cls.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/config.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/container_process.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/container_process.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/dict.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/dict.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/environments.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/environments.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/exception.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/experimental/__init__.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/experimental/flash.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/experimental/flash.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/experimental/ipython.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/file_io.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/file_io.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/file_pattern_matcher.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/functions.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/functions.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/gpu.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/image.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/image.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/io_streams.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/io_streams.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/mount.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/mount.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/network_file_system.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/network_file_system.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/object.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/object.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/output.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/parallel_map.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/parallel_map.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/partial_function.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/partial_function.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/proxy.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/proxy.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/py.typed +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/queue.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/queue.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/retries.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/runner.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/runner.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/running_app.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/sandbox.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/sandbox.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/schedule.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/scheduler_placement.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/secret.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/secret.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/serving.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/serving.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/snapshot.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/snapshot.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/stream_type.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/token_flow.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/token_flow.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/volume.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal/volume.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal.egg-info/requires.txt +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal.egg-info/top_level.txt +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_docs/__init__.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/__init__.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/api.proto +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/api_grpc.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/api_pb2.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/modal_options_grpc.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/options.proto +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/options_grpc.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/options_pb2.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/options_pb2.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/options_pb2_grpc.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/options_pb2_grpc.pyi +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_proto/py.typed +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/modal_version/__main__.py +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/pyproject.toml +0 -0
- {modal-1.1.5.dev78 → modal-1.1.5.dev81}/setup.cfg +0 -0
|
@@ -33,7 +33,7 @@ class _Client:
|
|
|
33
33
|
server_url: str,
|
|
34
34
|
client_type: int,
|
|
35
35
|
credentials: typing.Optional[tuple[str, str]],
|
|
36
|
-
version: str = "1.1.5.
|
|
36
|
+
version: str = "1.1.5.dev81",
|
|
37
37
|
):
|
|
38
38
|
"""mdmd:hidden
|
|
39
39
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -164,7 +164,7 @@ class Client:
|
|
|
164
164
|
server_url: str,
|
|
165
165
|
client_type: int,
|
|
166
166
|
credentials: typing.Optional[tuple[str, str]],
|
|
167
|
-
version: str = "1.1.5.
|
|
167
|
+
version: str = "1.1.5.dev81",
|
|
168
168
|
):
|
|
169
169
|
"""mdmd:hidden
|
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -28,6 +28,26 @@ enum SandboxExecStdoutConfig {
|
|
|
28
28
|
SANDBOX_EXEC_STDOUT_CONFIG_PIPE = 1;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
message SandboxExecPollRequest {
|
|
32
|
+
// The task ID of the sandbox running the exec'd command.
|
|
33
|
+
string task_id = 1;
|
|
34
|
+
// The execution ID of the command to wait on.
|
|
35
|
+
string exec_id = 2;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// The response to a SandboxExecPollRequest. If the exec'd command has not
|
|
39
|
+
// completed, exit_status will be unset.
|
|
40
|
+
message SandboxExecPollResponse {
|
|
41
|
+
oneof exit_status {
|
|
42
|
+
// The exit code of the command.
|
|
43
|
+
int32 code = 1;
|
|
44
|
+
// The signal that terminated the command.
|
|
45
|
+
int32 signal = 2;
|
|
46
|
+
}
|
|
47
|
+
// TODO(saltzm): Give a way for the user to distinguish between normal exit
|
|
48
|
+
// and termination by Modal (due to sandbox timeout, exec exceeded deadline, etc.)
|
|
49
|
+
}
|
|
50
|
+
|
|
31
51
|
message SandboxExecStartRequest {
|
|
32
52
|
// The task ID of the sandbox to execute the command in.
|
|
33
53
|
string task_id = 1;
|
|
@@ -105,15 +125,17 @@ message SandboxExecWaitRequest {
|
|
|
105
125
|
message SandboxExecWaitResponse {
|
|
106
126
|
oneof exit_status {
|
|
107
127
|
// The exit code of the command.
|
|
108
|
-
int32 code =
|
|
128
|
+
int32 code = 1;
|
|
109
129
|
// The signal that terminated the command.
|
|
110
|
-
int32 signal =
|
|
130
|
+
int32 signal = 2;
|
|
111
131
|
}
|
|
112
132
|
// TODO(saltzm): Give a way for the user to distinguish between normal exit
|
|
113
133
|
// and termination by Modal (due to sandbox timeout, exec exceeded deadline, etc.)
|
|
114
134
|
}
|
|
115
135
|
|
|
116
136
|
service SandboxRouter {
|
|
137
|
+
// Poll for the exit status of an exec'd command.
|
|
138
|
+
rpc SandboxExecPoll(SandboxExecPollRequest) returns (SandboxExecPollResponse);
|
|
117
139
|
// Execute a command in the sandbox.
|
|
118
140
|
rpc SandboxExecStart(SandboxExecStartRequest) returns (SandboxExecStartResponse);
|
|
119
141
|
// Write to the stdin stream of an exec'd command.
|
|
@@ -15,6 +15,10 @@ import modal_proto.sandbox_router_pb2
|
|
|
15
15
|
|
|
16
16
|
class SandboxRouterBase(abc.ABC):
|
|
17
17
|
|
|
18
|
+
@abc.abstractmethod
|
|
19
|
+
async def SandboxExecPoll(self, stream: 'grpclib.server.Stream[modal_proto.sandbox_router_pb2.SandboxExecPollRequest, modal_proto.sandbox_router_pb2.SandboxExecPollResponse]') -> None:
|
|
20
|
+
pass
|
|
21
|
+
|
|
18
22
|
@abc.abstractmethod
|
|
19
23
|
async def SandboxExecStart(self, stream: 'grpclib.server.Stream[modal_proto.sandbox_router_pb2.SandboxExecStartRequest, modal_proto.sandbox_router_pb2.SandboxExecStartResponse]') -> None:
|
|
20
24
|
pass
|
|
@@ -33,6 +37,12 @@ class SandboxRouterBase(abc.ABC):
|
|
|
33
37
|
|
|
34
38
|
def __mapping__(self) -> typing.Dict[str, grpclib.const.Handler]:
|
|
35
39
|
return {
|
|
40
|
+
'/modal.sandbox_router.SandboxRouter/SandboxExecPoll': grpclib.const.Handler(
|
|
41
|
+
self.SandboxExecPoll,
|
|
42
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
|
43
|
+
modal_proto.sandbox_router_pb2.SandboxExecPollRequest,
|
|
44
|
+
modal_proto.sandbox_router_pb2.SandboxExecPollResponse,
|
|
45
|
+
),
|
|
36
46
|
'/modal.sandbox_router.SandboxRouter/SandboxExecStart': grpclib.const.Handler(
|
|
37
47
|
self.SandboxExecStart,
|
|
38
48
|
grpclib.const.Cardinality.UNARY_UNARY,
|
|
@@ -63,6 +73,12 @@ class SandboxRouterBase(abc.ABC):
|
|
|
63
73
|
class SandboxRouterStub:
|
|
64
74
|
|
|
65
75
|
def __init__(self, channel: grpclib.client.Channel) -> None:
|
|
76
|
+
self.SandboxExecPoll = grpclib.client.UnaryUnaryMethod(
|
|
77
|
+
channel,
|
|
78
|
+
'/modal.sandbox_router.SandboxRouter/SandboxExecPoll',
|
|
79
|
+
modal_proto.sandbox_router_pb2.SandboxExecPollRequest,
|
|
80
|
+
modal_proto.sandbox_router_pb2.SandboxExecPollResponse,
|
|
81
|
+
)
|
|
66
82
|
self.SandboxExecStart = grpclib.client.UnaryUnaryMethod(
|
|
67
83
|
channel,
|
|
68
84
|
'/modal.sandbox_router.SandboxRouter/SandboxExecStart',
|
|
@@ -16,7 +16,7 @@ _sym_db = _symbol_database.Default()
|
|
|
16
16
|
from modal_proto import api_pb2 as modal__proto_dot_api__pb2
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n modal_proto/sandbox_router.proto\x12\x14modal.sandbox_router\x1a\x15modal_proto/api.proto\"\x91\x03\n\x17SandboxExecStartRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x14\n\x0c\x63ommand_args\x18\x03 \x03(\t\x12\x44\n\rstdout_config\x18\x04 \x01(\x0e\x32-.modal.sandbox_router.SandboxExecStdoutConfig\x12\x44\n\rstderr_config\x18\x05 \x01(\x0e\x32-.modal.sandbox_router.SandboxExecStderrConfig\x12\x19\n\x0ctimeout_secs\x18\x06 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07workdir\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x12\n\nsecret_ids\x18\x08 \x03(\t\x12,\n\x08pty_info\x18\t \x01(\x0b\x32\x15.modal.client.PTYInfoH\x02\x88\x01\x01\x12\x15\n\rruntime_debug\x18\n \x01(\x08\x42\x0f\n\r_timeout_secsB\n\n\x08_workdirB\x0b\n\t_pty_info\"\x1a\n\x18SandboxExecStartResponse\"k\n\x1cSandboxExecStdinWriteRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12\x0b\n\x03\x65of\x18\x05 \x01(\x08\"\x1f\n\x1dSandboxExecStdinWriteResponse\"\x9e\x01\n\x1bSandboxExecStdioReadRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12M\n\x0f\x66ile_descriptor\x18\x04 \x01(\x0e\x32\x34.modal.sandbox_router.SandboxExecStdioFileDescriptor\",\n\x1cSandboxExecStdioReadResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\":\n\x16SandboxExecWaitRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"J\n\x17SandboxExecWaitResponse\x12\x0e\n\x04\x63ode\x18\
|
|
19
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n modal_proto/sandbox_router.proto\x12\x14modal.sandbox_router\x1a\x15modal_proto/api.proto\":\n\x16SandboxExecPollRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"J\n\x17SandboxExecPollResponse\x12\x0e\n\x04\x63ode\x18\x01 \x01(\x05H\x00\x12\x10\n\x06signal\x18\x02 \x01(\x05H\x00\x42\r\n\x0b\x65xit_status\"\x91\x03\n\x17SandboxExecStartRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x14\n\x0c\x63ommand_args\x18\x03 \x03(\t\x12\x44\n\rstdout_config\x18\x04 \x01(\x0e\x32-.modal.sandbox_router.SandboxExecStdoutConfig\x12\x44\n\rstderr_config\x18\x05 \x01(\x0e\x32-.modal.sandbox_router.SandboxExecStderrConfig\x12\x19\n\x0ctimeout_secs\x18\x06 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07workdir\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x12\n\nsecret_ids\x18\x08 \x03(\t\x12,\n\x08pty_info\x18\t \x01(\x0b\x32\x15.modal.client.PTYInfoH\x02\x88\x01\x01\x12\x15\n\rruntime_debug\x18\n \x01(\x08\x42\x0f\n\r_timeout_secsB\n\n\x08_workdirB\x0b\n\t_pty_info\"\x1a\n\x18SandboxExecStartResponse\"k\n\x1cSandboxExecStdinWriteRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12\x0b\n\x03\x65of\x18\x05 \x01(\x08\"\x1f\n\x1dSandboxExecStdinWriteResponse\"\x9e\x01\n\x1bSandboxExecStdioReadRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12M\n\x0f\x66ile_descriptor\x18\x04 \x01(\x0e\x32\x34.modal.sandbox_router.SandboxExecStdioFileDescriptor\",\n\x1cSandboxExecStdioReadResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\":\n\x16SandboxExecWaitRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"J\n\x17SandboxExecWaitResponse\x12\x0e\n\x04\x63ode\x18\x01 \x01(\x05H\x00\x12\x10\n\x06signal\x18\x02 \x01(\x05H\x00\x42\r\n\x0b\x65xit_status*\x8d\x01\n\x17SandboxExecStderrConfig\x12&\n\"SANDBOX_EXEC_STDERR_CONFIG_DEVNULL\x10\x00\x12#\n\x1fSANDBOX_EXEC_STDERR_CONFIG_PIPE\x10\x01\x12%\n!SANDBOX_EXEC_STDERR_CONFIG_STDOUT\x10\x02*~\n\x1eSandboxExecStdioFileDescriptor\x12-\n)SANDBOX_EXEC_STDIO_FILE_DESCRIPTOR_STDOUT\x10\x00\x12-\n)SANDBOX_EXEC_STDIO_FILE_DESCRIPTOR_STDERR\x10\x01*f\n\x17SandboxExecStdoutConfig\x12&\n\"SANDBOX_EXEC_STDOUT_CONFIG_DEVNULL\x10\x00\x12#\n\x1fSANDBOX_EXEC_STDOUT_CONFIG_PIPE\x10\x01\x32\xe6\x04\n\rSandboxRouter\x12n\n\x0fSandboxExecPoll\x12,.modal.sandbox_router.SandboxExecPollRequest\x1a-.modal.sandbox_router.SandboxExecPollResponse\x12q\n\x10SandboxExecStart\x12-.modal.sandbox_router.SandboxExecStartRequest\x1a..modal.sandbox_router.SandboxExecStartResponse\x12\x80\x01\n\x15SandboxExecStdinWrite\x12\x32.modal.sandbox_router.SandboxExecStdinWriteRequest\x1a\x33.modal.sandbox_router.SandboxExecStdinWriteResponse\x12\x7f\n\x14SandboxExecStdioRead\x12\x31.modal.sandbox_router.SandboxExecStdioReadRequest\x1a\x32.modal.sandbox_router.SandboxExecStdioReadResponse0\x01\x12n\n\x0fSandboxExecWait\x12,.modal.sandbox_router.SandboxExecWaitRequest\x1a-.modal.sandbox_router.SandboxExecWaitResponseb\x06proto3')
|
|
20
20
|
|
|
21
21
|
_SANDBOXEXECSTDERRCONFIG = DESCRIPTOR.enum_types_by_name['SandboxExecStderrConfig']
|
|
22
22
|
SandboxExecStderrConfig = enum_type_wrapper.EnumTypeWrapper(_SANDBOXEXECSTDERRCONFIG)
|
|
@@ -33,6 +33,8 @@ SANDBOX_EXEC_STDOUT_CONFIG_DEVNULL = 0
|
|
|
33
33
|
SANDBOX_EXEC_STDOUT_CONFIG_PIPE = 1
|
|
34
34
|
|
|
35
35
|
|
|
36
|
+
_SANDBOXEXECPOLLREQUEST = DESCRIPTOR.message_types_by_name['SandboxExecPollRequest']
|
|
37
|
+
_SANDBOXEXECPOLLRESPONSE = DESCRIPTOR.message_types_by_name['SandboxExecPollResponse']
|
|
36
38
|
_SANDBOXEXECSTARTREQUEST = DESCRIPTOR.message_types_by_name['SandboxExecStartRequest']
|
|
37
39
|
_SANDBOXEXECSTARTRESPONSE = DESCRIPTOR.message_types_by_name['SandboxExecStartResponse']
|
|
38
40
|
_SANDBOXEXECSTDINWRITEREQUEST = DESCRIPTOR.message_types_by_name['SandboxExecStdinWriteRequest']
|
|
@@ -41,6 +43,20 @@ _SANDBOXEXECSTDIOREADREQUEST = DESCRIPTOR.message_types_by_name['SandboxExecStdi
|
|
|
41
43
|
_SANDBOXEXECSTDIOREADRESPONSE = DESCRIPTOR.message_types_by_name['SandboxExecStdioReadResponse']
|
|
42
44
|
_SANDBOXEXECWAITREQUEST = DESCRIPTOR.message_types_by_name['SandboxExecWaitRequest']
|
|
43
45
|
_SANDBOXEXECWAITRESPONSE = DESCRIPTOR.message_types_by_name['SandboxExecWaitResponse']
|
|
46
|
+
SandboxExecPollRequest = _reflection.GeneratedProtocolMessageType('SandboxExecPollRequest', (_message.Message,), {
|
|
47
|
+
'DESCRIPTOR' : _SANDBOXEXECPOLLREQUEST,
|
|
48
|
+
'__module__' : 'modal_proto.sandbox_router_pb2'
|
|
49
|
+
# @@protoc_insertion_point(class_scope:modal.sandbox_router.SandboxExecPollRequest)
|
|
50
|
+
})
|
|
51
|
+
_sym_db.RegisterMessage(SandboxExecPollRequest)
|
|
52
|
+
|
|
53
|
+
SandboxExecPollResponse = _reflection.GeneratedProtocolMessageType('SandboxExecPollResponse', (_message.Message,), {
|
|
54
|
+
'DESCRIPTOR' : _SANDBOXEXECPOLLRESPONSE,
|
|
55
|
+
'__module__' : 'modal_proto.sandbox_router_pb2'
|
|
56
|
+
# @@protoc_insertion_point(class_scope:modal.sandbox_router.SandboxExecPollResponse)
|
|
57
|
+
})
|
|
58
|
+
_sym_db.RegisterMessage(SandboxExecPollResponse)
|
|
59
|
+
|
|
44
60
|
SandboxExecStartRequest = _reflection.GeneratedProtocolMessageType('SandboxExecStartRequest', (_message.Message,), {
|
|
45
61
|
'DESCRIPTOR' : _SANDBOXEXECSTARTREQUEST,
|
|
46
62
|
'__module__' : 'modal_proto.sandbox_router_pb2'
|
|
@@ -101,28 +117,32 @@ _SANDBOXROUTER = DESCRIPTOR.services_by_name['SandboxRouter']
|
|
|
101
117
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
102
118
|
|
|
103
119
|
DESCRIPTOR._options = None
|
|
104
|
-
_SANDBOXEXECSTDERRCONFIG._serialized_start=
|
|
105
|
-
_SANDBOXEXECSTDERRCONFIG._serialized_end=
|
|
106
|
-
_SANDBOXEXECSTDIOFILEDESCRIPTOR._serialized_start=
|
|
107
|
-
_SANDBOXEXECSTDIOFILEDESCRIPTOR._serialized_end=
|
|
108
|
-
_SANDBOXEXECSTDOUTCONFIG._serialized_start=
|
|
109
|
-
_SANDBOXEXECSTDOUTCONFIG._serialized_end=
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
120
|
+
_SANDBOXEXECSTDERRCONFIG._serialized_start=1135
|
|
121
|
+
_SANDBOXEXECSTDERRCONFIG._serialized_end=1276
|
|
122
|
+
_SANDBOXEXECSTDIOFILEDESCRIPTOR._serialized_start=1278
|
|
123
|
+
_SANDBOXEXECSTDIOFILEDESCRIPTOR._serialized_end=1404
|
|
124
|
+
_SANDBOXEXECSTDOUTCONFIG._serialized_start=1406
|
|
125
|
+
_SANDBOXEXECSTDOUTCONFIG._serialized_end=1508
|
|
126
|
+
_SANDBOXEXECPOLLREQUEST._serialized_start=81
|
|
127
|
+
_SANDBOXEXECPOLLREQUEST._serialized_end=139
|
|
128
|
+
_SANDBOXEXECPOLLRESPONSE._serialized_start=141
|
|
129
|
+
_SANDBOXEXECPOLLRESPONSE._serialized_end=215
|
|
130
|
+
_SANDBOXEXECSTARTREQUEST._serialized_start=218
|
|
131
|
+
_SANDBOXEXECSTARTREQUEST._serialized_end=619
|
|
132
|
+
_SANDBOXEXECSTARTRESPONSE._serialized_start=621
|
|
133
|
+
_SANDBOXEXECSTARTRESPONSE._serialized_end=647
|
|
134
|
+
_SANDBOXEXECSTDINWRITEREQUEST._serialized_start=649
|
|
135
|
+
_SANDBOXEXECSTDINWRITEREQUEST._serialized_end=756
|
|
136
|
+
_SANDBOXEXECSTDINWRITERESPONSE._serialized_start=758
|
|
137
|
+
_SANDBOXEXECSTDINWRITERESPONSE._serialized_end=789
|
|
138
|
+
_SANDBOXEXECSTDIOREADREQUEST._serialized_start=792
|
|
139
|
+
_SANDBOXEXECSTDIOREADREQUEST._serialized_end=950
|
|
140
|
+
_SANDBOXEXECSTDIOREADRESPONSE._serialized_start=952
|
|
141
|
+
_SANDBOXEXECSTDIOREADRESPONSE._serialized_end=996
|
|
142
|
+
_SANDBOXEXECWAITREQUEST._serialized_start=998
|
|
143
|
+
_SANDBOXEXECWAITREQUEST._serialized_end=1056
|
|
144
|
+
_SANDBOXEXECWAITRESPONSE._serialized_start=1058
|
|
145
|
+
_SANDBOXEXECWAITRESPONSE._serialized_end=1132
|
|
146
|
+
_SANDBOXROUTER._serialized_start=1511
|
|
147
|
+
_SANDBOXROUTER._serialized_end=2125
|
|
128
148
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -84,6 +84,50 @@ SANDBOX_EXEC_STDOUT_CONFIG_PIPE: SandboxExecStdoutConfig.ValueType # 1
|
|
|
84
84
|
"""The output will be streamed to the client."""
|
|
85
85
|
global___SandboxExecStdoutConfig = SandboxExecStdoutConfig
|
|
86
86
|
|
|
87
|
+
class SandboxExecPollRequest(google.protobuf.message.Message):
|
|
88
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
89
|
+
|
|
90
|
+
TASK_ID_FIELD_NUMBER: builtins.int
|
|
91
|
+
EXEC_ID_FIELD_NUMBER: builtins.int
|
|
92
|
+
task_id: builtins.str
|
|
93
|
+
"""The task ID of the sandbox running the exec'd command."""
|
|
94
|
+
exec_id: builtins.str
|
|
95
|
+
"""The execution ID of the command to wait on."""
|
|
96
|
+
def __init__(
|
|
97
|
+
self,
|
|
98
|
+
*,
|
|
99
|
+
task_id: builtins.str = ...,
|
|
100
|
+
exec_id: builtins.str = ...,
|
|
101
|
+
) -> None: ...
|
|
102
|
+
def ClearField(self, field_name: typing_extensions.Literal["exec_id", b"exec_id", "task_id", b"task_id"]) -> None: ...
|
|
103
|
+
|
|
104
|
+
global___SandboxExecPollRequest = SandboxExecPollRequest
|
|
105
|
+
|
|
106
|
+
class SandboxExecPollResponse(google.protobuf.message.Message):
|
|
107
|
+
"""The response to a SandboxExecPollRequest. If the exec'd command has not
|
|
108
|
+
completed, exit_status will be unset.
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
112
|
+
|
|
113
|
+
CODE_FIELD_NUMBER: builtins.int
|
|
114
|
+
SIGNAL_FIELD_NUMBER: builtins.int
|
|
115
|
+
code: builtins.int
|
|
116
|
+
"""The exit code of the command."""
|
|
117
|
+
signal: builtins.int
|
|
118
|
+
"""The signal that terminated the command."""
|
|
119
|
+
def __init__(
|
|
120
|
+
self,
|
|
121
|
+
*,
|
|
122
|
+
code: builtins.int = ...,
|
|
123
|
+
signal: builtins.int = ...,
|
|
124
|
+
) -> None: ...
|
|
125
|
+
def HasField(self, field_name: typing_extensions.Literal["code", b"code", "exit_status", b"exit_status", "signal", b"signal"]) -> builtins.bool: ...
|
|
126
|
+
def ClearField(self, field_name: typing_extensions.Literal["code", b"code", "exit_status", b"exit_status", "signal", b"signal"]) -> None: ...
|
|
127
|
+
def WhichOneof(self, oneof_group: typing_extensions.Literal["exit_status", b"exit_status"]) -> typing_extensions.Literal["code", "signal"] | None: ...
|
|
128
|
+
|
|
129
|
+
global___SandboxExecPollResponse = SandboxExecPollResponse
|
|
130
|
+
|
|
87
131
|
class SandboxExecStartRequest(google.protobuf.message.Message):
|
|
88
132
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
89
133
|
|
|
@@ -14,6 +14,11 @@ class SandboxRouterStub(object):
|
|
|
14
14
|
Args:
|
|
15
15
|
channel: A grpc.Channel.
|
|
16
16
|
"""
|
|
17
|
+
self.SandboxExecPoll = channel.unary_unary(
|
|
18
|
+
'/modal.sandbox_router.SandboxRouter/SandboxExecPoll',
|
|
19
|
+
request_serializer=modal__proto_dot_sandbox__router__pb2.SandboxExecPollRequest.SerializeToString,
|
|
20
|
+
response_deserializer=modal__proto_dot_sandbox__router__pb2.SandboxExecPollResponse.FromString,
|
|
21
|
+
)
|
|
17
22
|
self.SandboxExecStart = channel.unary_unary(
|
|
18
23
|
'/modal.sandbox_router.SandboxRouter/SandboxExecStart',
|
|
19
24
|
request_serializer=modal__proto_dot_sandbox__router__pb2.SandboxExecStartRequest.SerializeToString,
|
|
@@ -39,6 +44,13 @@ class SandboxRouterStub(object):
|
|
|
39
44
|
class SandboxRouterServicer(object):
|
|
40
45
|
"""Missing associated documentation comment in .proto file."""
|
|
41
46
|
|
|
47
|
+
def SandboxExecPoll(self, request, context):
|
|
48
|
+
"""Poll for the exit status of an exec'd command.
|
|
49
|
+
"""
|
|
50
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
51
|
+
context.set_details('Method not implemented!')
|
|
52
|
+
raise NotImplementedError('Method not implemented!')
|
|
53
|
+
|
|
42
54
|
def SandboxExecStart(self, request, context):
|
|
43
55
|
"""Execute a command in the sandbox.
|
|
44
56
|
"""
|
|
@@ -70,6 +82,11 @@ class SandboxRouterServicer(object):
|
|
|
70
82
|
|
|
71
83
|
def add_SandboxRouterServicer_to_server(servicer, server):
|
|
72
84
|
rpc_method_handlers = {
|
|
85
|
+
'SandboxExecPoll': grpc.unary_unary_rpc_method_handler(
|
|
86
|
+
servicer.SandboxExecPoll,
|
|
87
|
+
request_deserializer=modal__proto_dot_sandbox__router__pb2.SandboxExecPollRequest.FromString,
|
|
88
|
+
response_serializer=modal__proto_dot_sandbox__router__pb2.SandboxExecPollResponse.SerializeToString,
|
|
89
|
+
),
|
|
73
90
|
'SandboxExecStart': grpc.unary_unary_rpc_method_handler(
|
|
74
91
|
servicer.SandboxExecStart,
|
|
75
92
|
request_deserializer=modal__proto_dot_sandbox__router__pb2.SandboxExecStartRequest.FromString,
|
|
@@ -100,6 +117,23 @@ def add_SandboxRouterServicer_to_server(servicer, server):
|
|
|
100
117
|
class SandboxRouter(object):
|
|
101
118
|
"""Missing associated documentation comment in .proto file."""
|
|
102
119
|
|
|
120
|
+
@staticmethod
|
|
121
|
+
def SandboxExecPoll(request,
|
|
122
|
+
target,
|
|
123
|
+
options=(),
|
|
124
|
+
channel_credentials=None,
|
|
125
|
+
call_credentials=None,
|
|
126
|
+
insecure=False,
|
|
127
|
+
compression=None,
|
|
128
|
+
wait_for_ready=None,
|
|
129
|
+
timeout=None,
|
|
130
|
+
metadata=None):
|
|
131
|
+
return grpc.experimental.unary_unary(request, target, '/modal.sandbox_router.SandboxRouter/SandboxExecPoll',
|
|
132
|
+
modal__proto_dot_sandbox__router__pb2.SandboxExecPollRequest.SerializeToString,
|
|
133
|
+
modal__proto_dot_sandbox__router__pb2.SandboxExecPollResponse.FromString,
|
|
134
|
+
options, channel_credentials,
|
|
135
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
136
|
+
|
|
103
137
|
@staticmethod
|
|
104
138
|
def SandboxExecStart(request,
|
|
105
139
|
target,
|
|
@@ -9,6 +9,11 @@ import modal_proto.sandbox_router_pb2
|
|
|
9
9
|
|
|
10
10
|
class SandboxRouterStub:
|
|
11
11
|
def __init__(self, channel: grpc.Channel) -> None: ...
|
|
12
|
+
SandboxExecPoll: grpc.UnaryUnaryMultiCallable[
|
|
13
|
+
modal_proto.sandbox_router_pb2.SandboxExecPollRequest,
|
|
14
|
+
modal_proto.sandbox_router_pb2.SandboxExecPollResponse,
|
|
15
|
+
]
|
|
16
|
+
"""Poll for the exit status of an exec'd command."""
|
|
12
17
|
SandboxExecStart: grpc.UnaryUnaryMultiCallable[
|
|
13
18
|
modal_proto.sandbox_router_pb2.SandboxExecStartRequest,
|
|
14
19
|
modal_proto.sandbox_router_pb2.SandboxExecStartResponse,
|
|
@@ -32,6 +37,13 @@ class SandboxRouterStub:
|
|
|
32
37
|
|
|
33
38
|
class SandboxRouterServicer(metaclass=abc.ABCMeta):
|
|
34
39
|
@abc.abstractmethod
|
|
40
|
+
def SandboxExecPoll(
|
|
41
|
+
self,
|
|
42
|
+
request: modal_proto.sandbox_router_pb2.SandboxExecPollRequest,
|
|
43
|
+
context: grpc.ServicerContext,
|
|
44
|
+
) -> modal_proto.sandbox_router_pb2.SandboxExecPollResponse:
|
|
45
|
+
"""Poll for the exit status of an exec'd command."""
|
|
46
|
+
@abc.abstractmethod
|
|
35
47
|
def SandboxExecStart(
|
|
36
48
|
self,
|
|
37
49
|
request: modal_proto.sandbox_router_pb2.SandboxExecStartRequest,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|