modal 1.1.1.dev27__py3-none-any.whl → 1.1.1.dev29__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.
Potentially problematic release.
This version of modal might be problematic. Click here for more details.
- modal/_object.py +9 -1
- modal/client.pyi +2 -2
- modal/dict.py +45 -2
- modal/dict.pyi +55 -0
- modal/functions.pyi +6 -6
- modal/object.pyi +4 -0
- modal/queue.py +44 -2
- modal/queue.pyi +53 -0
- modal/secret.py +44 -2
- modal/secret.pyi +55 -0
- modal/volume.py +48 -18
- modal/volume.pyi +50 -8
- {modal-1.1.1.dev27.dist-info → modal-1.1.1.dev29.dist-info}/METADATA +1 -1
- {modal-1.1.1.dev27.dist-info → modal-1.1.1.dev29.dist-info}/RECORD +26 -26
- modal_proto/api.proto +22 -0
- modal_proto/api_grpc.py +32 -0
- modal_proto/api_pb2.py +315 -275
- modal_proto/api_pb2.pyi +71 -0
- modal_proto/api_pb2_grpc.py +66 -0
- modal_proto/api_pb2_grpc.pyi +20 -0
- modal_proto/modal_api_grpc.py +2 -0
- modal_version/__init__.py +1 -1
- {modal-1.1.1.dev27.dist-info → modal-1.1.1.dev29.dist-info}/WHEEL +0 -0
- {modal-1.1.1.dev27.dist-info → modal-1.1.1.dev29.dist-info}/entry_points.txt +0 -0
- {modal-1.1.1.dev27.dist-info → modal-1.1.1.dev29.dist-info}/licenses/LICENSE +0 -0
- {modal-1.1.1.dev27.dist-info → modal-1.1.1.dev29.dist-info}/top_level.txt +0 -0
modal/secret.pyi
CHANGED
|
@@ -1,9 +1,33 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
import google.protobuf.message
|
|
1
3
|
import modal._object
|
|
2
4
|
import modal.client
|
|
3
5
|
import modal.object
|
|
6
|
+
import modal_proto.api_pb2
|
|
4
7
|
import typing
|
|
5
8
|
import typing_extensions
|
|
6
9
|
|
|
10
|
+
class SecretInfo:
|
|
11
|
+
"""Information about the Secret object."""
|
|
12
|
+
|
|
13
|
+
name: typing.Optional[str]
|
|
14
|
+
created_at: datetime.datetime
|
|
15
|
+
created_by: typing.Optional[str]
|
|
16
|
+
|
|
17
|
+
def __init__(
|
|
18
|
+
self, name: typing.Optional[str], created_at: datetime.datetime, created_by: typing.Optional[str]
|
|
19
|
+
) -> None:
|
|
20
|
+
"""Initialize self. See help(type(self)) for accurate signature."""
|
|
21
|
+
...
|
|
22
|
+
|
|
23
|
+
def __repr__(self):
|
|
24
|
+
"""Return repr(self)."""
|
|
25
|
+
...
|
|
26
|
+
|
|
27
|
+
def __eq__(self, other):
|
|
28
|
+
"""Return self==value."""
|
|
29
|
+
...
|
|
30
|
+
|
|
7
31
|
class _Secret(modal._object._Object):
|
|
8
32
|
"""Secrets provide a dictionary of environment variables for images.
|
|
9
33
|
|
|
@@ -13,6 +37,13 @@ class _Secret(modal._object._Object):
|
|
|
13
37
|
|
|
14
38
|
See [the secrets guide page](https://modal.com/docs/guide/secrets) for more information.
|
|
15
39
|
"""
|
|
40
|
+
|
|
41
|
+
_metadata: typing.Optional[modal_proto.api_pb2.SecretMetadata]
|
|
42
|
+
|
|
43
|
+
@property
|
|
44
|
+
def name(self) -> typing.Optional[str]: ...
|
|
45
|
+
def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
|
|
46
|
+
def _get_metadata(self) -> modal_proto.api_pb2.SecretMetadata: ...
|
|
16
47
|
@staticmethod
|
|
17
48
|
def from_dict(env_dict: dict[str, typing.Optional[str]] = {}) -> _Secret:
|
|
18
49
|
"""Create a secret from a str-str dictionary. Values can also be `None`, which is ignored.
|
|
@@ -104,6 +135,12 @@ class _Secret(modal._object._Object):
|
|
|
104
135
|
"""mdmd:hidden"""
|
|
105
136
|
...
|
|
106
137
|
|
|
138
|
+
async def info(self) -> SecretInfo:
|
|
139
|
+
"""Return information about the Secret object."""
|
|
140
|
+
...
|
|
141
|
+
|
|
142
|
+
SUPERSELF = typing.TypeVar("SUPERSELF", covariant=True)
|
|
143
|
+
|
|
107
144
|
class Secret(modal.object.Object):
|
|
108
145
|
"""Secrets provide a dictionary of environment variables for images.
|
|
109
146
|
|
|
@@ -113,10 +150,17 @@ class Secret(modal.object.Object):
|
|
|
113
150
|
|
|
114
151
|
See [the secrets guide page](https://modal.com/docs/guide/secrets) for more information.
|
|
115
152
|
"""
|
|
153
|
+
|
|
154
|
+
_metadata: typing.Optional[modal_proto.api_pb2.SecretMetadata]
|
|
155
|
+
|
|
116
156
|
def __init__(self, *args, **kwargs):
|
|
117
157
|
"""mdmd:hidden"""
|
|
118
158
|
...
|
|
119
159
|
|
|
160
|
+
@property
|
|
161
|
+
def name(self) -> typing.Optional[str]: ...
|
|
162
|
+
def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
|
|
163
|
+
def _get_metadata(self) -> modal_proto.api_pb2.SecretMetadata: ...
|
|
120
164
|
@staticmethod
|
|
121
165
|
def from_dict(env_dict: dict[str, typing.Optional[str]] = {}) -> Secret:
|
|
122
166
|
"""Create a secret from a str-str dictionary. Values can also be `None`, which is ignored.
|
|
@@ -240,3 +284,14 @@ class Secret(modal.object.Object):
|
|
|
240
284
|
...
|
|
241
285
|
|
|
242
286
|
create_deployed: __create_deployed_spec
|
|
287
|
+
|
|
288
|
+
class __info_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
289
|
+
def __call__(self, /) -> SecretInfo:
|
|
290
|
+
"""Return information about the Secret object."""
|
|
291
|
+
...
|
|
292
|
+
|
|
293
|
+
async def aio(self, /) -> SecretInfo:
|
|
294
|
+
"""Return information about the Secret object."""
|
|
295
|
+
...
|
|
296
|
+
|
|
297
|
+
info: __info_spec[typing_extensions.Self]
|
modal/volume.py
CHANGED
|
@@ -11,6 +11,7 @@ import time
|
|
|
11
11
|
import typing
|
|
12
12
|
from collections.abc import AsyncGenerator, AsyncIterator, Generator, Sequence
|
|
13
13
|
from dataclasses import dataclass
|
|
14
|
+
from datetime import datetime
|
|
14
15
|
from io import BytesIO
|
|
15
16
|
from pathlib import Path, PurePosixPath
|
|
16
17
|
from typing import (
|
|
@@ -92,6 +93,18 @@ class FileEntry:
|
|
|
92
93
|
)
|
|
93
94
|
|
|
94
95
|
|
|
96
|
+
@dataclass
|
|
97
|
+
class VolumeInfo:
|
|
98
|
+
"""Information about the Volume object."""
|
|
99
|
+
|
|
100
|
+
# This dataclass should be limited to information that is unchanging over the lifetime of the Volume,
|
|
101
|
+
# since it is transmitted from the server when the object is hydrated and could be stale when accessed.
|
|
102
|
+
|
|
103
|
+
name: Optional[str]
|
|
104
|
+
created_at: datetime
|
|
105
|
+
created_by: Optional[str]
|
|
106
|
+
|
|
107
|
+
|
|
95
108
|
class _Volume(_Object, type_prefix="vo"):
|
|
96
109
|
"""A writeable volume that can be used to share files between one or more Modal functions.
|
|
97
110
|
|
|
@@ -167,6 +180,19 @@ class _Volume(_Object, type_prefix="vo"):
|
|
|
167
180
|
obj = _Volume._from_loader(_load, "Volume()", hydrate_lazily=True, deps=lambda: [self])
|
|
168
181
|
return obj
|
|
169
182
|
|
|
183
|
+
@property
|
|
184
|
+
def name(self) -> Optional[str]:
|
|
185
|
+
return self._name
|
|
186
|
+
|
|
187
|
+
def _hydrate_metadata(self, metadata: Optional[Message]):
|
|
188
|
+
if metadata:
|
|
189
|
+
assert isinstance(metadata, api_pb2.VolumeMetadata)
|
|
190
|
+
self._metadata = metadata
|
|
191
|
+
self._name = metadata.name
|
|
192
|
+
|
|
193
|
+
def _get_metadata(self) -> Optional[Message]:
|
|
194
|
+
return self._metadata
|
|
195
|
+
|
|
170
196
|
async def _get_lock(self):
|
|
171
197
|
# To (mostly*) prevent multiple concurrent operations on the same volume, which can cause problems under
|
|
172
198
|
# some unlikely circumstances.
|
|
@@ -181,6 +207,14 @@ class _Volume(_Object, type_prefix="vo"):
|
|
|
181
207
|
self._lock = asyncio.Lock()
|
|
182
208
|
return self._lock
|
|
183
209
|
|
|
210
|
+
@property
|
|
211
|
+
def _is_v1(self) -> bool:
|
|
212
|
+
return self._metadata.version in [
|
|
213
|
+
None,
|
|
214
|
+
api_pb2.VolumeFsVersion.VOLUME_FS_VERSION_UNSPECIFIED,
|
|
215
|
+
api_pb2.VolumeFsVersion.VOLUME_FS_VERSION_V1,
|
|
216
|
+
]
|
|
217
|
+
|
|
184
218
|
@staticmethod
|
|
185
219
|
def from_name(
|
|
186
220
|
name: str,
|
|
@@ -220,24 +254,7 @@ class _Volume(_Object, type_prefix="vo"):
|
|
|
220
254
|
response = await resolver.client.stub.VolumeGetOrCreate(req)
|
|
221
255
|
self._hydrate(response.volume_id, resolver.client, response.metadata)
|
|
222
256
|
|
|
223
|
-
return _Volume._from_loader(_load, "Volume()", hydrate_lazily=True)
|
|
224
|
-
|
|
225
|
-
def _hydrate_metadata(self, metadata: Optional[Message]):
|
|
226
|
-
if metadata and isinstance(metadata, api_pb2.VolumeMetadata):
|
|
227
|
-
self._metadata = metadata
|
|
228
|
-
else:
|
|
229
|
-
raise TypeError("_hydrate_metadata() requires an `api_pb2.VolumeMetadata` to determine volume version")
|
|
230
|
-
|
|
231
|
-
def _get_metadata(self) -> Optional[Message]:
|
|
232
|
-
return self._metadata
|
|
233
|
-
|
|
234
|
-
@property
|
|
235
|
-
def _is_v1(self) -> bool:
|
|
236
|
-
return self._metadata.version in [
|
|
237
|
-
None,
|
|
238
|
-
api_pb2.VolumeFsVersion.VOLUME_FS_VERSION_UNSPECIFIED,
|
|
239
|
-
api_pb2.VolumeFsVersion.VOLUME_FS_VERSION_V1,
|
|
240
|
-
]
|
|
257
|
+
return _Volume._from_loader(_load, "Volume()", hydrate_lazily=True, name=name)
|
|
241
258
|
|
|
242
259
|
@classmethod
|
|
243
260
|
@asynccontextmanager
|
|
@@ -338,6 +355,19 @@ class _Volume(_Object, type_prefix="vo"):
|
|
|
338
355
|
resp = await retry_transient_errors(client.stub.VolumeGetOrCreate, request)
|
|
339
356
|
return resp.volume_id
|
|
340
357
|
|
|
358
|
+
@live_method
|
|
359
|
+
async def info(self) -> VolumeInfo:
|
|
360
|
+
"""Return information about the Volume object."""
|
|
361
|
+
metadata = self._get_metadata()
|
|
362
|
+
if not metadata:
|
|
363
|
+
return VolumeInfo()
|
|
364
|
+
creation_info = metadata.creation_info
|
|
365
|
+
return VolumeInfo(
|
|
366
|
+
name=metadata.name or None,
|
|
367
|
+
created_at=datetime.fromtimestamp(creation_info.created_at) if creation_info.created_at else None,
|
|
368
|
+
created_by=creation_info.created_by or None,
|
|
369
|
+
)
|
|
370
|
+
|
|
341
371
|
@live_method
|
|
342
372
|
async def _do_reload(self, lock=True):
|
|
343
373
|
async with (await self._get_lock()) if lock else asyncnullcontext():
|
modal/volume.pyi
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import _io
|
|
2
2
|
import asyncio.locks
|
|
3
3
|
import collections.abc
|
|
4
|
+
import datetime
|
|
4
5
|
import enum
|
|
5
6
|
import google.protobuf.message
|
|
6
7
|
import modal._object
|
|
@@ -57,6 +58,27 @@ class FileEntry:
|
|
|
57
58
|
"""Return hash(self)."""
|
|
58
59
|
...
|
|
59
60
|
|
|
61
|
+
class VolumeInfo:
|
|
62
|
+
"""Information about the Volume object."""
|
|
63
|
+
|
|
64
|
+
name: typing.Optional[str]
|
|
65
|
+
created_at: datetime.datetime
|
|
66
|
+
created_by: typing.Optional[str]
|
|
67
|
+
|
|
68
|
+
def __init__(
|
|
69
|
+
self, name: typing.Optional[str], created_at: datetime.datetime, created_by: typing.Optional[str]
|
|
70
|
+
) -> None:
|
|
71
|
+
"""Initialize self. See help(type(self)) for accurate signature."""
|
|
72
|
+
...
|
|
73
|
+
|
|
74
|
+
def __repr__(self):
|
|
75
|
+
"""Return repr(self)."""
|
|
76
|
+
...
|
|
77
|
+
|
|
78
|
+
def __eq__(self, other):
|
|
79
|
+
"""Return self==value."""
|
|
80
|
+
...
|
|
81
|
+
|
|
60
82
|
class _Volume(modal._object._Object):
|
|
61
83
|
"""A writeable volume that can be used to share files between one or more Modal functions.
|
|
62
84
|
|
|
@@ -126,7 +148,13 @@ class _Volume(modal._object._Object):
|
|
|
126
148
|
"""
|
|
127
149
|
...
|
|
128
150
|
|
|
151
|
+
@property
|
|
152
|
+
def name(self) -> typing.Optional[str]: ...
|
|
153
|
+
def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
|
|
154
|
+
def _get_metadata(self) -> typing.Optional[google.protobuf.message.Message]: ...
|
|
129
155
|
async def _get_lock(self): ...
|
|
156
|
+
@property
|
|
157
|
+
def _is_v1(self) -> bool: ...
|
|
130
158
|
@staticmethod
|
|
131
159
|
def from_name(
|
|
132
160
|
name: str,
|
|
@@ -155,10 +183,6 @@ class _Volume(modal._object._Object):
|
|
|
155
183
|
"""
|
|
156
184
|
...
|
|
157
185
|
|
|
158
|
-
def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
|
|
159
|
-
def _get_metadata(self) -> typing.Optional[google.protobuf.message.Message]: ...
|
|
160
|
-
@property
|
|
161
|
-
def _is_v1(self) -> bool: ...
|
|
162
186
|
@classmethod
|
|
163
187
|
def ephemeral(
|
|
164
188
|
cls: type[_Volume],
|
|
@@ -218,6 +242,10 @@ class _Volume(modal._object._Object):
|
|
|
218
242
|
"""mdmd:hidden"""
|
|
219
243
|
...
|
|
220
244
|
|
|
245
|
+
async def info(self) -> VolumeInfo:
|
|
246
|
+
"""Return information about the Volume object."""
|
|
247
|
+
...
|
|
248
|
+
|
|
221
249
|
async def _do_reload(self, lock=True): ...
|
|
222
250
|
async def commit(self):
|
|
223
251
|
"""Commit changes to the volume.
|
|
@@ -424,12 +452,19 @@ class Volume(modal.object.Object):
|
|
|
424
452
|
"""
|
|
425
453
|
...
|
|
426
454
|
|
|
455
|
+
@property
|
|
456
|
+
def name(self) -> typing.Optional[str]: ...
|
|
457
|
+
def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
|
|
458
|
+
def _get_metadata(self) -> typing.Optional[google.protobuf.message.Message]: ...
|
|
459
|
+
|
|
427
460
|
class ___get_lock_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
428
461
|
def __call__(self, /): ...
|
|
429
462
|
async def aio(self, /): ...
|
|
430
463
|
|
|
431
464
|
_get_lock: ___get_lock_spec[typing_extensions.Self]
|
|
432
465
|
|
|
466
|
+
@property
|
|
467
|
+
def _is_v1(self) -> bool: ...
|
|
433
468
|
@staticmethod
|
|
434
469
|
def from_name(
|
|
435
470
|
name: str,
|
|
@@ -458,10 +493,6 @@ class Volume(modal.object.Object):
|
|
|
458
493
|
"""
|
|
459
494
|
...
|
|
460
495
|
|
|
461
|
-
def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
|
|
462
|
-
def _get_metadata(self) -> typing.Optional[google.protobuf.message.Message]: ...
|
|
463
|
-
@property
|
|
464
|
-
def _is_v1(self) -> bool: ...
|
|
465
496
|
@classmethod
|
|
466
497
|
def ephemeral(
|
|
467
498
|
cls: type[Volume],
|
|
@@ -566,6 +597,17 @@ class Volume(modal.object.Object):
|
|
|
566
597
|
|
|
567
598
|
create_deployed: __create_deployed_spec
|
|
568
599
|
|
|
600
|
+
class __info_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
601
|
+
def __call__(self, /) -> VolumeInfo:
|
|
602
|
+
"""Return information about the Volume object."""
|
|
603
|
+
...
|
|
604
|
+
|
|
605
|
+
async def aio(self, /) -> VolumeInfo:
|
|
606
|
+
"""Return information about the Volume object."""
|
|
607
|
+
...
|
|
608
|
+
|
|
609
|
+
info: __info_spec[typing_extensions.Self]
|
|
610
|
+
|
|
569
611
|
class ___do_reload_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
570
612
|
def __call__(self, /, lock=True): ...
|
|
571
613
|
async def aio(self, /, lock=True): ...
|
|
@@ -6,7 +6,7 @@ modal/_container_entrypoint.py,sha256=1qBMNY_E9ICC_sRCtillMxmKPsmxJl1J0_qOAG8rH-
|
|
|
6
6
|
modal/_functions.py,sha256=c1EeAcHcYP76wHbLomV0mFe73AoL-TUSjJNSDu6CELI,83065
|
|
7
7
|
modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
|
|
8
8
|
modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
|
|
9
|
-
modal/_object.py,sha256=
|
|
9
|
+
modal/_object.py,sha256=nCkQeLibSuvVAEIheGaLnUfN5PIh1CGpJCnzPIXymGY,11563
|
|
10
10
|
modal/_output.py,sha256=T7CRq90W09d-WD4ko7T4PBe26JNeAXE1-8HNO9xpNPI,25787
|
|
11
11
|
modal/_partial_function.py,sha256=B1J4S9W-La0NHaVmY1aCuH0E3QxJHIX6ZWY5eNTQ7io,37142
|
|
12
12
|
modal/_pty.py,sha256=JZfPDDpzqICZqtyPI_oMJf_9w-p_lLNuzHhwhodUXio,1329
|
|
@@ -22,7 +22,7 @@ modal/app.py,sha256=BBR2NmGzZbFGfhKAmtzllD0o4TbVDBbOEs0O2ysSdQo,48277
|
|
|
22
22
|
modal/app.pyi,sha256=h6JtBA6a7wobdZAuS3QuXrWCUZqfyKPuGV3XdjCqT3k,43753
|
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
|
24
24
|
modal/client.py,sha256=kyAIVB3Ay-XKJizQ_1ufUFB__EagV0MLmHJpyYyJ7J0,18636
|
|
25
|
-
modal/client.pyi,sha256=
|
|
25
|
+
modal/client.pyi,sha256=c3QfrlaMZvOXOb995cuXSphWbSb0nFokqpJCdAAm0xI,15831
|
|
26
26
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
|
27
27
|
modal/cloud_bucket_mount.pyi,sha256=-qSfYAQvIoO_l2wsCCGTG5ZUwQieNKXdAO00yP1-LYU,7394
|
|
28
28
|
modal/cls.py,sha256=7A0xGnugQzm8dOfnKMjLjtqekRlRtQ0jPFRYgq6xdUM,40018
|
|
@@ -30,8 +30,8 @@ modal/cls.pyi,sha256=_tZ5qrlL-ZDEcD-mf9BZkkNH5XPr4SmGTEQ-RVmqF3I,27772
|
|
|
30
30
|
modal/config.py,sha256=FqVewLPVVR4feq_46JBENiCzqTuXKpnvQZxaeWbS39g,12009
|
|
31
31
|
modal/container_process.py,sha256=XkPwNIW-iD_GB9u9yqv9q8y-i5cQ8eBbLZZ_GvEw9t8,6858
|
|
32
32
|
modal/container_process.pyi,sha256=9m-st3hCUlNN1GOTctfPPvIvoLtEl7FbuGWwif5-7YU,6037
|
|
33
|
-
modal/dict.py,sha256=
|
|
34
|
-
modal/dict.pyi,sha256=
|
|
33
|
+
modal/dict.py,sha256=IyhKwQPM-HX10ZT-0ouSxpM-oAWqrT5waXFHmunmtyo,15804
|
|
34
|
+
modal/dict.pyi,sha256=vUrNmCKWZqiPIQSdbMT6fCq9q1QV3qkGVdz2B_yld34,22578
|
|
35
35
|
modal/environments.py,sha256=gHFNLG78bqgizpQ4w_elz27QOqmcgAonFsmLs7NjUJ4,6804
|
|
36
36
|
modal/environments.pyi,sha256=9-KtrzAcUe55cCP4020lSUD7-fWS7OPakAHssq4-bro,4219
|
|
37
37
|
modal/exception.py,sha256=o0V93PK8Hcg2YQ2aeOB1Y-qWBw4Gz5ATfyokR8GapuQ,5634
|
|
@@ -39,7 +39,7 @@ modal/file_io.py,sha256=BVqAJ0sgPUfN8QsYztWiGB4j56he60TncM02KsylnCw,21449
|
|
|
39
39
|
modal/file_io.pyi,sha256=cPT_hsplE5iLCXhYOLn1Sp9eDdk7DxdFmicQHanJZyg,15918
|
|
40
40
|
modal/file_pattern_matcher.py,sha256=urAue8es8jxqX94k9EYoZxxhtfgOlsEES8lbFHOorzc,7734
|
|
41
41
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
|
42
|
-
modal/functions.pyi,sha256=
|
|
42
|
+
modal/functions.pyi,sha256=0P4f8ew79lf0lWXObYmNFxKoUPbWmoT0CD5IqGNKFhE,34823
|
|
43
43
|
modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
|
|
44
44
|
modal/image.py,sha256=G7JrvObATiT29G3JT_-9O4QychpqW_8b8seWXTVd1fs,102635
|
|
45
45
|
modal/image.pyi,sha256=s_AQaFoWmjLzffJGmiedFf9K1qQkedVIlsC6vRtlKS8,68161
|
|
@@ -50,7 +50,7 @@ modal/mount.pyi,sha256=n6AuS8J3bTCQj750nVZZdVBvzCAlSM2fyxAt_5LLFik,20264
|
|
|
50
50
|
modal/network_file_system.py,sha256=AdjxI_hCYaDZz60gOuJeig8yourfWhHmEpn13C_fnMA,14775
|
|
51
51
|
modal/network_file_system.pyi,sha256=Td_IobHr84iLo_9LZKQ4tNdUB60yjX8QWBaFiUvhfi8,17685
|
|
52
52
|
modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
|
|
53
|
-
modal/object.pyi,sha256=
|
|
53
|
+
modal/object.pyi,sha256=sgbaq_d3QSmnPKg5jRbMG3dOceKs0l54kHUAhAyZKAE,6796
|
|
54
54
|
modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
|
|
55
55
|
modal/parallel_map.py,sha256=-9nS9s1jbx1Iqh_5HQRK4xTdhnXF4AGIXwT4UGJ8R78,52666
|
|
56
56
|
modal/parallel_map.pyi,sha256=fCugFsGup4Cflesb10_uR-nt5_eguuvhvtvavus_F98,11186
|
|
@@ -59,8 +59,8 @@ modal/partial_function.pyi,sha256=lqqOzZ9-QvHTDWKQ_oAYYOvsXgTOBKhO9u-RI98JbUk,13
|
|
|
59
59
|
modal/proxy.py,sha256=NQJJMGo-D2IfmeU0vb10WWaE4oTLcuf9jTeEJvactOg,1446
|
|
60
60
|
modal/proxy.pyi,sha256=yWGWwADCRGrC2w81B7671UTH4Uv3HMZKy5vVqlJUZoA,1417
|
|
61
61
|
modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
|
-
modal/queue.py,sha256=
|
|
63
|
-
modal/queue.pyi,sha256=
|
|
62
|
+
modal/queue.py,sha256=19Xri5HzY0VgOxWMZ4y_mNco8jhNgn9klegXrSHWmGc,20306
|
|
63
|
+
modal/queue.pyi,sha256=Pv4OtY7j17Yb89HGKaMQRiIv0yol-aV-ZtelxQ9GrlU,28330
|
|
64
64
|
modal/retries.py,sha256=IvNLDM0f_GLUDD5VgEDoN09C88yoxSrCquinAuxT1Sc,5205
|
|
65
65
|
modal/runner.py,sha256=ostdzYpQb-20tlD6dIq7bpWTkZkOhjJBNuMNektqnJA,24068
|
|
66
66
|
modal/runner.pyi,sha256=lbwLljm1cC8d6PcNvmYQhkE8501V9fg0bYqqKX6G4r4,8489
|
|
@@ -69,8 +69,8 @@ modal/sandbox.py,sha256=_hAoBwParMzooNUo02LRt-nC5RrTGUtOutyO9oI79Kc,40896
|
|
|
69
69
|
modal/sandbox.pyi,sha256=GPPlsm-DiSUSgrxyA5bqkpuLlrfgmNR7Z7s3W0QLuQ0,41812
|
|
70
70
|
modal/schedule.py,sha256=ng0g0AqNY5GQI9KhkXZQ5Wam5G42glbkqVQsNpBtbDE,3078
|
|
71
71
|
modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
|
|
72
|
-
modal/secret.py,sha256=
|
|
73
|
-
modal/secret.pyi,sha256=
|
|
72
|
+
modal/secret.py,sha256=UaUmwYmT52VarDh92b0QzAa8_BNUAgBs-wE4eMQ6-B8,11967
|
|
73
|
+
modal/secret.pyi,sha256=zcC_OM0JzIF1ccnhNvVIlL6sY3xVjq3t0s3fE1ZDDVs,9732
|
|
74
74
|
modal/serving.py,sha256=3I3WBeVbzZY258u9PXBCW_dZBgypq3OhwBuTVvlgubE,4423
|
|
75
75
|
modal/serving.pyi,sha256=YfixTaWikyYpwhnNxCHMZnDDQiPmV1xJ87QF91U_WGU,1924
|
|
76
76
|
modal/snapshot.py,sha256=E3oxYQkYVRB_LeFBfmUV1Y6vHz8-azXJfC4x7A1QKnI,1455
|
|
@@ -78,8 +78,8 @@ modal/snapshot.pyi,sha256=0q83hlmWxAhDu8xwZyL5VmYh0i8Tigf7S60or2k30L8,1682
|
|
|
78
78
|
modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
|
|
79
79
|
modal/token_flow.py,sha256=GWpar0gANs71vm9Bd_Cj87UG1K3ljTURbkEjG3JLsrY,7616
|
|
80
80
|
modal/token_flow.pyi,sha256=eirYjyqbRiT3GCKMIPHJPpkvBTu8WxDKqSHehWaJI_4,2533
|
|
81
|
-
modal/volume.py,sha256=
|
|
82
|
-
modal/volume.pyi,sha256=
|
|
81
|
+
modal/volume.py,sha256=b3VYD-0D8rZWxoeIIYpjqm2lgxrVOjFEgTyW2btUVnw,45396
|
|
82
|
+
modal/volume.pyi,sha256=lMXzeyeC85ji8g2j0Ghy1WQrk2A2J0LPVpLFpabbr6A,41933
|
|
83
83
|
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
84
84
|
modal/_runtime/asgi.py,sha256=_2xSTsDD27Cit7xnMs4lzkJA2wzer2_N4Oa3BkXFzVA,22521
|
|
85
85
|
modal/_runtime/container_io_manager.py,sha256=hjkK4gke_A8_mULSfm3F1hZKR0C61lKbRUI8mHS-LGE,45464
|
|
@@ -151,7 +151,7 @@ modal/experimental/__init__.py,sha256=nuc7AL4r_Fs08DD5dciWFZhrV1nanwoClOfdTcudU0
|
|
|
151
151
|
modal/experimental/flash.py,sha256=7-_RBNvm0tEpdxXWuPAj5HCxfN-hSHVBep8SEWgAhCQ,19721
|
|
152
152
|
modal/experimental/flash.pyi,sha256=A8_qJGtGoXEzKDdHbvhmCw7oqfneFEvJQK3ZdTOvUdU,10830
|
|
153
153
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
|
154
|
-
modal-1.1.1.
|
|
154
|
+
modal-1.1.1.dev29.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
|
155
155
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
156
156
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
|
157
157
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
|
@@ -159,13 +159,13 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
|
|
|
159
159
|
modal_docs/mdmd/mdmd.py,sha256=eW5MzrEl7mSclDo4Uv64sQ1-4IyLggldbgUJdBVLDdI,6449
|
|
160
160
|
modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
|
|
161
161
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
162
|
-
modal_proto/api.proto,sha256=
|
|
163
|
-
modal_proto/api_grpc.py,sha256=
|
|
164
|
-
modal_proto/api_pb2.py,sha256=
|
|
165
|
-
modal_proto/api_pb2.pyi,sha256=
|
|
166
|
-
modal_proto/api_pb2_grpc.py,sha256=
|
|
167
|
-
modal_proto/api_pb2_grpc.pyi,sha256=
|
|
168
|
-
modal_proto/modal_api_grpc.py,sha256=
|
|
162
|
+
modal_proto/api.proto,sha256=3mqurCFq_Up0dPjsdMqv9pAltDPtveZUoMFOErSMCiE,103299
|
|
163
|
+
modal_proto/api_grpc.py,sha256=B8F07AbQT5s3sCEE_o-MHGwK2lqA3gdnLb_6oTWoIj8,126393
|
|
164
|
+
modal_proto/api_pb2.py,sha256=8MBFdVp0ZwmYtcB-AXAZjo1T0p4NdaXFRtyk3-T5go4,363407
|
|
165
|
+
modal_proto/api_pb2.pyi,sha256=BzL_rKxmq5nDCD8r9vBc3zmBm_EqesP0Ugag-jk-HpM,497475
|
|
166
|
+
modal_proto/api_pb2_grpc.py,sha256=gig1H1894_rLO9C5cYUwbX-JONt6nSpJenjfiFy3ZHk,272831
|
|
167
|
+
modal_proto/api_pb2_grpc.pyi,sha256=kXE43WnhqwacvJ_HB7L-hIBGg0djP3rX4lSliJN49NE,64007
|
|
168
|
+
modal_proto/modal_api_grpc.py,sha256=KL5Nw4AS9hJNxfL6VIeuxHz4jIUN7Unz7hYnoSsqyx0,19071
|
|
169
169
|
modal_proto/modal_options_grpc.py,sha256=qJ1cuwA54oRqrdTyPTbvfhFZYd9HhJKK5UCwt523r3Y,120
|
|
170
170
|
modal_proto/options.proto,sha256=zp9h5r61ivsp0XwEWwNBsVqNTbRA1VSY_UtN7sEcHtE,549
|
|
171
171
|
modal_proto/options_grpc.py,sha256=M18X3d-8F_cNYSVM3I25dUTO5rZ0rd-vCCfynfh13Nc,125
|
|
@@ -174,10 +174,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
|
|
|
174
174
|
modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
175
175
|
modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
|
|
176
176
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
177
|
-
modal_version/__init__.py,sha256=
|
|
177
|
+
modal_version/__init__.py,sha256=AVZRY8iMIyJQL2q8Pe8LkP5d2-Bp_49PrvuHJk9SfZ0,121
|
|
178
178
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
|
179
|
-
modal-1.1.1.
|
|
180
|
-
modal-1.1.1.
|
|
181
|
-
modal-1.1.1.
|
|
182
|
-
modal-1.1.1.
|
|
183
|
-
modal-1.1.1.
|
|
179
|
+
modal-1.1.1.dev29.dist-info/METADATA,sha256=xa7qid04j0zY5Siso5kqg494y8ZqN_iZXJGHocsxZVI,2460
|
|
180
|
+
modal-1.1.1.dev29.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
181
|
+
modal-1.1.1.dev29.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
|
182
|
+
modal-1.1.1.dev29.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
|
183
|
+
modal-1.1.1.dev29.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED
|
@@ -2699,6 +2699,26 @@ message SandboxRestoreResponse {
|
|
|
2699
2699
|
string sandbox_id = 1;
|
|
2700
2700
|
}
|
|
2701
2701
|
|
|
2702
|
+
message SandboxSnapshotFsAsyncGetRequest {
|
|
2703
|
+
string image_id = 1;
|
|
2704
|
+
float timeout = 2;
|
|
2705
|
+
}
|
|
2706
|
+
|
|
2707
|
+
message SandboxSnapshotFsAsyncGetResponse {
|
|
2708
|
+
string image_id = 1;
|
|
2709
|
+
GenericResult result = 2;
|
|
2710
|
+
ImageMetadata image_metadata = 3;
|
|
2711
|
+
}
|
|
2712
|
+
|
|
2713
|
+
message SandboxSnapshotFsAsyncRequest {
|
|
2714
|
+
string sandbox_id = 1;
|
|
2715
|
+
float timeout = 2;
|
|
2716
|
+
}
|
|
2717
|
+
|
|
2718
|
+
message SandboxSnapshotFsAsyncResponse {
|
|
2719
|
+
string image_id = 1;
|
|
2720
|
+
}
|
|
2721
|
+
|
|
2702
2722
|
message SandboxSnapshotFsRequest {
|
|
2703
2723
|
string sandbox_id = 1;
|
|
2704
2724
|
float timeout = 2;
|
|
@@ -3523,6 +3543,8 @@ service ModalClient {
|
|
|
3523
3543
|
rpc SandboxRestore(SandboxRestoreRequest) returns (SandboxRestoreResponse);
|
|
3524
3544
|
rpc SandboxSnapshot(SandboxSnapshotRequest) returns (SandboxSnapshotResponse);
|
|
3525
3545
|
rpc SandboxSnapshotFs(SandboxSnapshotFsRequest) returns (SandboxSnapshotFsResponse);
|
|
3546
|
+
rpc SandboxSnapshotFsAsync(SandboxSnapshotFsAsyncRequest) returns (SandboxSnapshotFsAsyncResponse);
|
|
3547
|
+
rpc SandboxSnapshotFsAsyncGet(SandboxSnapshotFsAsyncGetRequest) returns (SandboxSnapshotFsAsyncGetResponse);
|
|
3526
3548
|
rpc SandboxSnapshotGet(SandboxSnapshotGetRequest) returns (SandboxSnapshotGetResponse);
|
|
3527
3549
|
rpc SandboxSnapshotWait(SandboxSnapshotWaitRequest) returns (SandboxSnapshotWaitResponse);
|
|
3528
3550
|
rpc SandboxStdinWrite(SandboxStdinWriteRequest) returns (SandboxStdinWriteResponse);
|
modal_proto/api_grpc.py
CHANGED
|
@@ -490,6 +490,14 @@ class ModalClientBase(abc.ABC):
|
|
|
490
490
|
async def SandboxSnapshotFs(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotFsRequest, modal_proto.api_pb2.SandboxSnapshotFsResponse]') -> None:
|
|
491
491
|
pass
|
|
492
492
|
|
|
493
|
+
@abc.abstractmethod
|
|
494
|
+
async def SandboxSnapshotFsAsync(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotFsAsyncRequest, modal_proto.api_pb2.SandboxSnapshotFsAsyncResponse]') -> None:
|
|
495
|
+
pass
|
|
496
|
+
|
|
497
|
+
@abc.abstractmethod
|
|
498
|
+
async def SandboxSnapshotFsAsyncGet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotFsAsyncGetRequest, modal_proto.api_pb2.SandboxSnapshotFsAsyncGetResponse]') -> None:
|
|
499
|
+
pass
|
|
500
|
+
|
|
493
501
|
@abc.abstractmethod
|
|
494
502
|
async def SandboxSnapshotGet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotGetRequest, modal_proto.api_pb2.SandboxSnapshotGetResponse]') -> None:
|
|
495
503
|
pass
|
|
@@ -1376,6 +1384,18 @@ class ModalClientBase(abc.ABC):
|
|
|
1376
1384
|
modal_proto.api_pb2.SandboxSnapshotFsRequest,
|
|
1377
1385
|
modal_proto.api_pb2.SandboxSnapshotFsResponse,
|
|
1378
1386
|
),
|
|
1387
|
+
'/modal.client.ModalClient/SandboxSnapshotFsAsync': grpclib.const.Handler(
|
|
1388
|
+
self.SandboxSnapshotFsAsync,
|
|
1389
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
|
1390
|
+
modal_proto.api_pb2.SandboxSnapshotFsAsyncRequest,
|
|
1391
|
+
modal_proto.api_pb2.SandboxSnapshotFsAsyncResponse,
|
|
1392
|
+
),
|
|
1393
|
+
'/modal.client.ModalClient/SandboxSnapshotFsAsyncGet': grpclib.const.Handler(
|
|
1394
|
+
self.SandboxSnapshotFsAsyncGet,
|
|
1395
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
|
1396
|
+
modal_proto.api_pb2.SandboxSnapshotFsAsyncGetRequest,
|
|
1397
|
+
modal_proto.api_pb2.SandboxSnapshotFsAsyncGetResponse,
|
|
1398
|
+
),
|
|
1379
1399
|
'/modal.client.ModalClient/SandboxSnapshotGet': grpclib.const.Handler(
|
|
1380
1400
|
self.SandboxSnapshotGet,
|
|
1381
1401
|
grpclib.const.Cardinality.UNARY_UNARY,
|
|
@@ -2354,6 +2374,18 @@ class ModalClientStub:
|
|
|
2354
2374
|
modal_proto.api_pb2.SandboxSnapshotFsRequest,
|
|
2355
2375
|
modal_proto.api_pb2.SandboxSnapshotFsResponse,
|
|
2356
2376
|
)
|
|
2377
|
+
self.SandboxSnapshotFsAsync = grpclib.client.UnaryUnaryMethod(
|
|
2378
|
+
channel,
|
|
2379
|
+
'/modal.client.ModalClient/SandboxSnapshotFsAsync',
|
|
2380
|
+
modal_proto.api_pb2.SandboxSnapshotFsAsyncRequest,
|
|
2381
|
+
modal_proto.api_pb2.SandboxSnapshotFsAsyncResponse,
|
|
2382
|
+
)
|
|
2383
|
+
self.SandboxSnapshotFsAsyncGet = grpclib.client.UnaryUnaryMethod(
|
|
2384
|
+
channel,
|
|
2385
|
+
'/modal.client.ModalClient/SandboxSnapshotFsAsyncGet',
|
|
2386
|
+
modal_proto.api_pb2.SandboxSnapshotFsAsyncGetRequest,
|
|
2387
|
+
modal_proto.api_pb2.SandboxSnapshotFsAsyncGetResponse,
|
|
2388
|
+
)
|
|
2357
2389
|
self.SandboxSnapshotGet = grpclib.client.UnaryUnaryMethod(
|
|
2358
2390
|
channel,
|
|
2359
2391
|
'/modal.client.ModalClient/SandboxSnapshotGet',
|