modal 0.66.39__py3-none-any.whl → 0.66.44__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/_container_entrypoint.py +1 -1
- modal/_runtime/user_code_imports.py +1 -1
- modal/_utils/grpc_testing.py +33 -26
- modal/client.pyi +2 -2
- modal/cls.py +26 -19
- modal/cls.pyi +4 -4
- modal/functions.py +32 -29
- modal/functions.pyi +1 -5
- modal/image.py +49 -2
- modal/image.pyi +14 -2
- modal/io_streams.py +40 -33
- modal/io_streams.pyi +13 -13
- modal/mount.py +3 -1
- modal/partial_function.py +1 -1
- {modal-0.66.39.dist-info → modal-0.66.44.dist-info}/METADATA +1 -1
- {modal-0.66.39.dist-info → modal-0.66.44.dist-info}/RECORD +24 -24
- modal_proto/api.proto +2 -0
- modal_proto/api_pb2.py +244 -244
- modal_proto/api_pb2.pyi +7 -2
- modal_version/_version_generated.py +1 -1
- {modal-0.66.39.dist-info → modal-0.66.44.dist-info}/LICENSE +0 -0
- {modal-0.66.39.dist-info → modal-0.66.44.dist-info}/WHEEL +0 -0
- {modal-0.66.39.dist-info → modal-0.66.44.dist-info}/entry_points.txt +0 -0
- {modal-0.66.39.dist-info → modal-0.66.44.dist-info}/top_level.txt +0 -0
modal/io_streams.py
CHANGED
@@ -66,9 +66,10 @@ T = TypeVar("T", str, bytes)
|
|
66
66
|
|
67
67
|
|
68
68
|
class _StreamReader(Generic[T]):
|
69
|
-
"""
|
69
|
+
"""Retrieve logs from a stream (`stdout` or `stderr`).
|
70
70
|
|
71
|
-
As an asynchronous iterable, the object supports the async for
|
71
|
+
As an asynchronous iterable, the object supports the `for` and `async for`
|
72
|
+
statements. Just loop over the object to read in chunks.
|
72
73
|
|
73
74
|
**Usage**
|
74
75
|
|
@@ -140,12 +141,12 @@ class _StreamReader(Generic[T]):
|
|
140
141
|
self._consume_container_process_task = asyncio.create_task(self._consume_container_process_stream())
|
141
142
|
|
142
143
|
@property
|
143
|
-
def file_descriptor(self):
|
144
|
+
def file_descriptor(self) -> int:
|
145
|
+
"""Possible values are `1` for stdout and `2` for stderr."""
|
144
146
|
return self._file_descriptor
|
145
147
|
|
146
148
|
async def read(self) -> T:
|
147
|
-
"""Fetch
|
148
|
-
return an empty string.
|
149
|
+
"""Fetch the entire contents of the stream until EOF.
|
149
150
|
|
150
151
|
**Usage**
|
151
152
|
|
@@ -157,7 +158,6 @@ class _StreamReader(Generic[T]):
|
|
157
158
|
|
158
159
|
print(sandbox.stdout.read())
|
159
160
|
```
|
160
|
-
|
161
161
|
"""
|
162
162
|
data_str = ""
|
163
163
|
data_bytes = b""
|
@@ -175,9 +175,7 @@ class _StreamReader(Generic[T]):
|
|
175
175
|
return cast(T, data_bytes)
|
176
176
|
|
177
177
|
async def _consume_container_process_stream(self):
|
178
|
-
"""
|
179
|
-
Consumes the container process stream and stores the messages in the buffer.
|
180
|
-
"""
|
178
|
+
"""Consume the container process stream and store messages in the buffer."""
|
181
179
|
if self._stream_type == StreamType.DEVNULL:
|
182
180
|
return
|
183
181
|
|
@@ -211,9 +209,7 @@ class _StreamReader(Generic[T]):
|
|
211
209
|
raise exc
|
212
210
|
|
213
211
|
async def _stream_container_process(self) -> AsyncGenerator[Tuple[Optional[bytes], str], None]:
|
214
|
-
"""
|
215
|
-
Streams the container process buffer to the reader.
|
216
|
-
"""
|
212
|
+
"""Streams the container process buffer to the reader."""
|
217
213
|
entry_id = 0
|
218
214
|
if self._last_entry_id:
|
219
215
|
entry_id = int(self._last_entry_id) + 1
|
@@ -232,8 +228,7 @@ class _StreamReader(Generic[T]):
|
|
232
228
|
entry_id += 1
|
233
229
|
|
234
230
|
async def _get_logs(self) -> AsyncGenerator[Optional[bytes], None]:
|
235
|
-
"""
|
236
|
-
Streams sandbox or process logs from the server to the reader.
|
231
|
+
"""Streams sandbox or process logs from the server to the reader.
|
237
232
|
|
238
233
|
Logs returned by this method may contain partial or multiple lines at a time.
|
239
234
|
|
@@ -278,9 +273,7 @@ class _StreamReader(Generic[T]):
|
|
278
273
|
raise
|
279
274
|
|
280
275
|
async def _get_logs_by_line(self) -> AsyncGenerator[Optional[bytes], None]:
|
281
|
-
"""
|
282
|
-
Processes logs from the server and yields complete lines only.
|
283
|
-
"""
|
276
|
+
"""Process logs from the server and yield complete lines only."""
|
284
277
|
async for message in self._get_logs():
|
285
278
|
if message is None:
|
286
279
|
if self._line_buffer:
|
@@ -325,7 +318,8 @@ MAX_BUFFER_SIZE = 2 * 1024 * 1024
|
|
325
318
|
class _StreamWriter:
|
326
319
|
"""Provides an interface to buffer and write logs to a sandbox or container process stream (`stdin`)."""
|
327
320
|
|
328
|
-
def __init__(self, object_id: str, object_type: Literal["sandbox", "container_process"], client: _Client):
|
321
|
+
def __init__(self, object_id: str, object_type: Literal["sandbox", "container_process"], client: _Client) -> None:
|
322
|
+
"""mdmd:hidden"""
|
329
323
|
self._index = 1
|
330
324
|
self._object_id = object_id
|
331
325
|
self._object_type = object_type
|
@@ -333,17 +327,16 @@ class _StreamWriter:
|
|
333
327
|
self._is_closed = False
|
334
328
|
self._buffer = bytearray()
|
335
329
|
|
336
|
-
def
|
337
|
-
"""mdmd:hidden"""
|
330
|
+
def _get_next_index(self) -> int:
|
338
331
|
index = self._index
|
339
332
|
self._index += 1
|
340
333
|
return index
|
341
334
|
|
342
|
-
def write(self, data: Union[bytes, bytearray, memoryview, str]):
|
343
|
-
"""
|
344
|
-
Writes data to stream's internal buffer, but does not drain/flush the write.
|
335
|
+
def write(self, data: Union[bytes, bytearray, memoryview, str]) -> None:
|
336
|
+
"""Write data to the stream but does not send it immediately.
|
345
337
|
|
346
|
-
This
|
338
|
+
This is non-blocking and queues the data to an internal buffer. Must be
|
339
|
+
used along with the `drain()` method, which flushes the buffer.
|
347
340
|
|
348
341
|
**Usage**
|
349
342
|
|
@@ -375,22 +368,36 @@ class _StreamWriter:
|
|
375
368
|
else:
|
376
369
|
raise TypeError(f"data argument must be a bytes-like object, not {type(data).__name__}")
|
377
370
|
|
378
|
-
def write_eof(self):
|
379
|
-
"""
|
380
|
-
Closes the write end of the stream after the buffered write data is drained.
|
381
|
-
If the process was blocked on input, it will become unblocked after `write_eof()`.
|
371
|
+
def write_eof(self) -> None:
|
372
|
+
"""Close the write end of the stream after the buffered data is drained.
|
382
373
|
|
383
|
-
|
374
|
+
If the process was blocked on input, it will become unblocked after
|
375
|
+
`write_eof()`. This method needs to be used along with the `drain()`
|
376
|
+
method, which flushes the EOF to the process.
|
384
377
|
"""
|
385
378
|
self._is_closed = True
|
386
379
|
|
387
|
-
async def drain(self):
|
388
|
-
"""
|
389
|
-
|
380
|
+
async def drain(self) -> None:
|
381
|
+
"""Flush the write buffer and send data to the running process.
|
382
|
+
|
383
|
+
This is a flow control method that blocks until data is sent. It returns
|
384
|
+
when it is appropriate to continue writing data to the stream.
|
385
|
+
|
386
|
+
**Usage**
|
387
|
+
|
388
|
+
```python
|
389
|
+
# Synchronous
|
390
|
+
writer.write(data)
|
391
|
+
writer.drain()
|
392
|
+
|
393
|
+
# Async
|
394
|
+
writer.write(data)
|
395
|
+
await writer.drain.aio()
|
396
|
+
```
|
390
397
|
"""
|
391
398
|
data = bytes(self._buffer)
|
392
399
|
self._buffer.clear()
|
393
|
-
index = self.
|
400
|
+
index = self._get_next_index()
|
394
401
|
|
395
402
|
try:
|
396
403
|
if self._object_type == "sandbox":
|
modal/io_streams.pyi
CHANGED
@@ -26,7 +26,7 @@ class _StreamReader(typing.Generic[T]):
|
|
26
26
|
by_line: bool = False,
|
27
27
|
) -> None: ...
|
28
28
|
@property
|
29
|
-
def file_descriptor(self): ...
|
29
|
+
def file_descriptor(self) -> int: ...
|
30
30
|
async def read(self) -> T: ...
|
31
31
|
async def _consume_container_process_stream(self): ...
|
32
32
|
def _stream_container_process(self) -> typing.AsyncGenerator[typing.Tuple[typing.Optional[bytes], str], None]: ...
|
@@ -38,11 +38,11 @@ class _StreamReader(typing.Generic[T]):
|
|
38
38
|
class _StreamWriter:
|
39
39
|
def __init__(
|
40
40
|
self, object_id: str, object_type: typing.Literal["sandbox", "container_process"], client: modal.client._Client
|
41
|
-
): ...
|
42
|
-
def
|
43
|
-
def write(self, data: typing.Union[bytes, bytearray, memoryview, str]): ...
|
44
|
-
def write_eof(self): ...
|
45
|
-
async def drain(self): ...
|
41
|
+
) -> None: ...
|
42
|
+
def _get_next_index(self) -> int: ...
|
43
|
+
def write(self, data: typing.Union[bytes, bytearray, memoryview, str]) -> None: ...
|
44
|
+
def write_eof(self) -> None: ...
|
45
|
+
async def drain(self) -> None: ...
|
46
46
|
|
47
47
|
T_INNER = typing.TypeVar("T_INNER", covariant=True)
|
48
48
|
|
@@ -60,7 +60,7 @@ class StreamReader(typing.Generic[T]):
|
|
60
60
|
by_line: bool = False,
|
61
61
|
) -> None: ...
|
62
62
|
@property
|
63
|
-
def file_descriptor(self): ...
|
63
|
+
def file_descriptor(self) -> int: ...
|
64
64
|
|
65
65
|
class __read_spec(typing_extensions.Protocol[T_INNER]):
|
66
66
|
def __call__(self) -> T_INNER: ...
|
@@ -100,13 +100,13 @@ class StreamReader(typing.Generic[T]):
|
|
100
100
|
class StreamWriter:
|
101
101
|
def __init__(
|
102
102
|
self, object_id: str, object_type: typing.Literal["sandbox", "container_process"], client: modal.client.Client
|
103
|
-
): ...
|
104
|
-
def
|
105
|
-
def write(self, data: typing.Union[bytes, bytearray, memoryview, str]): ...
|
106
|
-
def write_eof(self): ...
|
103
|
+
) -> None: ...
|
104
|
+
def _get_next_index(self) -> int: ...
|
105
|
+
def write(self, data: typing.Union[bytes, bytearray, memoryview, str]) -> None: ...
|
106
|
+
def write_eof(self) -> None: ...
|
107
107
|
|
108
108
|
class __drain_spec(typing_extensions.Protocol):
|
109
|
-
def __call__(self): ...
|
110
|
-
async def aio(self): ...
|
109
|
+
def __call__(self) -> None: ...
|
110
|
+
async def aio(self) -> None: ...
|
111
111
|
|
112
112
|
drain: __drain_spec
|
modal/mount.py
CHANGED
@@ -377,7 +377,9 @@ class _Mount(_Object, type_prefix="mo"):
|
|
377
377
|
)
|
378
378
|
|
379
379
|
def add_local_file(
|
380
|
-
self,
|
380
|
+
self,
|
381
|
+
local_path: Union[str, Path],
|
382
|
+
remote_path: Union[str, PurePosixPath, None] = None,
|
381
383
|
) -> "_Mount":
|
382
384
|
"""
|
383
385
|
Add a local file to the `Mount` object.
|
modal/partial_function.py
CHANGED
@@ -91,7 +91,7 @@ class _PartialFunction(typing.Generic[P, ReturnType, OriginalReturnType]):
|
|
91
91
|
if obj: # accessing the method on an instance of a class, e.g. `MyClass().fun``
|
92
92
|
if hasattr(obj, "_modal_functions"):
|
93
93
|
# This happens inside "local" user methods when they refer to other methods,
|
94
|
-
# e.g. Foo().parent_method()
|
94
|
+
# e.g. Foo().parent_method.remote() calling self.other_method.remote()
|
95
95
|
return getattr(obj, "_modal_functions")[k]
|
96
96
|
else:
|
97
97
|
# special edge case: referencing a method of an instance of an
|
@@ -2,7 +2,7 @@ modal/__init__.py,sha256=Yn8zS7Jxl5uZjPM331Pc4FdSmp9Rt6VdE7TiE4ZKRc8,2151
|
|
2
2
|
modal/__main__.py,sha256=scYhGFqh8OJcVDo-VOxIT6CCwxOgzgflYWMnIZiMRqE,2871
|
3
3
|
modal/_clustered_functions.py,sha256=58spAmCbOk8eyjFKW-H21W-FGyYiJmfpEMK4BnTEUrk,2706
|
4
4
|
modal/_clustered_functions.pyi,sha256=UQ7DHiQFI3A2Z8kC3gltNHJkQfvgvPuSbFsse9lSPkw,785
|
5
|
-
modal/_container_entrypoint.py,sha256=
|
5
|
+
modal/_container_entrypoint.py,sha256=qP7TRT92_wKlxR-XuLg1FzJ7w4oknlrWDlp68XE0CwQ,28670
|
6
6
|
modal/_ipython.py,sha256=HF_DYy0e0qM9WnGDmTY30s1RxzGya9GeORCauCEpRaE,450
|
7
7
|
modal/_location.py,sha256=S3lSxIU3h9HkWpkJ3Pwo0pqjIOSB1fjeSgUsY3x7eec,1202
|
8
8
|
modal/_output.py,sha256=SMaLrf1btBzHTV_tH5NzA8ZTWNJh5J0b31iG3sQU8_4,25494
|
@@ -19,11 +19,11 @@ modal/app.py,sha256=QEBK8qYSrux36oi3iS3msBQmcUOS1r4s2nengzzynjQ,44658
|
|
19
19
|
modal/app.pyi,sha256=wHwBIDqkUb2CQzYVhxZafJ8xZ17TZ-8y-cRyOeZsEm0,25182
|
20
20
|
modal/call_graph.py,sha256=l-Wi6vM8aosCdHTWegcCyGeVJGFdZ_fzlCmbRVPBXFI,2593
|
21
21
|
modal/client.py,sha256=4SpWb4n0nolITR36kADZl1tYLOg6avukmzZU56UQjCo,16385
|
22
|
-
modal/client.pyi,sha256=
|
22
|
+
modal/client.pyi,sha256=G8PEZZNj243tqHX-HnfOm5hyUADo34xQEiOLCpPVVxU,7372
|
23
23
|
modal/cloud_bucket_mount.py,sha256=eWQhCtMIczpokjfTZEgNBCGO_s5ft46PqTSLfKBykq4,5748
|
24
24
|
modal/cloud_bucket_mount.pyi,sha256=tTF7M4FR9bTA30cFkz8qq3ZTlFL19NHU_36e_5GgAGA,1424
|
25
|
-
modal/cls.py,sha256=
|
26
|
-
modal/cls.pyi,sha256=
|
25
|
+
modal/cls.py,sha256=apKnBOHKYEpBiMC8mRvHtCDJl1g0vP0tG1r8mUZ1yH0,24684
|
26
|
+
modal/cls.pyi,sha256=om3xQuHTMu7q_32BDKJjAz4oP_7Z5JWV27kyDKTPFI8,8332
|
27
27
|
modal/config.py,sha256=oVmvclQ2Qlt-VmL3wEp8DgDrnTPh_K5UBEYrSXv4C4s,10928
|
28
28
|
modal/container_process.py,sha256=c_jBPtyPeSxbIcbLfs_FzTrt-1eErtRSnsfxkDozFoY,5589
|
29
29
|
modal/container_process.pyi,sha256=k2kClwaSzz11eci1pzFZgCm-ptXapHAyHTOENorlazA,2594
|
@@ -33,14 +33,14 @@ modal/environments.py,sha256=KwKdrWfSnz2XF5eYXZyd0kdac1x1PVw2uxPYsGy8cys,6517
|
|
33
33
|
modal/environments.pyi,sha256=oScvFAclF55-tL9UioLIL_SPBwgy_9O-BBvJ-PLbRgY,3542
|
34
34
|
modal/exception.py,sha256=K-czk1oK8wFvK8snWrytXSByo2WNb9SJAlgBVPGWZBs,6417
|
35
35
|
modal/experimental.py,sha256=jFuNbwrNHos47viMB9q-cHJSvf2RDxDdoEcss9plaZE,2302
|
36
|
-
modal/functions.py,sha256=
|
37
|
-
modal/functions.pyi,sha256=
|
36
|
+
modal/functions.py,sha256=BxccB-3a1migZQ6JA6iiHZJQ7WQ-jYpmg9DEZoTxzcc,71639
|
37
|
+
modal/functions.pyi,sha256=5JGM4Mhpm674Ia7h3OTsPBmZA32goyOs2oBCCUG8A3I,24800
|
38
38
|
modal/gpu.py,sha256=r4rL6uH3UJIQthzYvfWauXNyh01WqCPtKZCmmSX1fd4,6881
|
39
|
-
modal/image.py,sha256=
|
40
|
-
modal/image.pyi,sha256=
|
41
|
-
modal/io_streams.py,sha256=
|
42
|
-
modal/io_streams.pyi,sha256=
|
43
|
-
modal/mount.py,sha256=
|
39
|
+
modal/image.py,sha256=j-NH8pLWk4jd5UOGD4y6W7DHWoeb3rG_VR7zPLSqj-Q,78927
|
40
|
+
modal/image.pyi,sha256=QEjjnl4ZSmqt7toHww5ZbhL2Re5qaFGgH7qADcJS_vA,24493
|
41
|
+
modal/io_streams.py,sha256=XUsNsxRzDrhkjyb2Hx0hugCoOEz266SHQF8wP-VgsfY,14582
|
42
|
+
modal/io_streams.pyi,sha256=WJmSI1WvZITUNBO7mnIuJgYdSKdbLaHk10V4GbttAVw,4452
|
43
|
+
modal/mount.py,sha256=QZ4nabpbNU9tjLIPCq86rlHor9CXzADMkhJWBYfKKgg,27750
|
44
44
|
modal/mount.pyi,sha256=nywUmeUELLY2OEnAc1NNBHmSxuEylTWBzkh6nuXkkuc,9965
|
45
45
|
modal/network_file_system.py,sha256=P_LsILecyda1SRHU76Hk4Lq3M1HSx9shFJbaLThzw0U,14071
|
46
46
|
modal/network_file_system.pyi,sha256=XLyUnDx55ExbJcF_xlKxRax_r06XTvSsQh-a-_EyCOU,7239
|
@@ -49,7 +49,7 @@ modal/object.pyi,sha256=cwWg93H4rBk9evt1itLZAZXH5wUMyTJBZ_ADazgfjGg,8465
|
|
49
49
|
modal/output.py,sha256=FtPR7yvjZMgdSKD_KYkIcwYgCOiV9EKYjaj7K55Hjvg,1940
|
50
50
|
modal/parallel_map.py,sha256=lf8Wer6FAf8-dYqPqoL45cz7FYDU66-TF-h5CO2Kf5Q,16052
|
51
51
|
modal/parallel_map.pyi,sha256=pOhT0P3DDYlwLx0fR3PTsecA7DI8uOdXC1N8i-ZkyOY,2328
|
52
|
-
modal/partial_function.py,sha256=
|
52
|
+
modal/partial_function.py,sha256=xkEqMPG0rnP_BUDqGikerv6uiWxDkwZdIFSdoHMDm2A,28216
|
53
53
|
modal/partial_function.pyi,sha256=BqKN7It5QLxS2yhhhDX0RgI8EyNMPBD6Duk21kN_fvA,8908
|
54
54
|
modal/proxy.py,sha256=ZrOsuQP7dSZFq1OrIxalNnt0Zvsnp1h86Th679sSL40,1417
|
55
55
|
modal/proxy.pyi,sha256=UvygdOYneLTuoDY6hVaMNCyZ947Tmx93IdLjErUqkvM,368
|
@@ -78,13 +78,13 @@ modal/_runtime/asgi.py,sha256=WoAwIiGKpk089MOca3_iA73h36v0uBuoPx0-87ajIDY,19843
|
|
78
78
|
modal/_runtime/container_io_manager.py,sha256=_MEhwyCSYeCaPQnztPxkm0anRXa3CPcwIKi403N53uo,44120
|
79
79
|
modal/_runtime/execution_context.py,sha256=cXEVY4wEK-oZJVJptyj1ZplZvVQ1HDzFsyHxhaY4o8M,2718
|
80
80
|
modal/_runtime/telemetry.py,sha256=3NbrfwYH6mvDckzdTppymmda2lQKX2oHGc2JwdFZdUc,5191
|
81
|
-
modal/_runtime/user_code_imports.py,sha256=
|
81
|
+
modal/_runtime/user_code_imports.py,sha256=2COhqA77zwbP__-DWiDHEScHM-Go3CmI-AlKvT_oBOU,14545
|
82
82
|
modal/_utils/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
|
83
83
|
modal/_utils/app_utils.py,sha256=88BT4TPLWfYAQwKTHcyzNQRHg8n9B-QE2UyJs96iV-0,108
|
84
84
|
modal/_utils/async_utils.py,sha256=3H4pBC4DW6rCA6hgRux6FMxGqPgHM-G-BTs7KXZiWz4,23958
|
85
85
|
modal/_utils/blob_utils.py,sha256=pAY22w0oVc6ujGfI7La7HPUMOf42FehIapuhSDeeqEs,15835
|
86
86
|
modal/_utils/function_utils.py,sha256=28mxgg_-7JF1DDiNnp3iNVsFQkOzMFjORsetdvZZTHU,24475
|
87
|
-
modal/_utils/grpc_testing.py,sha256=
|
87
|
+
modal/_utils/grpc_testing.py,sha256=LOzWygTdHINzV-o_Ajbl7sOFbUQFoonP0iKpsJjA_nc,8301
|
88
88
|
modal/_utils/grpc_utils.py,sha256=tM1Q32VOU2WG733IfVHTLZdiyCe8Ga0f0Dx0iDLLy_8,7724
|
89
89
|
modal/_utils/hash_utils.py,sha256=HefF7zPQPxFxyx3fpz-AdSm4QsHZNNvgL9-iQHY-_F4,1790
|
90
90
|
modal/_utils/http_utils.py,sha256=VKXYNPJtrSwZ1ttcXVGQUWmn8cLAXiOTv05g2ac3GbU,2179
|
@@ -142,10 +142,10 @@ modal_global_objects/mounts/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0
|
|
142
142
|
modal_global_objects/mounts/modal_client_package.py,sha256=W0E_yShsRojPzWm6LtIQqNVolapdnrZkm2hVEQuZK_4,767
|
143
143
|
modal_global_objects/mounts/python_standalone.py,sha256=_vTEX3PECUsatzhDs8lyJmDK0LbFetT1sJB6MIDfFAo,1870
|
144
144
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
145
|
-
modal_proto/api.proto,sha256=
|
145
|
+
modal_proto/api.proto,sha256=hc-xY5jmYeimEP0X-nKoiz8pZpMMKidUoNR2IOeebeI,77386
|
146
146
|
modal_proto/api_grpc.py,sha256=S7h8xe-msb3-Q8oSd7DUoB46z-dcRhsXGb6LjFCLNFI,99013
|
147
|
-
modal_proto/api_pb2.py,sha256=
|
148
|
-
modal_proto/api_pb2.pyi,sha256=
|
147
|
+
modal_proto/api_pb2.py,sha256=PLRmPloiKDiiziRzbZrzF3Cr-Cn5uCv9USwc7nC_eeg,282809
|
148
|
+
modal_proto/api_pb2.pyi,sha256=XHVPoCf60XtqCJrj7hIpu3d5ncdk3792ugyNq9XS-f4,378110
|
149
149
|
modal_proto/api_pb2_grpc.py,sha256=g7EfCSir3xStPPjJOU2U668zz6cGdN6u7SxvTTwU9aU,214126
|
150
150
|
modal_proto/api_pb2_grpc.pyi,sha256=9GhLZVRm69Qhyj_jmGqEGv1rD37Tzj6E6hGzKV08u48,49961
|
151
151
|
modal_proto/modal_api_grpc.py,sha256=en48QTR5fwA7x0twtlsqLKRjjDEAKVoh6EeSznQfQ3U,13236
|
@@ -159,10 +159,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
|
|
159
159
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
160
160
|
modal_version/__init__.py,sha256=UnAuHBPuPSstqgdCOx0SBVdfhpeJnMlY_oxEbu44Izg,470
|
161
161
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
162
|
-
modal_version/_version_generated.py,sha256=
|
163
|
-
modal-0.66.
|
164
|
-
modal-0.66.
|
165
|
-
modal-0.66.
|
166
|
-
modal-0.66.
|
167
|
-
modal-0.66.
|
168
|
-
modal-0.66.
|
162
|
+
modal_version/_version_generated.py,sha256=K3KTopYH17C5MMGzy3fUGtpOXRNNR7V0OY19WIBopyw,149
|
163
|
+
modal-0.66.44.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
164
|
+
modal-0.66.44.dist-info/METADATA,sha256=YzAinNyCi4yGXbE_WKgrgchbMkTiWxI0ttvOlgIDkYE,2329
|
165
|
+
modal-0.66.44.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
166
|
+
modal-0.66.44.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
167
|
+
modal-0.66.44.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
|
168
|
+
modal-0.66.44.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED