modAL 1.2.5.dev28__py3-none-any.whl → 1.2.6.dev0__py3-none-any.whl
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/client.pyi +2 -2
- {modal-1.2.5.dev28.dist-info → modal-1.2.6.dev0.dist-info}/METADATA +1 -1
- {modal-1.2.5.dev28.dist-info → modal-1.2.6.dev0.dist-info}/RECORD +14 -14
- modal_proto/task_command_router.proto +20 -0
- modal_proto/task_command_router_grpc.py +33 -0
- modal_proto/task_command_router_pb2.py +60 -29
- modal_proto/task_command_router_pb2.pyi +51 -0
- modal_proto/task_command_router_pb2_grpc.py +69 -0
- modal_proto/task_command_router_pb2_grpc.pyi +25 -0
- modal_version/__init__.py +1 -1
- {modal-1.2.5.dev28.dist-info → modal-1.2.6.dev0.dist-info}/WHEEL +0 -0
- {modal-1.2.5.dev28.dist-info → modal-1.2.6.dev0.dist-info}/entry_points.txt +0 -0
- {modal-1.2.5.dev28.dist-info → modal-1.2.6.dev0.dist-info}/licenses/LICENSE +0 -0
- {modal-1.2.5.dev28.dist-info → modal-1.2.6.dev0.dist-info}/top_level.txt +0 -0
modal/client.pyi
CHANGED
|
@@ -32,7 +32,7 @@ class _Client:
|
|
|
32
32
|
server_url: str,
|
|
33
33
|
client_type: int,
|
|
34
34
|
credentials: typing.Optional[tuple[str, str]],
|
|
35
|
-
version: str = "1.2.
|
|
35
|
+
version: str = "1.2.6.dev0",
|
|
36
36
|
):
|
|
37
37
|
"""mdmd:hidden
|
|
38
38
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -163,7 +163,7 @@ class Client:
|
|
|
163
163
|
server_url: str,
|
|
164
164
|
client_type: int,
|
|
165
165
|
credentials: typing.Optional[tuple[str, str]],
|
|
166
|
-
version: str = "1.2.
|
|
166
|
+
version: str = "1.2.6.dev0",
|
|
167
167
|
):
|
|
168
168
|
"""mdmd:hidden
|
|
169
169
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -26,7 +26,7 @@ modal/app.pyi,sha256=nI_Tibj-rI5I7dJFJnczbHvcmVzCvvCih0tMzoQlr_Y,50835
|
|
|
26
26
|
modal/billing.py,sha256=zmQ3bcCJlwa4KD1IA_QgdWpm1pn13c-7qfy79iEauYI,195
|
|
27
27
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
|
28
28
|
modal/client.py,sha256=k1CqQ_0t4-vHylkqYZgYCnClg-FT0QrTPAKivL01A_k,14354
|
|
29
|
-
modal/client.pyi,sha256=
|
|
29
|
+
modal/client.pyi,sha256=zMlh7GyzOVrGrtkQddiAbCSzgVeRSOu8vsbIWUYR1aw,13146
|
|
30
30
|
modal/cloud_bucket_mount.py,sha256=cvVj5Rt4nDHoQbTneoJPTaAcnl_Ab_mrsjnnzd0v9OI,6013
|
|
31
31
|
modal/cloud_bucket_mount.pyi,sha256=vXusGMOUk9HjCs4lhxteuCK4xLQclPfugGWKo7LECEA,7539
|
|
32
32
|
modal/cls.py,sha256=4T__mtYlQUnkatif1Wnr8Ld9DN_ySydHj2UwhRg89ok,41984
|
|
@@ -160,7 +160,7 @@ modal/experimental/__init__.py,sha256=GOuo3t4-Le0ZVddiHIOw0MQxkdTJge-bVbhDvgnblm
|
|
|
160
160
|
modal/experimental/flash.py,sha256=GJZwSr-4OHlP6gCIZdcbsSb8D8WX9xJwMphjwcfsRoU,31262
|
|
161
161
|
modal/experimental/flash.pyi,sha256=q4a3mdgL0jzATPL2tS7LpuyulYzF1vUSE453S9xc8n8,16965
|
|
162
162
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
|
163
|
-
modal-1.2.
|
|
163
|
+
modal-1.2.6.dev0.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
|
164
164
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
165
165
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
|
166
166
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
|
@@ -176,16 +176,16 @@ modal_proto/api_pb2_grpc.py,sha256=Hqw9jcbhpr-W6jsfog_tGU55ouZjITxGvA-DGNBqOLA,2
|
|
|
176
176
|
modal_proto/api_pb2_grpc.pyi,sha256=QLJ58ANCx147HeGJva58h0MTCLIDs9JmVjrx8bDdwlg,67776
|
|
177
177
|
modal_proto/modal_api_grpc.py,sha256=MqaBZB2ZqYj6XTIgI_p5dOPjt9gKT4pAJNd_WXR3W84,21295
|
|
178
178
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
179
|
-
modal_proto/task_command_router.proto,sha256=
|
|
180
|
-
modal_proto/task_command_router_grpc.py,sha256=
|
|
181
|
-
modal_proto/task_command_router_pb2.py,sha256=
|
|
182
|
-
modal_proto/task_command_router_pb2.pyi,sha256=
|
|
183
|
-
modal_proto/task_command_router_pb2_grpc.py,sha256=
|
|
184
|
-
modal_proto/task_command_router_pb2_grpc.pyi,sha256=
|
|
185
|
-
modal_version/__init__.py,sha256=
|
|
179
|
+
modal_proto/task_command_router.proto,sha256=oyHT02Ck7jrBe55s4ge5f2ko58-2sg3gZ-xEvvn5bXU,5620
|
|
180
|
+
modal_proto/task_command_router_grpc.py,sha256=_K9lOLOB_pyT8-XvGnicgAIW1aLVFTqQISmP7Q1x4e8,6962
|
|
181
|
+
modal_proto/task_command_router_pb2.py,sha256=2Y8wRvnq4_7RiQ-5ZAPIgXaxrHv_MXzgS5wyWVJmQTo,13107
|
|
182
|
+
modal_proto/task_command_router_pb2.pyi,sha256=yI4tFteErLlonFA2HyaWtONfhY_VGSe7KCWFIspvmkE,16323
|
|
183
|
+
modal_proto/task_command_router_pb2_grpc.py,sha256=q2VWfK2-4uDcPaPLhAqPZkgxhuQRYnWmwUcnEbPbGuk,13895
|
|
184
|
+
modal_proto/task_command_router_pb2_grpc.pyi,sha256=e1MM10VGUgDkm041v53QeTglGQPzTpA0FUsFtezjp74,4536
|
|
185
|
+
modal_version/__init__.py,sha256=5f_APWvnOJPDe2Oq-2ImRwfqfFcQXUgQ3IdkZYG0o1U,120
|
|
186
186
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
|
187
|
-
modal-1.2.
|
|
188
|
-
modal-1.2.
|
|
189
|
-
modal-1.2.
|
|
190
|
-
modal-1.2.
|
|
191
|
-
modal-1.2.
|
|
187
|
+
modal-1.2.6.dev0.dist-info/METADATA,sha256=YyAXlm_yykFKClmgFSb2cl6Mw0SH6RSq_ytaIIDidQE,2489
|
|
188
|
+
modal-1.2.6.dev0.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
189
|
+
modal-1.2.6.dev0.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
|
190
|
+
modal-1.2.6.dev0.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
|
191
|
+
modal-1.2.6.dev0.dist-info/RECORD,,
|
|
@@ -2,6 +2,7 @@ syntax = "proto3";
|
|
|
2
2
|
|
|
3
3
|
option go_package = "github.com/modal-labs/modal/go/proto";
|
|
4
4
|
|
|
5
|
+
import "google/protobuf/empty.proto";
|
|
5
6
|
import "modal_proto/api.proto";
|
|
6
7
|
|
|
7
8
|
package modal.task_command_router;
|
|
@@ -130,6 +131,21 @@ message TaskExecWaitResponse {
|
|
|
130
131
|
// and termination by Modal (due to task timeout, exec exceeded deadline, etc.)
|
|
131
132
|
}
|
|
132
133
|
|
|
134
|
+
message TaskMountDirectoryRequest {
|
|
135
|
+
string task_id = 1;
|
|
136
|
+
bytes path = 2;
|
|
137
|
+
string image_id = 3;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
message TaskSnapshotDirectoryRequest {
|
|
141
|
+
string task_id = 1;
|
|
142
|
+
bytes path = 2;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
message TaskSnapshotDirectoryResponse {
|
|
146
|
+
string image_id = 1;
|
|
147
|
+
}
|
|
148
|
+
|
|
133
149
|
service TaskCommandRouter {
|
|
134
150
|
// Poll for the exit status of an exec'd command.
|
|
135
151
|
rpc TaskExecPoll(TaskExecPollRequest) returns (TaskExecPollResponse);
|
|
@@ -141,4 +157,8 @@ service TaskCommandRouter {
|
|
|
141
157
|
rpc TaskExecStdioRead(TaskExecStdioReadRequest) returns (stream TaskExecStdioReadResponse);
|
|
142
158
|
// Wait for an exec'd command to exit and return the exit code.
|
|
143
159
|
rpc TaskExecWait(TaskExecWaitRequest) returns (TaskExecWaitResponse);
|
|
160
|
+
// Mount an image at a directory in the container.
|
|
161
|
+
rpc TaskMountDirectory(TaskMountDirectoryRequest) returns (google.protobuf.Empty);
|
|
162
|
+
// Snapshot a directory with a mounted image, including any local changes, into a new image.
|
|
163
|
+
rpc TaskSnapshotDirectory(TaskSnapshotDirectoryRequest) returns (TaskSnapshotDirectoryResponse);
|
|
144
164
|
}
|
|
@@ -9,6 +9,7 @@ import grpclib.client
|
|
|
9
9
|
if typing.TYPE_CHECKING:
|
|
10
10
|
import grpclib.server
|
|
11
11
|
|
|
12
|
+
import google.protobuf.empty_pb2
|
|
12
13
|
import modal_proto.api_pb2
|
|
13
14
|
import modal_proto.task_command_router_pb2
|
|
14
15
|
|
|
@@ -35,6 +36,14 @@ class TaskCommandRouterBase(abc.ABC):
|
|
|
35
36
|
async def TaskExecWait(self, stream: 'grpclib.server.Stream[modal_proto.task_command_router_pb2.TaskExecWaitRequest, modal_proto.task_command_router_pb2.TaskExecWaitResponse]') -> None:
|
|
36
37
|
pass
|
|
37
38
|
|
|
39
|
+
@abc.abstractmethod
|
|
40
|
+
async def TaskMountDirectory(self, stream: 'grpclib.server.Stream[modal_proto.task_command_router_pb2.TaskMountDirectoryRequest, google.protobuf.empty_pb2.Empty]') -> None:
|
|
41
|
+
pass
|
|
42
|
+
|
|
43
|
+
@abc.abstractmethod
|
|
44
|
+
async def TaskSnapshotDirectory(self, stream: 'grpclib.server.Stream[modal_proto.task_command_router_pb2.TaskSnapshotDirectoryRequest, modal_proto.task_command_router_pb2.TaskSnapshotDirectoryResponse]') -> None:
|
|
45
|
+
pass
|
|
46
|
+
|
|
38
47
|
def __mapping__(self) -> typing.Dict[str, grpclib.const.Handler]:
|
|
39
48
|
return {
|
|
40
49
|
'/modal.task_command_router.TaskCommandRouter/TaskExecPoll': grpclib.const.Handler(
|
|
@@ -67,6 +76,18 @@ class TaskCommandRouterBase(abc.ABC):
|
|
|
67
76
|
modal_proto.task_command_router_pb2.TaskExecWaitRequest,
|
|
68
77
|
modal_proto.task_command_router_pb2.TaskExecWaitResponse,
|
|
69
78
|
),
|
|
79
|
+
'/modal.task_command_router.TaskCommandRouter/TaskMountDirectory': grpclib.const.Handler(
|
|
80
|
+
self.TaskMountDirectory,
|
|
81
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
|
82
|
+
modal_proto.task_command_router_pb2.TaskMountDirectoryRequest,
|
|
83
|
+
google.protobuf.empty_pb2.Empty,
|
|
84
|
+
),
|
|
85
|
+
'/modal.task_command_router.TaskCommandRouter/TaskSnapshotDirectory': grpclib.const.Handler(
|
|
86
|
+
self.TaskSnapshotDirectory,
|
|
87
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
|
88
|
+
modal_proto.task_command_router_pb2.TaskSnapshotDirectoryRequest,
|
|
89
|
+
modal_proto.task_command_router_pb2.TaskSnapshotDirectoryResponse,
|
|
90
|
+
),
|
|
70
91
|
}
|
|
71
92
|
|
|
72
93
|
|
|
@@ -103,3 +124,15 @@ class TaskCommandRouterStub:
|
|
|
103
124
|
modal_proto.task_command_router_pb2.TaskExecWaitRequest,
|
|
104
125
|
modal_proto.task_command_router_pb2.TaskExecWaitResponse,
|
|
105
126
|
)
|
|
127
|
+
self.TaskMountDirectory = grpclib.client.UnaryUnaryMethod(
|
|
128
|
+
channel,
|
|
129
|
+
'/modal.task_command_router.TaskCommandRouter/TaskMountDirectory',
|
|
130
|
+
modal_proto.task_command_router_pb2.TaskMountDirectoryRequest,
|
|
131
|
+
google.protobuf.empty_pb2.Empty,
|
|
132
|
+
)
|
|
133
|
+
self.TaskSnapshotDirectory = grpclib.client.UnaryUnaryMethod(
|
|
134
|
+
channel,
|
|
135
|
+
'/modal.task_command_router.TaskCommandRouter/TaskSnapshotDirectory',
|
|
136
|
+
modal_proto.task_command_router_pb2.TaskSnapshotDirectoryRequest,
|
|
137
|
+
modal_proto.task_command_router_pb2.TaskSnapshotDirectoryResponse,
|
|
138
|
+
)
|
|
@@ -13,10 +13,11 @@ from google.protobuf import symbol_database as _symbol_database
|
|
|
13
13
|
_sym_db = _symbol_database.Default()
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
|
|
16
17
|
from modal_proto import api_pb2 as modal__proto_dot_api__pb2
|
|
17
18
|
|
|
18
19
|
|
|
19
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%modal_proto/task_command_router.proto\x12\x19modal.task_command_router\x1a\x15modal_proto/api.proto\"7\n\x13TaskExecPollRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"G\n\x14TaskExecPollResponse\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\"\x92\x03\n\x14TaskExecStartRequest\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\x46\n\rstdout_config\x18\x04 \x01(\x0e\x32/.modal.task_command_router.TaskExecStdoutConfig\x12\x46\n\rstderr_config\x18\x05 \x01(\x0e\x32/.modal.task_command_router.TaskExecStderrConfig\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\"\x17\n\x15TaskExecStartResponse\"h\n\x19TaskExecStdinWriteRequest\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\"\x1c\n\x1aTaskExecStdinWriteResponse\"\x9d\x01\n\x18TaskExecStdioReadRequest\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\x12O\n\x0f\x66ile_descriptor\x18\x04 \x01(\x0e\x32\x36.modal.task_command_router.TaskExecStdioFileDescriptor\")\n\x19TaskExecStdioReadResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"7\n\x13TaskExecWaitRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"G\n\x14TaskExecWaitResponse\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*\x81\x01\n\x14TaskExecStderrConfig\x12#\n\x1fTASK_EXEC_STDERR_CONFIG_DEVNULL\x10\x00\x12 \n\x1cTASK_EXEC_STDERR_CONFIG_PIPE\x10\x01\x12\"\n\x1eTASK_EXEC_STDERR_CONFIG_STDOUT\x10\x02*u\n\x1bTaskExecStdioFileDescriptor\x12*\n&TASK_EXEC_STDIO_FILE_DESCRIPTOR_STDOUT\x10\x00\x12*\n&TASK_EXEC_STDIO_FILE_DESCRIPTOR_STDERR\x10\x01*]\n\x14TaskExecStdoutConfig\x12#\n\x1fTASK_EXEC_STDOUT_CONFIG_DEVNULL\x10\x00\x12 \n\x1cTASK_EXEC_STDOUT_CONFIG_PIPE\x10\x01\x32\
|
|
20
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%modal_proto/task_command_router.proto\x12\x19modal.task_command_router\x1a\x1bgoogle/protobuf/empty.proto\x1a\x15modal_proto/api.proto\"7\n\x13TaskExecPollRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"G\n\x14TaskExecPollResponse\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\"\x92\x03\n\x14TaskExecStartRequest\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\x46\n\rstdout_config\x18\x04 \x01(\x0e\x32/.modal.task_command_router.TaskExecStdoutConfig\x12\x46\n\rstderr_config\x18\x05 \x01(\x0e\x32/.modal.task_command_router.TaskExecStderrConfig\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\"\x17\n\x15TaskExecStartResponse\"h\n\x19TaskExecStdinWriteRequest\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\"\x1c\n\x1aTaskExecStdinWriteResponse\"\x9d\x01\n\x18TaskExecStdioReadRequest\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\x12O\n\x0f\x66ile_descriptor\x18\x04 \x01(\x0e\x32\x36.modal.task_command_router.TaskExecStdioFileDescriptor\")\n\x19TaskExecStdioReadResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"7\n\x13TaskExecWaitRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"G\n\x14TaskExecWaitResponse\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\"L\n\x19TaskMountDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x10\n\x08image_id\x18\x03 \x01(\t\"=\n\x1cTaskSnapshotDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\"1\n\x1dTaskSnapshotDirectoryResponse\x12\x10\n\x08image_id\x18\x01 \x01(\t*\x81\x01\n\x14TaskExecStderrConfig\x12#\n\x1fTASK_EXEC_STDERR_CONFIG_DEVNULL\x10\x00\x12 \n\x1cTASK_EXEC_STDERR_CONFIG_PIPE\x10\x01\x12\"\n\x1eTASK_EXEC_STDERR_CONFIG_STDOUT\x10\x02*u\n\x1bTaskExecStdioFileDescriptor\x12*\n&TASK_EXEC_STDIO_FILE_DESCRIPTOR_STDOUT\x10\x00\x12*\n&TASK_EXEC_STDIO_FILE_DESCRIPTOR_STDERR\x10\x01*]\n\x14TaskExecStdoutConfig\x12#\n\x1fTASK_EXEC_STDOUT_CONFIG_DEVNULL\x10\x00\x12 \n\x1cTASK_EXEC_STDOUT_CONFIG_PIPE\x10\x01\x32\xe1\x06\n\x11TaskCommandRouter\x12o\n\x0cTaskExecPoll\x12..modal.task_command_router.TaskExecPollRequest\x1a/.modal.task_command_router.TaskExecPollResponse\x12r\n\rTaskExecStart\x12/.modal.task_command_router.TaskExecStartRequest\x1a\x30.modal.task_command_router.TaskExecStartResponse\x12\x81\x01\n\x12TaskExecStdinWrite\x12\x34.modal.task_command_router.TaskExecStdinWriteRequest\x1a\x35.modal.task_command_router.TaskExecStdinWriteResponse\x12\x80\x01\n\x11TaskExecStdioRead\x12\x33.modal.task_command_router.TaskExecStdioReadRequest\x1a\x34.modal.task_command_router.TaskExecStdioReadResponse0\x01\x12o\n\x0cTaskExecWait\x12..modal.task_command_router.TaskExecWaitRequest\x1a/.modal.task_command_router.TaskExecWaitResponse\x12\x62\n\x12TaskMountDirectory\x12\x34.modal.task_command_router.TaskMountDirectoryRequest\x1a\x16.google.protobuf.Empty\x12\x8a\x01\n\x15TaskSnapshotDirectory\x12\x37.modal.task_command_router.TaskSnapshotDirectoryRequest\x1a\x38.modal.task_command_router.TaskSnapshotDirectoryResponseB&Z$github.com/modal-labs/modal/go/protob\x06proto3')
|
|
20
21
|
|
|
21
22
|
_TASKEXECSTDERRCONFIG = DESCRIPTOR.enum_types_by_name['TaskExecStderrConfig']
|
|
22
23
|
TaskExecStderrConfig = enum_type_wrapper.EnumTypeWrapper(_TASKEXECSTDERRCONFIG)
|
|
@@ -43,6 +44,9 @@ _TASKEXECSTDIOREADREQUEST = DESCRIPTOR.message_types_by_name['TaskExecStdioReadR
|
|
|
43
44
|
_TASKEXECSTDIOREADRESPONSE = DESCRIPTOR.message_types_by_name['TaskExecStdioReadResponse']
|
|
44
45
|
_TASKEXECWAITREQUEST = DESCRIPTOR.message_types_by_name['TaskExecWaitRequest']
|
|
45
46
|
_TASKEXECWAITRESPONSE = DESCRIPTOR.message_types_by_name['TaskExecWaitResponse']
|
|
47
|
+
_TASKMOUNTDIRECTORYREQUEST = DESCRIPTOR.message_types_by_name['TaskMountDirectoryRequest']
|
|
48
|
+
_TASKSNAPSHOTDIRECTORYREQUEST = DESCRIPTOR.message_types_by_name['TaskSnapshotDirectoryRequest']
|
|
49
|
+
_TASKSNAPSHOTDIRECTORYRESPONSE = DESCRIPTOR.message_types_by_name['TaskSnapshotDirectoryResponse']
|
|
46
50
|
TaskExecPollRequest = _reflection.GeneratedProtocolMessageType('TaskExecPollRequest', (_message.Message,), {
|
|
47
51
|
'DESCRIPTOR' : _TASKEXECPOLLREQUEST,
|
|
48
52
|
'__module__' : 'modal_proto.task_command_router_pb2'
|
|
@@ -113,37 +117,64 @@ TaskExecWaitResponse = _reflection.GeneratedProtocolMessageType('TaskExecWaitRes
|
|
|
113
117
|
})
|
|
114
118
|
_sym_db.RegisterMessage(TaskExecWaitResponse)
|
|
115
119
|
|
|
120
|
+
TaskMountDirectoryRequest = _reflection.GeneratedProtocolMessageType('TaskMountDirectoryRequest', (_message.Message,), {
|
|
121
|
+
'DESCRIPTOR' : _TASKMOUNTDIRECTORYREQUEST,
|
|
122
|
+
'__module__' : 'modal_proto.task_command_router_pb2'
|
|
123
|
+
# @@protoc_insertion_point(class_scope:modal.task_command_router.TaskMountDirectoryRequest)
|
|
124
|
+
})
|
|
125
|
+
_sym_db.RegisterMessage(TaskMountDirectoryRequest)
|
|
126
|
+
|
|
127
|
+
TaskSnapshotDirectoryRequest = _reflection.GeneratedProtocolMessageType('TaskSnapshotDirectoryRequest', (_message.Message,), {
|
|
128
|
+
'DESCRIPTOR' : _TASKSNAPSHOTDIRECTORYREQUEST,
|
|
129
|
+
'__module__' : 'modal_proto.task_command_router_pb2'
|
|
130
|
+
# @@protoc_insertion_point(class_scope:modal.task_command_router.TaskSnapshotDirectoryRequest)
|
|
131
|
+
})
|
|
132
|
+
_sym_db.RegisterMessage(TaskSnapshotDirectoryRequest)
|
|
133
|
+
|
|
134
|
+
TaskSnapshotDirectoryResponse = _reflection.GeneratedProtocolMessageType('TaskSnapshotDirectoryResponse', (_message.Message,), {
|
|
135
|
+
'DESCRIPTOR' : _TASKSNAPSHOTDIRECTORYRESPONSE,
|
|
136
|
+
'__module__' : 'modal_proto.task_command_router_pb2'
|
|
137
|
+
# @@protoc_insertion_point(class_scope:modal.task_command_router.TaskSnapshotDirectoryResponse)
|
|
138
|
+
})
|
|
139
|
+
_sym_db.RegisterMessage(TaskSnapshotDirectoryResponse)
|
|
140
|
+
|
|
116
141
|
_TASKCOMMANDROUTER = DESCRIPTOR.services_by_name['TaskCommandRouter']
|
|
117
142
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
118
143
|
|
|
119
144
|
DESCRIPTOR._options = None
|
|
120
145
|
DESCRIPTOR._serialized_options = b'Z$github.com/modal-labs/modal/go/proto'
|
|
121
|
-
_TASKEXECSTDERRCONFIG._serialized_start=
|
|
122
|
-
_TASKEXECSTDERRCONFIG._serialized_end=
|
|
123
|
-
_TASKEXECSTDIOFILEDESCRIPTOR._serialized_start=
|
|
124
|
-
_TASKEXECSTDIOFILEDESCRIPTOR._serialized_end=
|
|
125
|
-
_TASKEXECSTDOUTCONFIG._serialized_start=
|
|
126
|
-
_TASKEXECSTDOUTCONFIG._serialized_end=
|
|
127
|
-
_TASKEXECPOLLREQUEST._serialized_start=
|
|
128
|
-
_TASKEXECPOLLREQUEST._serialized_end=
|
|
129
|
-
_TASKEXECPOLLRESPONSE._serialized_start=
|
|
130
|
-
_TASKEXECPOLLRESPONSE._serialized_end=
|
|
131
|
-
_TASKEXECSTARTREQUEST._serialized_start=
|
|
132
|
-
_TASKEXECSTARTREQUEST._serialized_end=
|
|
133
|
-
_TASKEXECSTARTRESPONSE._serialized_start=
|
|
134
|
-
_TASKEXECSTARTRESPONSE._serialized_end=
|
|
135
|
-
_TASKEXECSTDINWRITEREQUEST._serialized_start=
|
|
136
|
-
_TASKEXECSTDINWRITEREQUEST._serialized_end=
|
|
137
|
-
_TASKEXECSTDINWRITERESPONSE._serialized_start=
|
|
138
|
-
_TASKEXECSTDINWRITERESPONSE._serialized_end=
|
|
139
|
-
_TASKEXECSTDIOREADREQUEST._serialized_start=
|
|
140
|
-
_TASKEXECSTDIOREADREQUEST._serialized_end=
|
|
141
|
-
_TASKEXECSTDIOREADRESPONSE._serialized_start=
|
|
142
|
-
_TASKEXECSTDIOREADRESPONSE._serialized_end=
|
|
143
|
-
_TASKEXECWAITREQUEST._serialized_start=
|
|
144
|
-
_TASKEXECWAITREQUEST._serialized_end=
|
|
145
|
-
_TASKEXECWAITRESPONSE._serialized_start=
|
|
146
|
-
_TASKEXECWAITRESPONSE._serialized_end=
|
|
147
|
-
|
|
148
|
-
|
|
146
|
+
_TASKEXECSTDERRCONFIG._serialized_start=1342
|
|
147
|
+
_TASKEXECSTDERRCONFIG._serialized_end=1471
|
|
148
|
+
_TASKEXECSTDIOFILEDESCRIPTOR._serialized_start=1473
|
|
149
|
+
_TASKEXECSTDIOFILEDESCRIPTOR._serialized_end=1590
|
|
150
|
+
_TASKEXECSTDOUTCONFIG._serialized_start=1592
|
|
151
|
+
_TASKEXECSTDOUTCONFIG._serialized_end=1685
|
|
152
|
+
_TASKEXECPOLLREQUEST._serialized_start=120
|
|
153
|
+
_TASKEXECPOLLREQUEST._serialized_end=175
|
|
154
|
+
_TASKEXECPOLLRESPONSE._serialized_start=177
|
|
155
|
+
_TASKEXECPOLLRESPONSE._serialized_end=248
|
|
156
|
+
_TASKEXECSTARTREQUEST._serialized_start=251
|
|
157
|
+
_TASKEXECSTARTREQUEST._serialized_end=653
|
|
158
|
+
_TASKEXECSTARTRESPONSE._serialized_start=655
|
|
159
|
+
_TASKEXECSTARTRESPONSE._serialized_end=678
|
|
160
|
+
_TASKEXECSTDINWRITEREQUEST._serialized_start=680
|
|
161
|
+
_TASKEXECSTDINWRITEREQUEST._serialized_end=784
|
|
162
|
+
_TASKEXECSTDINWRITERESPONSE._serialized_start=786
|
|
163
|
+
_TASKEXECSTDINWRITERESPONSE._serialized_end=814
|
|
164
|
+
_TASKEXECSTDIOREADREQUEST._serialized_start=817
|
|
165
|
+
_TASKEXECSTDIOREADREQUEST._serialized_end=974
|
|
166
|
+
_TASKEXECSTDIOREADRESPONSE._serialized_start=976
|
|
167
|
+
_TASKEXECSTDIOREADRESPONSE._serialized_end=1017
|
|
168
|
+
_TASKEXECWAITREQUEST._serialized_start=1019
|
|
169
|
+
_TASKEXECWAITREQUEST._serialized_end=1074
|
|
170
|
+
_TASKEXECWAITRESPONSE._serialized_start=1076
|
|
171
|
+
_TASKEXECWAITRESPONSE._serialized_end=1147
|
|
172
|
+
_TASKMOUNTDIRECTORYREQUEST._serialized_start=1149
|
|
173
|
+
_TASKMOUNTDIRECTORYREQUEST._serialized_end=1225
|
|
174
|
+
_TASKSNAPSHOTDIRECTORYREQUEST._serialized_start=1227
|
|
175
|
+
_TASKSNAPSHOTDIRECTORYREQUEST._serialized_end=1288
|
|
176
|
+
_TASKSNAPSHOTDIRECTORYRESPONSE._serialized_start=1290
|
|
177
|
+
_TASKSNAPSHOTDIRECTORYRESPONSE._serialized_end=1339
|
|
178
|
+
_TASKCOMMANDROUTER._serialized_start=1688
|
|
179
|
+
_TASKCOMMANDROUTER._serialized_end=2553
|
|
149
180
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -331,3 +331,54 @@ class TaskExecWaitResponse(google.protobuf.message.Message):
|
|
|
331
331
|
def WhichOneof(self, oneof_group: typing_extensions.Literal["exit_status", b"exit_status"]) -> typing_extensions.Literal["code", "signal"] | None: ...
|
|
332
332
|
|
|
333
333
|
global___TaskExecWaitResponse = TaskExecWaitResponse
|
|
334
|
+
|
|
335
|
+
class TaskMountDirectoryRequest(google.protobuf.message.Message):
|
|
336
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
337
|
+
|
|
338
|
+
TASK_ID_FIELD_NUMBER: builtins.int
|
|
339
|
+
PATH_FIELD_NUMBER: builtins.int
|
|
340
|
+
IMAGE_ID_FIELD_NUMBER: builtins.int
|
|
341
|
+
task_id: builtins.str
|
|
342
|
+
path: builtins.bytes
|
|
343
|
+
image_id: builtins.str
|
|
344
|
+
def __init__(
|
|
345
|
+
self,
|
|
346
|
+
*,
|
|
347
|
+
task_id: builtins.str = ...,
|
|
348
|
+
path: builtins.bytes = ...,
|
|
349
|
+
image_id: builtins.str = ...,
|
|
350
|
+
) -> None: ...
|
|
351
|
+
def ClearField(self, field_name: typing_extensions.Literal["image_id", b"image_id", "path", b"path", "task_id", b"task_id"]) -> None: ...
|
|
352
|
+
|
|
353
|
+
global___TaskMountDirectoryRequest = TaskMountDirectoryRequest
|
|
354
|
+
|
|
355
|
+
class TaskSnapshotDirectoryRequest(google.protobuf.message.Message):
|
|
356
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
357
|
+
|
|
358
|
+
TASK_ID_FIELD_NUMBER: builtins.int
|
|
359
|
+
PATH_FIELD_NUMBER: builtins.int
|
|
360
|
+
task_id: builtins.str
|
|
361
|
+
path: builtins.bytes
|
|
362
|
+
def __init__(
|
|
363
|
+
self,
|
|
364
|
+
*,
|
|
365
|
+
task_id: builtins.str = ...,
|
|
366
|
+
path: builtins.bytes = ...,
|
|
367
|
+
) -> None: ...
|
|
368
|
+
def ClearField(self, field_name: typing_extensions.Literal["path", b"path", "task_id", b"task_id"]) -> None: ...
|
|
369
|
+
|
|
370
|
+
global___TaskSnapshotDirectoryRequest = TaskSnapshotDirectoryRequest
|
|
371
|
+
|
|
372
|
+
class TaskSnapshotDirectoryResponse(google.protobuf.message.Message):
|
|
373
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
374
|
+
|
|
375
|
+
IMAGE_ID_FIELD_NUMBER: builtins.int
|
|
376
|
+
image_id: builtins.str
|
|
377
|
+
def __init__(
|
|
378
|
+
self,
|
|
379
|
+
*,
|
|
380
|
+
image_id: builtins.str = ...,
|
|
381
|
+
) -> None: ...
|
|
382
|
+
def ClearField(self, field_name: typing_extensions.Literal["image_id", b"image_id"]) -> None: ...
|
|
383
|
+
|
|
384
|
+
global___TaskSnapshotDirectoryResponse = TaskSnapshotDirectoryResponse
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"""Client and server classes corresponding to protobuf-defined services."""
|
|
3
3
|
import grpc
|
|
4
4
|
|
|
5
|
+
from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
|
|
5
6
|
from modal_proto import task_command_router_pb2 as modal__proto_dot_task__command__router__pb2
|
|
6
7
|
|
|
7
8
|
|
|
@@ -39,6 +40,16 @@ class TaskCommandRouterStub(object):
|
|
|
39
40
|
request_serializer=modal__proto_dot_task__command__router__pb2.TaskExecWaitRequest.SerializeToString,
|
|
40
41
|
response_deserializer=modal__proto_dot_task__command__router__pb2.TaskExecWaitResponse.FromString,
|
|
41
42
|
)
|
|
43
|
+
self.TaskMountDirectory = channel.unary_unary(
|
|
44
|
+
'/modal.task_command_router.TaskCommandRouter/TaskMountDirectory',
|
|
45
|
+
request_serializer=modal__proto_dot_task__command__router__pb2.TaskMountDirectoryRequest.SerializeToString,
|
|
46
|
+
response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
|
|
47
|
+
)
|
|
48
|
+
self.TaskSnapshotDirectory = channel.unary_unary(
|
|
49
|
+
'/modal.task_command_router.TaskCommandRouter/TaskSnapshotDirectory',
|
|
50
|
+
request_serializer=modal__proto_dot_task__command__router__pb2.TaskSnapshotDirectoryRequest.SerializeToString,
|
|
51
|
+
response_deserializer=modal__proto_dot_task__command__router__pb2.TaskSnapshotDirectoryResponse.FromString,
|
|
52
|
+
)
|
|
42
53
|
|
|
43
54
|
|
|
44
55
|
class TaskCommandRouterServicer(object):
|
|
@@ -79,6 +90,20 @@ class TaskCommandRouterServicer(object):
|
|
|
79
90
|
context.set_details('Method not implemented!')
|
|
80
91
|
raise NotImplementedError('Method not implemented!')
|
|
81
92
|
|
|
93
|
+
def TaskMountDirectory(self, request, context):
|
|
94
|
+
"""Mount an image at a directory in the container.
|
|
95
|
+
"""
|
|
96
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
97
|
+
context.set_details('Method not implemented!')
|
|
98
|
+
raise NotImplementedError('Method not implemented!')
|
|
99
|
+
|
|
100
|
+
def TaskSnapshotDirectory(self, request, context):
|
|
101
|
+
"""Snapshot a directory with a mounted image, including any local changes, into a new image.
|
|
102
|
+
"""
|
|
103
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
104
|
+
context.set_details('Method not implemented!')
|
|
105
|
+
raise NotImplementedError('Method not implemented!')
|
|
106
|
+
|
|
82
107
|
|
|
83
108
|
def add_TaskCommandRouterServicer_to_server(servicer, server):
|
|
84
109
|
rpc_method_handlers = {
|
|
@@ -107,6 +132,16 @@ def add_TaskCommandRouterServicer_to_server(servicer, server):
|
|
|
107
132
|
request_deserializer=modal__proto_dot_task__command__router__pb2.TaskExecWaitRequest.FromString,
|
|
108
133
|
response_serializer=modal__proto_dot_task__command__router__pb2.TaskExecWaitResponse.SerializeToString,
|
|
109
134
|
),
|
|
135
|
+
'TaskMountDirectory': grpc.unary_unary_rpc_method_handler(
|
|
136
|
+
servicer.TaskMountDirectory,
|
|
137
|
+
request_deserializer=modal__proto_dot_task__command__router__pb2.TaskMountDirectoryRequest.FromString,
|
|
138
|
+
response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
|
|
139
|
+
),
|
|
140
|
+
'TaskSnapshotDirectory': grpc.unary_unary_rpc_method_handler(
|
|
141
|
+
servicer.TaskSnapshotDirectory,
|
|
142
|
+
request_deserializer=modal__proto_dot_task__command__router__pb2.TaskSnapshotDirectoryRequest.FromString,
|
|
143
|
+
response_serializer=modal__proto_dot_task__command__router__pb2.TaskSnapshotDirectoryResponse.SerializeToString,
|
|
144
|
+
),
|
|
110
145
|
}
|
|
111
146
|
generic_handler = grpc.method_handlers_generic_handler(
|
|
112
147
|
'modal.task_command_router.TaskCommandRouter', rpc_method_handlers)
|
|
@@ -201,3 +236,37 @@ class TaskCommandRouter(object):
|
|
|
201
236
|
modal__proto_dot_task__command__router__pb2.TaskExecWaitResponse.FromString,
|
|
202
237
|
options, channel_credentials,
|
|
203
238
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
239
|
+
|
|
240
|
+
@staticmethod
|
|
241
|
+
def TaskMountDirectory(request,
|
|
242
|
+
target,
|
|
243
|
+
options=(),
|
|
244
|
+
channel_credentials=None,
|
|
245
|
+
call_credentials=None,
|
|
246
|
+
insecure=False,
|
|
247
|
+
compression=None,
|
|
248
|
+
wait_for_ready=None,
|
|
249
|
+
timeout=None,
|
|
250
|
+
metadata=None):
|
|
251
|
+
return grpc.experimental.unary_unary(request, target, '/modal.task_command_router.TaskCommandRouter/TaskMountDirectory',
|
|
252
|
+
modal__proto_dot_task__command__router__pb2.TaskMountDirectoryRequest.SerializeToString,
|
|
253
|
+
google_dot_protobuf_dot_empty__pb2.Empty.FromString,
|
|
254
|
+
options, channel_credentials,
|
|
255
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
256
|
+
|
|
257
|
+
@staticmethod
|
|
258
|
+
def TaskSnapshotDirectory(request,
|
|
259
|
+
target,
|
|
260
|
+
options=(),
|
|
261
|
+
channel_credentials=None,
|
|
262
|
+
call_credentials=None,
|
|
263
|
+
insecure=False,
|
|
264
|
+
compression=None,
|
|
265
|
+
wait_for_ready=None,
|
|
266
|
+
timeout=None,
|
|
267
|
+
metadata=None):
|
|
268
|
+
return grpc.experimental.unary_unary(request, target, '/modal.task_command_router.TaskCommandRouter/TaskSnapshotDirectory',
|
|
269
|
+
modal__proto_dot_task__command__router__pb2.TaskSnapshotDirectoryRequest.SerializeToString,
|
|
270
|
+
modal__proto_dot_task__command__router__pb2.TaskSnapshotDirectoryResponse.FromString,
|
|
271
|
+
options, channel_credentials,
|
|
272
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
@@ -4,6 +4,7 @@ isort:skip_file
|
|
|
4
4
|
"""
|
|
5
5
|
import abc
|
|
6
6
|
import collections.abc
|
|
7
|
+
import google.protobuf.empty_pb2
|
|
7
8
|
import grpc
|
|
8
9
|
import modal_proto.task_command_router_pb2
|
|
9
10
|
|
|
@@ -34,6 +35,16 @@ class TaskCommandRouterStub:
|
|
|
34
35
|
modal_proto.task_command_router_pb2.TaskExecWaitResponse,
|
|
35
36
|
]
|
|
36
37
|
"""Wait for an exec'd command to exit and return the exit code."""
|
|
38
|
+
TaskMountDirectory: grpc.UnaryUnaryMultiCallable[
|
|
39
|
+
modal_proto.task_command_router_pb2.TaskMountDirectoryRequest,
|
|
40
|
+
google.protobuf.empty_pb2.Empty,
|
|
41
|
+
]
|
|
42
|
+
"""Mount an image at a directory in the container."""
|
|
43
|
+
TaskSnapshotDirectory: grpc.UnaryUnaryMultiCallable[
|
|
44
|
+
modal_proto.task_command_router_pb2.TaskSnapshotDirectoryRequest,
|
|
45
|
+
modal_proto.task_command_router_pb2.TaskSnapshotDirectoryResponse,
|
|
46
|
+
]
|
|
47
|
+
"""Snapshot a directory with a mounted image, including any local changes, into a new image."""
|
|
37
48
|
|
|
38
49
|
class TaskCommandRouterServicer(metaclass=abc.ABCMeta):
|
|
39
50
|
@abc.abstractmethod
|
|
@@ -71,5 +82,19 @@ class TaskCommandRouterServicer(metaclass=abc.ABCMeta):
|
|
|
71
82
|
context: grpc.ServicerContext,
|
|
72
83
|
) -> modal_proto.task_command_router_pb2.TaskExecWaitResponse:
|
|
73
84
|
"""Wait for an exec'd command to exit and return the exit code."""
|
|
85
|
+
@abc.abstractmethod
|
|
86
|
+
def TaskMountDirectory(
|
|
87
|
+
self,
|
|
88
|
+
request: modal_proto.task_command_router_pb2.TaskMountDirectoryRequest,
|
|
89
|
+
context: grpc.ServicerContext,
|
|
90
|
+
) -> google.protobuf.empty_pb2.Empty:
|
|
91
|
+
"""Mount an image at a directory in the container."""
|
|
92
|
+
@abc.abstractmethod
|
|
93
|
+
def TaskSnapshotDirectory(
|
|
94
|
+
self,
|
|
95
|
+
request: modal_proto.task_command_router_pb2.TaskSnapshotDirectoryRequest,
|
|
96
|
+
context: grpc.ServicerContext,
|
|
97
|
+
) -> modal_proto.task_command_router_pb2.TaskSnapshotDirectoryResponse:
|
|
98
|
+
"""Snapshot a directory with a mounted image, including any local changes, into a new image."""
|
|
74
99
|
|
|
75
100
|
def add_TaskCommandRouterServicer_to_server(servicer: TaskCommandRouterServicer, server: grpc.Server) -> None: ...
|
modal_version/__init__.py
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|