modal 1.0.3.dev26__py3-none-any.whl → 1.0.3.dev27__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/cli/volume.py +2 -1
- modal/client.pyi +2 -2
- modal/functions.pyi +6 -6
- modal/volume.py +10 -3
- modal/volume.pyi +9 -3
- {modal-1.0.3.dev26.dist-info → modal-1.0.3.dev27.dist-info}/METADATA +1 -1
- {modal-1.0.3.dev26.dist-info → modal-1.0.3.dev27.dist-info}/RECORD +12 -12
- modal_version/__init__.py +1 -1
- {modal-1.0.3.dev26.dist-info → modal-1.0.3.dev27.dist-info}/WHEEL +0 -0
- {modal-1.0.3.dev26.dist-info → modal-1.0.3.dev27.dist-info}/entry_points.txt +0 -0
- {modal-1.0.3.dev26.dist-info → modal-1.0.3.dev27.dist-info}/licenses/LICENSE +0 -0
- {modal-1.0.3.dev26.dist-info → modal-1.0.3.dev27.dist-info}/top_level.txt +0 -0
modal/cli/volume.py
CHANGED
@@ -265,12 +265,13 @@ async def rm(
|
|
265
265
|
async def cp(
|
266
266
|
volume_name: str,
|
267
267
|
paths: list[str], # accepts multiple paths, last path is treated as destination path
|
268
|
+
recursive: bool = Option(False, "-r", "--recursive", help="Copy directories recursively"),
|
268
269
|
env: Optional[str] = ENV_OPTION,
|
269
270
|
):
|
270
271
|
ensure_env(env)
|
271
272
|
volume = _Volume.from_name(volume_name, environment_name=env)
|
272
273
|
*src_paths, dst_path = paths
|
273
|
-
await volume.copy_files(src_paths, dst_path)
|
274
|
+
await volume.copy_files(src_paths, dst_path, recursive)
|
274
275
|
|
275
276
|
|
276
277
|
@volume_cli.command(
|
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.dev27",
|
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.dev27",
|
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[ReturnType_INNER, P_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.ReturnType, modal._functions.P, 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[ReturnType_INNER, P_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.ReturnType, modal._functions.P, 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[ReturnType_INNER, P_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.ReturnType, modal._functions.P, typing_extensions.Self]
|
268
268
|
|
269
269
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
|
270
270
|
|
modal/volume.py
CHANGED
@@ -498,7 +498,7 @@ class _Volume(_Object, type_prefix="vo"):
|
|
498
498
|
await retry_transient_errors(self._client.stub.VolumeRemoveFile2, req)
|
499
499
|
|
500
500
|
@live_method
|
501
|
-
async def copy_files(self, src_paths: Sequence[str], dst_path: str) -> None:
|
501
|
+
async def copy_files(self, src_paths: Sequence[str], dst_path: str, recursive: bool = False) -> None:
|
502
502
|
"""
|
503
503
|
Copy files within the volume from src_paths to dst_path.
|
504
504
|
The semantics of the copy operation follow those of the UNIX cp command.
|
@@ -523,10 +523,17 @@ class _Volume(_Object, type_prefix="vo"):
|
|
523
523
|
the volume mounted as a filesystem, e.g. when running a script on your local computer.
|
524
524
|
"""
|
525
525
|
if self._is_v1:
|
526
|
-
|
526
|
+
if recursive:
|
527
|
+
raise ValueError("`recursive` is not supported for V1 volumes")
|
528
|
+
|
529
|
+
request = api_pb2.VolumeCopyFilesRequest(
|
530
|
+
volume_id=self.object_id, src_paths=src_paths, dst_path=dst_path, recursive=recursive
|
531
|
+
)
|
527
532
|
await retry_transient_errors(self._client.stub.VolumeCopyFiles, request, base_delay=1)
|
528
533
|
else:
|
529
|
-
request = api_pb2.VolumeCopyFiles2Request(
|
534
|
+
request = api_pb2.VolumeCopyFiles2Request(
|
535
|
+
volume_id=self.object_id, src_paths=src_paths, dst_path=dst_path, recursive=recursive
|
536
|
+
)
|
530
537
|
await retry_transient_errors(self._client.stub.VolumeCopyFiles2, request, base_delay=1)
|
531
538
|
|
532
539
|
@live_method
|
modal/volume.pyi
CHANGED
@@ -94,7 +94,9 @@ class _Volume(modal._object._Object):
|
|
94
94
|
progress_cb: typing.Optional[collections.abc.Callable[..., typing.Any]] = None,
|
95
95
|
) -> int: ...
|
96
96
|
async def remove_file(self, path: str, recursive: bool = False) -> None: ...
|
97
|
-
async def copy_files(
|
97
|
+
async def copy_files(
|
98
|
+
self, src_paths: collections.abc.Sequence[str], dst_path: str, recursive: bool = False
|
99
|
+
) -> None: ...
|
98
100
|
async def batch_upload(self, force: bool = False) -> _AbstractVolumeUploadContextManager: ...
|
99
101
|
async def _instance_delete(self): ...
|
100
102
|
@staticmethod
|
@@ -253,8 +255,12 @@ class Volume(modal.object.Object):
|
|
253
255
|
remove_file: __remove_file_spec[typing_extensions.Self]
|
254
256
|
|
255
257
|
class __copy_files_spec(typing_extensions.Protocol[SUPERSELF]):
|
256
|
-
def __call__(
|
257
|
-
|
258
|
+
def __call__(
|
259
|
+
self, /, src_paths: collections.abc.Sequence[str], dst_path: str, recursive: bool = False
|
260
|
+
) -> None: ...
|
261
|
+
async def aio(
|
262
|
+
self, /, src_paths: collections.abc.Sequence[str], dst_path: str, recursive: bool = False
|
263
|
+
) -> None: ...
|
258
264
|
|
259
265
|
copy_files: __copy_files_spec[typing_extensions.Self]
|
260
266
|
|
@@ -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=1GPfWYDBPCm6S9mgPue1-ZgAnApI1I1qMQcGkhH53dE,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=5T58OucdNU4I-LqhBdwsWSAGka-Wa8nP2GcZ5K1bOL0,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=KOucCFS5uBTJ5IDUNYhBZfpAYp7U36YynpCdyyEmzpU,42825
|
82
|
+
modal/volume.pyi,sha256=Os4MESmmUPkLF5jOW6nbrozMILDh6Uzb1VB_nLm-pLQ,19242
|
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
|
@@ -134,7 +134,7 @@ modal/cli/run.py,sha256=vB4Qc0w9-8778Kme038DPxpFLLVAGo_KcJ7403ikMJY,24325
|
|
134
134
|
modal/cli/secret.py,sha256=2bngl3Gb6THXkQ2eWZIN9pOHeOFJqiSNo_waUCVYgns,6611
|
135
135
|
modal/cli/token.py,sha256=mxSgOWakXG6N71hQb1ko61XAR9ZGkTMZD-Txn7gmTac,1924
|
136
136
|
modal/cli/utils.py,sha256=9Q7DIUX78-c19zBQNA7EtkgqIFatvHWUVGHwUIeBX_0,3366
|
137
|
-
modal/cli/volume.py,sha256=
|
137
|
+
modal/cli/volume.py,sha256=W7i4zJyHSPmvP4e4CEv739KpoDCmFO3aIXxPQuuetXg,10840
|
138
138
|
modal/cli/programs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
139
139
|
modal/cli/programs/run_jupyter.py,sha256=44Lpvqk2l3hH-uOkmAOzw60NEsfB5uaRDWDKVshvQhs,2682
|
140
140
|
modal/cli/programs/vscode.py,sha256=KbTAaIXyQBVCDXxXjmBHmKpgXkUw0q4R4KkJvUjCYgk,3380
|
@@ -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.dev27.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=eirvDB9Mszj-uky9aXge_PlFZb6oYhExcj5KYivAi_c,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.dev27.dist-info/METADATA,sha256=pF-z-vH6sWixfB-QK9R3bhOfUpaspS76-MU6tf8hnbA,2455
|
176
|
+
modal-1.0.3.dev27.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
177
|
+
modal-1.0.3.dev27.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
178
|
+
modal-1.0.3.dev27.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
179
|
+
modal-1.0.3.dev27.dist-info/RECORD,,
|
modal_version/__init__.py
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|