modal 1.0.3.dev20__py3-none-any.whl → 1.0.3.dev21__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/functions.pyi +6 -6
- modal/volume.py +1 -46
- modal/volume.pyi +0 -40
- {modal-1.0.3.dev20.dist-info → modal-1.0.3.dev21.dist-info}/METADATA +1 -1
- {modal-1.0.3.dev20.dist-info → modal-1.0.3.dev21.dist-info}/RECORD +11 -11
- modal_version/__init__.py +1 -1
- {modal-1.0.3.dev20.dist-info → modal-1.0.3.dev21.dist-info}/WHEEL +0 -0
- {modal-1.0.3.dev20.dist-info → modal-1.0.3.dev21.dist-info}/entry_points.txt +0 -0
- {modal-1.0.3.dev20.dist-info → modal-1.0.3.dev21.dist-info}/licenses/LICENSE +0 -0
- {modal-1.0.3.dev20.dist-info → modal-1.0.3.dev21.dist-info}/top_level.txt +0 -0
modal/client.pyi
CHANGED
@@ -31,7 +31,7 @@ class _Client:
|
|
31
31
|
server_url: str,
|
32
32
|
client_type: int,
|
33
33
|
credentials: typing.Optional[tuple[str, str]],
|
34
|
-
version: str = "1.0.3.
|
34
|
+
version: str = "1.0.3.dev21",
|
35
35
|
): ...
|
36
36
|
def is_closed(self) -> bool: ...
|
37
37
|
@property
|
@@ -94,7 +94,7 @@ class Client:
|
|
94
94
|
server_url: str,
|
95
95
|
client_type: int,
|
96
96
|
credentials: typing.Optional[tuple[str, str]],
|
97
|
-
version: str = "1.0.3.
|
97
|
+
version: str = "1.0.3.dev21",
|
98
98
|
): ...
|
99
99
|
def is_closed(self) -> bool: ...
|
100
100
|
@property
|
modal/functions.pyi
CHANGED
@@ -227,11 +227,11 @@ class Function(
|
|
227
227
|
|
228
228
|
_call_generator: ___call_generator_spec[typing_extensions.Self]
|
229
229
|
|
230
|
-
class __remote_spec(typing_extensions.Protocol[
|
230
|
+
class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
231
231
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
232
232
|
async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
233
233
|
|
234
|
-
remote: __remote_spec[modal._functions.
|
234
|
+
remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
|
235
235
|
|
236
236
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
237
237
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
|
@@ -246,12 +246,12 @@ class Function(
|
|
246
246
|
self, *args: modal._functions.P.args, **kwargs: modal._functions.P.kwargs
|
247
247
|
) -> modal._functions.OriginalReturnType: ...
|
248
248
|
|
249
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
249
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
250
250
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
251
251
|
async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
252
252
|
|
253
253
|
_experimental_spawn: ___experimental_spawn_spec[
|
254
|
-
modal._functions.
|
254
|
+
modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
|
255
255
|
]
|
256
256
|
|
257
257
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
|
@@ -260,11 +260,11 @@ class Function(
|
|
260
260
|
|
261
261
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
|
262
262
|
|
263
|
-
class __spawn_spec(typing_extensions.Protocol[
|
263
|
+
class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
264
264
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
265
265
|
async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
266
266
|
|
267
|
-
spawn: __spawn_spec[modal._functions.
|
267
|
+
spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
|
268
268
|
|
269
269
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
|
270
270
|
|
modal/volume.py
CHANGED
@@ -45,7 +45,6 @@ from ._utils.blob_utils import (
|
|
45
45
|
BLOCK_SIZE,
|
46
46
|
FileUploadSpec,
|
47
47
|
FileUploadSpec2,
|
48
|
-
blob_iter,
|
49
48
|
blob_upload_file,
|
50
49
|
get_file_upload_spec_from_fileobj,
|
51
50
|
get_file_upload_spec_from_path,
|
@@ -400,7 +399,7 @@ class _Volume(_Object, type_prefix="vo"):
|
|
400
399
|
return [entry async for entry in self.iterdir(path, recursive=recursive)]
|
401
400
|
|
402
401
|
@live_method_gen
|
403
|
-
def read_file(self, path: str) -> AsyncIterator[bytes]:
|
402
|
+
async def read_file(self, path: str) -> AsyncIterator[bytes]:
|
404
403
|
"""
|
405
404
|
Read a file from the modal.Volume.
|
406
405
|
|
@@ -414,23 +413,6 @@ class _Volume(_Object, type_prefix="vo"):
|
|
414
413
|
print(len(data)) # == 1024 * 1024
|
415
414
|
```
|
416
415
|
"""
|
417
|
-
return self._read_file1(path) if self._is_v1 else self._read_file2(path)
|
418
|
-
|
419
|
-
async def _read_file1(self, path: str) -> AsyncIterator[bytes]:
|
420
|
-
req = api_pb2.VolumeGetFileRequest(volume_id=self.object_id, path=path)
|
421
|
-
try:
|
422
|
-
response = await retry_transient_errors(self._client.stub.VolumeGetFile, req)
|
423
|
-
except GRPCError as exc:
|
424
|
-
raise FileNotFoundError(exc.message) if exc.status == Status.NOT_FOUND else exc
|
425
|
-
# TODO(Jonathon): use ranged requests.
|
426
|
-
if response.WhichOneof("data_oneof") == "data":
|
427
|
-
yield response.data
|
428
|
-
return
|
429
|
-
else:
|
430
|
-
async for data in blob_iter(response.data_blob_id, self._client.stub):
|
431
|
-
yield data
|
432
|
-
|
433
|
-
async def _read_file2(self, path: str) -> AsyncIterator[bytes]:
|
434
416
|
req = api_pb2.VolumeGetFile2Request(volume_id=self.object_id, path=path)
|
435
417
|
|
436
418
|
try:
|
@@ -461,36 +443,9 @@ class _Volume(_Object, type_prefix="vo"):
|
|
461
443
|
Read volume file into file-like IO object.
|
462
444
|
"""
|
463
445
|
if progress_cb is None:
|
464
|
-
|
465
446
|
def progress_cb(*_, **__):
|
466
447
|
pass
|
467
448
|
|
468
|
-
if self._is_v1:
|
469
|
-
return await self._read_file_into_fileobj1(path, fileobj, progress_cb)
|
470
|
-
else:
|
471
|
-
return await self._read_file_into_fileobj2(path, fileobj, progress_cb)
|
472
|
-
|
473
|
-
async def _read_file_into_fileobj1(
|
474
|
-
self, path: str, fileobj: typing.IO[bytes], progress_cb: Callable[..., Any]
|
475
|
-
) -> int:
|
476
|
-
num_bytes_written = 0
|
477
|
-
|
478
|
-
async for chunk in self._read_file1(path):
|
479
|
-
num_chunk_bytes_written = 0
|
480
|
-
|
481
|
-
while num_chunk_bytes_written < len(chunk):
|
482
|
-
# TODO(dflemstr): this is a small write, but nonetheless might block the event loop for some time:
|
483
|
-
n = fileobj.write(chunk)
|
484
|
-
num_chunk_bytes_written += n
|
485
|
-
progress_cb(advance=n)
|
486
|
-
|
487
|
-
num_bytes_written += len(chunk)
|
488
|
-
|
489
|
-
return num_bytes_written
|
490
|
-
|
491
|
-
async def _read_file_into_fileobj2(
|
492
|
-
self, path: str, fileobj: typing.IO[bytes], progress_cb: Callable[..., Any]
|
493
|
-
) -> int:
|
494
449
|
req = api_pb2.VolumeGetFile2Request(volume_id=self.object_id, path=path)
|
495
450
|
|
496
451
|
try:
|
modal/volume.pyi
CHANGED
@@ -87,20 +87,12 @@ class _Volume(modal._object._Object):
|
|
87
87
|
def iterdir(self, path: str, *, recursive: bool = True) -> collections.abc.AsyncIterator[FileEntry]: ...
|
88
88
|
async def listdir(self, path: str, *, recursive: bool = False) -> list[FileEntry]: ...
|
89
89
|
def read_file(self, path: str) -> collections.abc.AsyncIterator[bytes]: ...
|
90
|
-
def _read_file1(self, path: str) -> collections.abc.AsyncIterator[bytes]: ...
|
91
|
-
def _read_file2(self, path: str) -> collections.abc.AsyncIterator[bytes]: ...
|
92
90
|
async def read_file_into_fileobj(
|
93
91
|
self,
|
94
92
|
path: str,
|
95
93
|
fileobj: typing.IO[bytes],
|
96
94
|
progress_cb: typing.Optional[collections.abc.Callable[..., typing.Any]] = None,
|
97
95
|
) -> int: ...
|
98
|
-
async def _read_file_into_fileobj1(
|
99
|
-
self, path: str, fileobj: typing.IO[bytes], progress_cb: collections.abc.Callable[..., typing.Any]
|
100
|
-
) -> int: ...
|
101
|
-
async def _read_file_into_fileobj2(
|
102
|
-
self, path: str, fileobj: typing.IO[bytes], progress_cb: collections.abc.Callable[..., typing.Any]
|
103
|
-
) -> int: ...
|
104
96
|
async def remove_file(self, path: str, recursive: bool = False) -> None: ...
|
105
97
|
async def copy_files(self, src_paths: collections.abc.Sequence[str], dst_path: str) -> None: ...
|
106
98
|
async def batch_upload(self, force: bool = False) -> _AbstractVolumeUploadContextManager: ...
|
@@ -236,18 +228,6 @@ class Volume(modal.object.Object):
|
|
236
228
|
|
237
229
|
read_file: __read_file_spec[typing_extensions.Self]
|
238
230
|
|
239
|
-
class ___read_file1_spec(typing_extensions.Protocol[SUPERSELF]):
|
240
|
-
def __call__(self, /, path: str) -> typing.Iterator[bytes]: ...
|
241
|
-
def aio(self, /, path: str) -> collections.abc.AsyncIterator[bytes]: ...
|
242
|
-
|
243
|
-
_read_file1: ___read_file1_spec[typing_extensions.Self]
|
244
|
-
|
245
|
-
class ___read_file2_spec(typing_extensions.Protocol[SUPERSELF]):
|
246
|
-
def __call__(self, /, path: str) -> typing.Iterator[bytes]: ...
|
247
|
-
def aio(self, /, path: str) -> collections.abc.AsyncIterator[bytes]: ...
|
248
|
-
|
249
|
-
_read_file2: ___read_file2_spec[typing_extensions.Self]
|
250
|
-
|
251
231
|
class __read_file_into_fileobj_spec(typing_extensions.Protocol[SUPERSELF]):
|
252
232
|
def __call__(
|
253
233
|
self,
|
@@ -266,26 +246,6 @@ class Volume(modal.object.Object):
|
|
266
246
|
|
267
247
|
read_file_into_fileobj: __read_file_into_fileobj_spec[typing_extensions.Self]
|
268
248
|
|
269
|
-
class ___read_file_into_fileobj1_spec(typing_extensions.Protocol[SUPERSELF]):
|
270
|
-
def __call__(
|
271
|
-
self, /, path: str, fileobj: typing.IO[bytes], progress_cb: collections.abc.Callable[..., typing.Any]
|
272
|
-
) -> int: ...
|
273
|
-
async def aio(
|
274
|
-
self, /, path: str, fileobj: typing.IO[bytes], progress_cb: collections.abc.Callable[..., typing.Any]
|
275
|
-
) -> int: ...
|
276
|
-
|
277
|
-
_read_file_into_fileobj1: ___read_file_into_fileobj1_spec[typing_extensions.Self]
|
278
|
-
|
279
|
-
class ___read_file_into_fileobj2_spec(typing_extensions.Protocol[SUPERSELF]):
|
280
|
-
def __call__(
|
281
|
-
self, /, path: str, fileobj: typing.IO[bytes], progress_cb: collections.abc.Callable[..., typing.Any]
|
282
|
-
) -> int: ...
|
283
|
-
async def aio(
|
284
|
-
self, /, path: str, fileobj: typing.IO[bytes], progress_cb: collections.abc.Callable[..., typing.Any]
|
285
|
-
) -> int: ...
|
286
|
-
|
287
|
-
_read_file_into_fileobj2: ___read_file_into_fileobj2_spec[typing_extensions.Self]
|
288
|
-
|
289
249
|
class __remove_file_spec(typing_extensions.Protocol[SUPERSELF]):
|
290
250
|
def __call__(self, /, path: str, recursive: bool = False) -> None: ...
|
291
251
|
async def aio(self, /, path: str, recursive: bool = False) -> None: ...
|
@@ -22,7 +22,7 @@ modal/app.py,sha256=NZ_rJ9TuMfiNiLg8-gOFgufD5flGtXWPHOZI0gdD3hE,46585
|
|
22
22
|
modal/app.pyi,sha256=4-b_vbe3lNAqQPcMRpQCEDsE1zsVkQRJGUql9B7HvbM,22659
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
24
24
|
modal/client.py,sha256=OwISJvkgMb-rHm9Gc4i-7YcDgGiZgwJ7F_PzwZH7a6Q,16847
|
25
|
-
modal/client.pyi,sha256=
|
25
|
+
modal/client.pyi,sha256=GbNOpyFFHcxT1yGfCbHYRCgGOkPIBEbeqrNijsaM0Yg,8459
|
26
26
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
27
27
|
modal/cloud_bucket_mount.pyi,sha256=30T3K1a89l6wzmEJ_J9iWv9SknoGqaZDx59Xs-ZQcmk,1607
|
28
28
|
modal/cls.py,sha256=dBbeARwOWftlKd1cwtM0cHFtQWSWkwVXwVmOV4w0SyI,37907
|
@@ -39,7 +39,7 @@ modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
|
|
39
39
|
modal/file_io.pyi,sha256=oB7x-rKq7bmm8cA7Z7W9C9yeko7KK9m9i5GidFnkGK4,9569
|
40
40
|
modal/file_pattern_matcher.py,sha256=wov-otB5M1oTdrYDtR2_VgacYin2srdtAP4McA1Cqzw,6516
|
41
41
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
42
|
-
modal/functions.pyi,sha256=
|
42
|
+
modal/functions.pyi,sha256=iqdp5ixtOOlm8bF-QYbD_G8VKqSRt_AVLT7AWjpn6pQ,16236
|
43
43
|
modal/gpu.py,sha256=Kbhs_u49FaC2Zi0TjCdrpstpRtT5eZgecynmQi5IZVE,6752
|
44
44
|
modal/image.py,sha256=yrI9DCw7GAck3d788GCHJom-_yU55zNu7reNapBhlgE,93284
|
45
45
|
modal/image.pyi,sha256=2xjB6XOZDtm_chDdd90UoIj8pnDt5hCg6bOmu5fNaA4,25625
|
@@ -78,8 +78,8 @@ modal/snapshot.pyi,sha256=dIEBdTPb7O3VwkQ8TMPjfyU17RLuS9i0DnACxxHy8X4,676
|
|
78
78
|
modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
|
79
79
|
modal/token_flow.py,sha256=0_4KabXKsuE4OXTJ1OuLOtA-b1sesShztMZkkRFK7tA,7605
|
80
80
|
modal/token_flow.pyi,sha256=ILbRv6JsZq-jK8jcJM7eB74e0PsbzwBm7hyPcV9lBlQ,2121
|
81
|
-
modal/volume.py,sha256=
|
82
|
-
modal/volume.pyi,sha256
|
81
|
+
modal/volume.py,sha256=ppRPv9ksA14Io-GQ2bp7Bb_5WpgfRZxoF0rIB_Q-ysU,42591
|
82
|
+
modal/volume.pyi,sha256=--W8B0-chlhmpfQPoKYa2-goSnyTEBwZVhG0ybMBRpE,19109
|
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=qKYtd52I0JAmiw1Wfy_EQXHuHsbmt-XwLqKDLBhWrZc,44289
|
@@ -147,7 +147,7 @@ modal/requirements/2024.10.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddR
|
|
147
147
|
modal/requirements/PREVIEW.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddRo,296
|
148
148
|
modal/requirements/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
|
149
149
|
modal/requirements/base-images.json,sha256=57vMSqzMbLBxw5tFWSaMiIkkVEps4JfX5PAtXGnkS4U,740
|
150
|
-
modal-1.0.3.
|
150
|
+
modal-1.0.3.dev21.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
151
151
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
152
152
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
153
153
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
@@ -170,10 +170,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
|
|
170
170
|
modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
171
171
|
modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
|
172
172
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
173
|
-
modal_version/__init__.py,sha256=
|
173
|
+
modal_version/__init__.py,sha256=8IsYshRrXfxpnnr3RAYLP6fh9v3mAo3JR2Q9FXuT5vs,121
|
174
174
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
175
|
-
modal-1.0.3.
|
176
|
-
modal-1.0.3.
|
177
|
-
modal-1.0.3.
|
178
|
-
modal-1.0.3.
|
179
|
-
modal-1.0.3.
|
175
|
+
modal-1.0.3.dev21.dist-info/METADATA,sha256=hyiyNUy3gBOWCAm_W_nC_QrS_lLv4X1zDTN6kxOOp-s,2455
|
176
|
+
modal-1.0.3.dev21.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
177
|
+
modal-1.0.3.dev21.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
178
|
+
modal-1.0.3.dev21.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
179
|
+
modal-1.0.3.dev21.dist-info/RECORD,,
|
modal_version/__init__.py
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|