modal 1.1.2.dev43__py3-none-any.whl → 1.1.3.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/_functions.py +68 -1
- modal/app.py +2 -2
- modal/client.pyi +2 -2
- modal/dict.py +7 -0
- modal/dict.pyi +18 -0
- modal/functions.pyi +63 -13
- modal/parallel_map.py +8 -6
- modal/parallel_map.pyi +8 -7
- modal/queue.py +7 -0
- modal/queue.pyi +18 -0
- modal/secret.py +7 -0
- modal/secret.pyi +18 -0
- modal/volume.py +10 -0
- modal/volume.pyi +21 -0
- {modal-1.1.2.dev43.dist-info → modal-1.1.3.dev0.dist-info}/METADATA +1 -1
- {modal-1.1.2.dev43.dist-info → modal-1.1.3.dev0.dist-info}/RECORD +21 -21
- modal_version/__init__.py +1 -1
- {modal-1.1.2.dev43.dist-info → modal-1.1.3.dev0.dist-info}/WHEEL +0 -0
- {modal-1.1.2.dev43.dist-info → modal-1.1.3.dev0.dist-info}/entry_points.txt +0 -0
- {modal-1.1.2.dev43.dist-info → modal-1.1.3.dev0.dist-info}/licenses/LICENSE +0 -0
- {modal-1.1.2.dev43.dist-info → modal-1.1.3.dev0.dist-info}/top_level.txt +0 -0
modal/_functions.py
CHANGED
@@ -9,7 +9,7 @@ import warnings
|
|
9
9
|
from collections.abc import AsyncGenerator, Sequence, Sized
|
10
10
|
from dataclasses import dataclass
|
11
11
|
from pathlib import PurePosixPath
|
12
|
-
from typing import TYPE_CHECKING, Any, Callable, Optional, Union
|
12
|
+
from typing import TYPE_CHECKING, Any, AsyncIterator, Callable, Optional, Union
|
13
13
|
|
14
14
|
import typing_extensions
|
15
15
|
from google.protobuf.message import Message
|
@@ -360,6 +360,43 @@ class _Invocation:
|
|
360
360
|
if items_total is not None and items_received >= items_total:
|
361
361
|
break
|
362
362
|
|
363
|
+
async def enumerate(self, start_index: int, end_index: int):
|
364
|
+
"""Iterate over the results of the function call in the range [start_index, end_index)."""
|
365
|
+
limit = 49
|
366
|
+
current_index = start_index
|
367
|
+
while current_index < end_index:
|
368
|
+
# batch_end_indx is inclusive, so we subtract 1 to get the last index in the batch.
|
369
|
+
batch_end_index = min(current_index + limit, end_index) - 1
|
370
|
+
request = api_pb2.FunctionGetOutputsRequest(
|
371
|
+
function_call_id=self.function_call_id,
|
372
|
+
timeout=0,
|
373
|
+
last_entry_id="0-0",
|
374
|
+
clear_on_success=False,
|
375
|
+
requested_at=time.time(),
|
376
|
+
start_idx=current_index,
|
377
|
+
end_idx=batch_end_index,
|
378
|
+
)
|
379
|
+
response: api_pb2.FunctionGetOutputsResponse = await retry_transient_errors(
|
380
|
+
self.stub.FunctionGetOutputs,
|
381
|
+
request,
|
382
|
+
attempt_timeout=ATTEMPT_TIMEOUT_GRACE_PERIOD,
|
383
|
+
)
|
384
|
+
|
385
|
+
outputs = list(response.outputs)
|
386
|
+
outputs.sort(key=lambda x: x.idx)
|
387
|
+
for output in outputs:
|
388
|
+
if output.idx != current_index:
|
389
|
+
break
|
390
|
+
result = await _process_result(output.result, output.data_format, self.stub, self.client)
|
391
|
+
yield output.idx, result
|
392
|
+
current_index += 1
|
393
|
+
|
394
|
+
# We're missing current_index, so we need to poll the function for the next result
|
395
|
+
if len(outputs) < (batch_end_index - current_index + 1):
|
396
|
+
result = await self.poll_function(index=current_index)
|
397
|
+
yield current_index, result
|
398
|
+
current_index += 1
|
399
|
+
|
363
400
|
|
364
401
|
class _InputPlaneInvocation:
|
365
402
|
"""Internal client representation of a single-input call to a Modal Function using the input
|
@@ -1865,6 +1902,36 @@ class _FunctionCall(typing.Generic[ReturnType], _Object, type_prefix="fc"):
|
|
1865
1902
|
"""
|
1866
1903
|
return await self._invocation().poll_function(timeout=timeout, index=index)
|
1867
1904
|
|
1905
|
+
@live_method_gen
|
1906
|
+
async def iter(self, *, start: int = 0, end: Optional[int] = None) -> AsyncIterator[ReturnType]:
|
1907
|
+
"""Iterate in-order over the results of the function call.
|
1908
|
+
|
1909
|
+
Optionally, specify a range [start, end) to iterate over.
|
1910
|
+
|
1911
|
+
Example:
|
1912
|
+
```python
|
1913
|
+
@app.function()
|
1914
|
+
def my_func(a):
|
1915
|
+
return a ** 2
|
1916
|
+
|
1917
|
+
|
1918
|
+
@app.local_entrypoint()
|
1919
|
+
def main():
|
1920
|
+
fc = my_func.spawn_map([1, 2, 3, 4])
|
1921
|
+
assert list(fc.iter()) == [1, 4, 9, 16]
|
1922
|
+
assert list(fc.iter(start=1, end=3)) == [4, 9]
|
1923
|
+
```
|
1924
|
+
|
1925
|
+
If `end` is not provided, it will iterate over all results.
|
1926
|
+
"""
|
1927
|
+
num_inputs = await self.num_inputs()
|
1928
|
+
if end is None:
|
1929
|
+
end = num_inputs
|
1930
|
+
if start < 0 or end > num_inputs:
|
1931
|
+
raise ValueError(f"Invalid index range: {start} to {end} for {num_inputs} inputs")
|
1932
|
+
async for _, item in self._invocation().enumerate(start_index=start, end_index=end):
|
1933
|
+
yield item
|
1934
|
+
|
1868
1935
|
async def get_call_graph(self) -> list[InputInfo]:
|
1869
1936
|
"""Returns a structure representing the call graph from a given root
|
1870
1937
|
call ID, along with the status of execution for each node.
|
modal/app.py
CHANGED
@@ -641,7 +641,7 @@ class _App:
|
|
641
641
|
scaledown_window: Optional[int] = None, # Max time (in seconds) a container can remain idle while scaling down.
|
642
642
|
proxy: Optional[_Proxy] = None, # Reference to a Modal Proxy to use in front of this function.
|
643
643
|
retries: Optional[Union[int, Retries]] = None, # Number of times to retry each input in case of failure.
|
644
|
-
timeout: int = 300, # Maximum execution time
|
644
|
+
timeout: int = 300, # Maximum execution time in seconds.
|
645
645
|
name: Optional[str] = None, # Sets the Modal name of the function within the app
|
646
646
|
is_generator: Optional[
|
647
647
|
bool
|
@@ -869,7 +869,7 @@ class _App:
|
|
869
869
|
scaledown_window: Optional[int] = None, # Max time (in seconds) a container can remain idle while scaling down.
|
870
870
|
proxy: Optional[_Proxy] = None, # Reference to a Modal Proxy to use in front of this function.
|
871
871
|
retries: Optional[Union[int, Retries]] = None, # Number of times to retry each input in case of failure.
|
872
|
-
timeout: int = 300, # Maximum execution time
|
872
|
+
timeout: int = 300, # Maximum execution time in seconds; applies independently to startup and each input.
|
873
873
|
cloud: Optional[str] = None, # Cloud provider to run the function on. Possible values are aws, gcp, oci, auto.
|
874
874
|
region: Optional[Union[str, Sequence[str]]] = None, # Region or regions to run the function on.
|
875
875
|
enable_memory_snapshot: bool = False, # Enable memory checkpointing for faster cold starts.
|
modal/client.pyi
CHANGED
@@ -33,7 +33,7 @@ class _Client:
|
|
33
33
|
server_url: str,
|
34
34
|
client_type: int,
|
35
35
|
credentials: typing.Optional[tuple[str, str]],
|
36
|
-
version: str = "1.1.
|
36
|
+
version: str = "1.1.3.dev0",
|
37
37
|
):
|
38
38
|
"""mdmd:hidden
|
39
39
|
The Modal client object is not intended to be instantiated directly by users.
|
@@ -164,7 +164,7 @@ class Client:
|
|
164
164
|
server_url: str,
|
165
165
|
client_type: int,
|
166
166
|
credentials: typing.Optional[tuple[str, str]],
|
167
|
-
version: str = "1.1.
|
167
|
+
version: str = "1.1.3.dev0",
|
168
168
|
):
|
169
169
|
"""mdmd:hidden
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
modal/dict.py
CHANGED
@@ -81,6 +81,8 @@ class _DictManager:
|
|
81
81
|
Note that this method does not return a local instance of the Dict. You can use
|
82
82
|
`modal.Dict.from_name` to perform a lookup after creation.
|
83
83
|
|
84
|
+
Added in v1.1.2.
|
85
|
+
|
84
86
|
"""
|
85
87
|
check_object_name(name, "Dict")
|
86
88
|
client = await _Client.from_env() if client is None else client
|
@@ -132,6 +134,8 @@ class _DictManager:
|
|
132
134
|
dicts = modal.Dict.objects.list(max_objects=10, created_before="2025-01-01")
|
133
135
|
```
|
134
136
|
|
137
|
+
Added in v1.1.2.
|
138
|
+
|
135
139
|
"""
|
136
140
|
client = await _Client.from_env() if client is None else client
|
137
141
|
if max_objects is not None and max_objects < 0:
|
@@ -192,6 +196,9 @@ class _DictManager:
|
|
192
196
|
```python notest
|
193
197
|
await modal.Dict.objects.delete("my-dict", environment_name="dev")
|
194
198
|
```
|
199
|
+
|
200
|
+
Added in v1.1.2.
|
201
|
+
|
195
202
|
"""
|
196
203
|
try:
|
197
204
|
obj = await _Dict.from_name(name, environment_name=environment_name).hydrate(client)
|
modal/dict.pyi
CHANGED
@@ -66,6 +66,8 @@ class _DictManager:
|
|
66
66
|
|
67
67
|
Note that this method does not return a local instance of the Dict. You can use
|
68
68
|
`modal.Dict.from_name` to perform a lookup after creation.
|
69
|
+
|
70
|
+
Added in v1.1.2.
|
69
71
|
"""
|
70
72
|
...
|
71
73
|
|
@@ -98,6 +100,8 @@ class _DictManager:
|
|
98
100
|
```python
|
99
101
|
dicts = modal.Dict.objects.list(max_objects=10, created_before="2025-01-01")
|
100
102
|
```
|
103
|
+
|
104
|
+
Added in v1.1.2.
|
101
105
|
"""
|
102
106
|
...
|
103
107
|
|
@@ -125,6 +129,8 @@ class _DictManager:
|
|
125
129
|
```python notest
|
126
130
|
await modal.Dict.objects.delete("my-dict", environment_name="dev")
|
127
131
|
```
|
132
|
+
|
133
|
+
Added in v1.1.2.
|
128
134
|
"""
|
129
135
|
...
|
130
136
|
|
@@ -167,6 +173,8 @@ class DictManager:
|
|
167
173
|
|
168
174
|
Note that this method does not return a local instance of the Dict. You can use
|
169
175
|
`modal.Dict.from_name` to perform a lookup after creation.
|
176
|
+
|
177
|
+
Added in v1.1.2.
|
170
178
|
"""
|
171
179
|
...
|
172
180
|
|
@@ -202,6 +210,8 @@ class DictManager:
|
|
202
210
|
|
203
211
|
Note that this method does not return a local instance of the Dict. You can use
|
204
212
|
`modal.Dict.from_name` to perform a lookup after creation.
|
213
|
+
|
214
|
+
Added in v1.1.2.
|
205
215
|
"""
|
206
216
|
...
|
207
217
|
|
@@ -238,6 +248,8 @@ class DictManager:
|
|
238
248
|
```python
|
239
249
|
dicts = modal.Dict.objects.list(max_objects=10, created_before="2025-01-01")
|
240
250
|
```
|
251
|
+
|
252
|
+
Added in v1.1.2.
|
241
253
|
"""
|
242
254
|
...
|
243
255
|
|
@@ -271,6 +283,8 @@ class DictManager:
|
|
271
283
|
```python
|
272
284
|
dicts = modal.Dict.objects.list(max_objects=10, created_before="2025-01-01")
|
273
285
|
```
|
286
|
+
|
287
|
+
Added in v1.1.2.
|
274
288
|
"""
|
275
289
|
...
|
276
290
|
|
@@ -302,6 +316,8 @@ class DictManager:
|
|
302
316
|
```python notest
|
303
317
|
await modal.Dict.objects.delete("my-dict", environment_name="dev")
|
304
318
|
```
|
319
|
+
|
320
|
+
Added in v1.1.2.
|
305
321
|
"""
|
306
322
|
...
|
307
323
|
|
@@ -330,6 +346,8 @@ class DictManager:
|
|
330
346
|
```python notest
|
331
347
|
await modal.Dict.objects.delete("my-dict", environment_name="dev")
|
332
348
|
```
|
349
|
+
|
350
|
+
Added in v1.1.2.
|
333
351
|
"""
|
334
352
|
...
|
335
353
|
|
modal/functions.pyi
CHANGED
@@ -433,7 +433,7 @@ class Function(
|
|
433
433
|
|
434
434
|
_call_generator: ___call_generator_spec[typing_extensions.Self]
|
435
435
|
|
436
|
-
class __remote_spec(typing_extensions.Protocol[
|
436
|
+
class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
437
437
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
438
438
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
439
439
|
...
|
@@ -442,7 +442,7 @@ class Function(
|
|
442
442
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
443
443
|
...
|
444
444
|
|
445
|
-
remote: __remote_spec[modal._functions.
|
445
|
+
remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
|
446
446
|
|
447
447
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
448
448
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
@@ -469,7 +469,7 @@ class Function(
|
|
469
469
|
"""
|
470
470
|
...
|
471
471
|
|
472
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
472
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
473
473
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
474
474
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
475
475
|
|
@@ -493,7 +493,7 @@ class Function(
|
|
493
493
|
...
|
494
494
|
|
495
495
|
_experimental_spawn: ___experimental_spawn_spec[
|
496
|
-
modal._functions.
|
496
|
+
modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
|
497
497
|
]
|
498
498
|
|
499
499
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
|
@@ -502,7 +502,7 @@ class Function(
|
|
502
502
|
|
503
503
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
|
504
504
|
|
505
|
-
class __spawn_spec(typing_extensions.Protocol[
|
505
|
+
class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
506
506
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
507
507
|
"""Calls the function with the given arguments, without waiting for the results.
|
508
508
|
|
@@ -523,7 +523,7 @@ class Function(
|
|
523
523
|
"""
|
524
524
|
...
|
525
525
|
|
526
|
-
spawn: __spawn_spec[modal._functions.
|
526
|
+
spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
|
527
527
|
|
528
528
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
529
529
|
"""Return the inner Python object wrapped by this Modal Function."""
|
@@ -701,24 +701,25 @@ class Function(
|
|
701
701
|
|
702
702
|
class __experimental_spawn_map_spec(typing_extensions.Protocol[SUPERSELF]):
|
703
703
|
def __call__(self, /, *input_iterators, kwargs={}) -> modal._functions._FunctionCall:
|
704
|
-
"""
|
705
|
-
|
704
|
+
"""mdmd:hidden
|
705
|
+
Spawn parallel execution over a set of inputs, returning as soon as the inputs are created.
|
706
|
+
|
707
|
+
Unlike `modal.Function.map`, this method does not block on completion of the remote execution but
|
708
|
+
returns a `modal.FunctionCall` object that can be used to poll status and retrieve results later.
|
706
709
|
|
707
710
|
Takes one iterator argument per argument in the function being mapped over.
|
708
711
|
|
709
712
|
Example:
|
710
713
|
```python
|
711
714
|
@app.function()
|
712
|
-
def my_func(a):
|
713
|
-
return a **
|
715
|
+
def my_func(a, b):
|
716
|
+
return a ** b
|
714
717
|
|
715
718
|
|
716
719
|
@app.local_entrypoint()
|
717
720
|
def main():
|
718
|
-
fc = my_func.spawn_map([1, 2, 3, 4])
|
721
|
+
fc = my_func.spawn_map([1, 2], [3, 4])
|
719
722
|
```
|
720
|
-
|
721
|
-
Returns a FunctionCall object that can be used to retrieve results
|
722
723
|
"""
|
723
724
|
...
|
724
725
|
|
@@ -787,6 +788,55 @@ class FunctionCall(typing.Generic[modal._functions.ReturnType], modal.object.Obj
|
|
787
788
|
|
788
789
|
get: __get_spec[modal._functions.ReturnType, typing_extensions.Self]
|
789
790
|
|
791
|
+
class __iter_spec(typing_extensions.Protocol[ReturnType_INNER, SUPERSELF]):
|
792
|
+
def __call__(self, /, *, start: int = 0, end: typing.Optional[int] = None) -> typing.Iterator[ReturnType_INNER]:
|
793
|
+
"""Iterate in-order over the results of the function call.
|
794
|
+
|
795
|
+
Optionally, specify a range [start, end) to iterate over.
|
796
|
+
|
797
|
+
Example:
|
798
|
+
```python
|
799
|
+
@app.function()
|
800
|
+
def my_func(a):
|
801
|
+
return a ** 2
|
802
|
+
|
803
|
+
|
804
|
+
@app.local_entrypoint()
|
805
|
+
def main():
|
806
|
+
fc = my_func.spawn_map([1, 2, 3, 4])
|
807
|
+
assert list(fc.iter()) == [1, 4, 9, 16]
|
808
|
+
assert list(fc.iter(start=1, end=3)) == [4, 9]
|
809
|
+
```
|
810
|
+
|
811
|
+
If `end` is not provided, it will iterate over all results.
|
812
|
+
"""
|
813
|
+
...
|
814
|
+
|
815
|
+
def aio(self, /, *, start: int = 0, end: typing.Optional[int] = None) -> typing.AsyncIterator[ReturnType_INNER]:
|
816
|
+
"""Iterate in-order over the results of the function call.
|
817
|
+
|
818
|
+
Optionally, specify a range [start, end) to iterate over.
|
819
|
+
|
820
|
+
Example:
|
821
|
+
```python
|
822
|
+
@app.function()
|
823
|
+
def my_func(a):
|
824
|
+
return a ** 2
|
825
|
+
|
826
|
+
|
827
|
+
@app.local_entrypoint()
|
828
|
+
def main():
|
829
|
+
fc = my_func.spawn_map([1, 2, 3, 4])
|
830
|
+
assert list(fc.iter()) == [1, 4, 9, 16]
|
831
|
+
assert list(fc.iter(start=1, end=3)) == [4, 9]
|
832
|
+
```
|
833
|
+
|
834
|
+
If `end` is not provided, it will iterate over all results.
|
835
|
+
"""
|
836
|
+
...
|
837
|
+
|
838
|
+
iter: __iter_spec[modal._functions.ReturnType, typing_extensions.Self]
|
839
|
+
|
790
840
|
class __get_call_graph_spec(typing_extensions.Protocol[SUPERSELF]):
|
791
841
|
def __call__(self, /) -> list[modal.call_graph.InputInfo]:
|
792
842
|
"""Returns a structure representing the call graph from a given root
|
modal/parallel_map.py
CHANGED
@@ -1179,24 +1179,26 @@ async def _spawn_map_helper(
|
|
1179
1179
|
|
1180
1180
|
|
1181
1181
|
def _experimental_spawn_map_sync(self, *input_iterators, kwargs={}) -> "modal.functions._FunctionCall":
|
1182
|
-
"""
|
1183
|
-
|
1182
|
+
"""mdmd:hidden
|
1183
|
+
Spawn parallel execution over a set of inputs, returning as soon as the inputs are created.
|
1184
|
+
|
1185
|
+
Unlike `modal.Function.map`, this method does not block on completion of the remote execution but
|
1186
|
+
returns a `modal.FunctionCall` object that can be used to poll status and retrieve results later.
|
1184
1187
|
|
1185
1188
|
Takes one iterator argument per argument in the function being mapped over.
|
1186
1189
|
|
1187
1190
|
Example:
|
1188
1191
|
```python
|
1189
1192
|
@app.function()
|
1190
|
-
def my_func(a):
|
1191
|
-
return a **
|
1193
|
+
def my_func(a, b):
|
1194
|
+
return a ** b
|
1192
1195
|
|
1193
1196
|
|
1194
1197
|
@app.local_entrypoint()
|
1195
1198
|
def main():
|
1196
|
-
fc = my_func.spawn_map([1, 2, 3, 4])
|
1199
|
+
fc = my_func.spawn_map([1, 2], [3, 4])
|
1197
1200
|
```
|
1198
1201
|
|
1199
|
-
Returns a FunctionCall object that can be used to retrieve results
|
1200
1202
|
"""
|
1201
1203
|
|
1202
1204
|
return run_coroutine_in_temporary_event_loop(
|
modal/parallel_map.pyi
CHANGED
@@ -265,24 +265,25 @@ async def _spawn_map_helper(
|
|
265
265
|
self: modal.functions.Function, async_input_gen, kwargs={}
|
266
266
|
) -> modal._functions._FunctionCall: ...
|
267
267
|
def _experimental_spawn_map_sync(self, *input_iterators, kwargs={}) -> modal._functions._FunctionCall:
|
268
|
-
"""
|
269
|
-
|
268
|
+
"""mdmd:hidden
|
269
|
+
Spawn parallel execution over a set of inputs, returning as soon as the inputs are created.
|
270
|
+
|
271
|
+
Unlike `modal.Function.map`, this method does not block on completion of the remote execution but
|
272
|
+
returns a `modal.FunctionCall` object that can be used to poll status and retrieve results later.
|
270
273
|
|
271
274
|
Takes one iterator argument per argument in the function being mapped over.
|
272
275
|
|
273
276
|
Example:
|
274
277
|
```python
|
275
278
|
@app.function()
|
276
|
-
def my_func(a):
|
277
|
-
return a **
|
279
|
+
def my_func(a, b):
|
280
|
+
return a ** b
|
278
281
|
|
279
282
|
|
280
283
|
@app.local_entrypoint()
|
281
284
|
def main():
|
282
|
-
fc = my_func.spawn_map([1, 2, 3, 4])
|
285
|
+
fc = my_func.spawn_map([1, 2], [3, 4])
|
283
286
|
```
|
284
|
-
|
285
|
-
Returns a FunctionCall object that can be used to retrieve results
|
286
287
|
"""
|
287
288
|
...
|
288
289
|
|
modal/queue.py
CHANGED
@@ -79,6 +79,8 @@ class _QueueManager:
|
|
79
79
|
Note that this method does not return a local instance of the Queue. You can use
|
80
80
|
`modal.Queue.from_name` to perform a lookup after creation.
|
81
81
|
|
82
|
+
Added in v1.1.2.
|
83
|
+
|
82
84
|
"""
|
83
85
|
check_object_name(name, "Queue")
|
84
86
|
client = await _Client.from_env() if client is None else client
|
@@ -130,6 +132,8 @@ class _QueueManager:
|
|
130
132
|
queues = modal.Queue.objects.list(max_objects=10, created_before="2025-01-01")
|
131
133
|
```
|
132
134
|
|
135
|
+
Added in v1.1.2.
|
136
|
+
|
133
137
|
"""
|
134
138
|
client = await _Client.from_env() if client is None else client
|
135
139
|
if max_objects is not None and max_objects < 0:
|
@@ -190,6 +194,9 @@ class _QueueManager:
|
|
190
194
|
```python notest
|
191
195
|
await modal.Queue.objects.delete("my-queue", environment_name="dev")
|
192
196
|
```
|
197
|
+
|
198
|
+
Added in v1.1.2.
|
199
|
+
|
193
200
|
"""
|
194
201
|
try:
|
195
202
|
obj = await _Queue.from_name(name, environment_name=environment_name).hydrate(client)
|
modal/queue.pyi
CHANGED
@@ -64,6 +64,8 @@ class _QueueManager:
|
|
64
64
|
|
65
65
|
Note that this method does not return a local instance of the Queue. You can use
|
66
66
|
`modal.Queue.from_name` to perform a lookup after creation.
|
67
|
+
|
68
|
+
Added in v1.1.2.
|
67
69
|
"""
|
68
70
|
...
|
69
71
|
|
@@ -96,6 +98,8 @@ class _QueueManager:
|
|
96
98
|
```python
|
97
99
|
queues = modal.Queue.objects.list(max_objects=10, created_before="2025-01-01")
|
98
100
|
```
|
101
|
+
|
102
|
+
Added in v1.1.2.
|
99
103
|
"""
|
100
104
|
...
|
101
105
|
|
@@ -123,6 +127,8 @@ class _QueueManager:
|
|
123
127
|
```python notest
|
124
128
|
await modal.Queue.objects.delete("my-queue", environment_name="dev")
|
125
129
|
```
|
130
|
+
|
131
|
+
Added in v1.1.2.
|
126
132
|
"""
|
127
133
|
...
|
128
134
|
|
@@ -165,6 +171,8 @@ class QueueManager:
|
|
165
171
|
|
166
172
|
Note that this method does not return a local instance of the Queue. You can use
|
167
173
|
`modal.Queue.from_name` to perform a lookup after creation.
|
174
|
+
|
175
|
+
Added in v1.1.2.
|
168
176
|
"""
|
169
177
|
...
|
170
178
|
|
@@ -200,6 +208,8 @@ class QueueManager:
|
|
200
208
|
|
201
209
|
Note that this method does not return a local instance of the Queue. You can use
|
202
210
|
`modal.Queue.from_name` to perform a lookup after creation.
|
211
|
+
|
212
|
+
Added in v1.1.2.
|
203
213
|
"""
|
204
214
|
...
|
205
215
|
|
@@ -236,6 +246,8 @@ class QueueManager:
|
|
236
246
|
```python
|
237
247
|
queues = modal.Queue.objects.list(max_objects=10, created_before="2025-01-01")
|
238
248
|
```
|
249
|
+
|
250
|
+
Added in v1.1.2.
|
239
251
|
"""
|
240
252
|
...
|
241
253
|
|
@@ -269,6 +281,8 @@ class QueueManager:
|
|
269
281
|
```python
|
270
282
|
queues = modal.Queue.objects.list(max_objects=10, created_before="2025-01-01")
|
271
283
|
```
|
284
|
+
|
285
|
+
Added in v1.1.2.
|
272
286
|
"""
|
273
287
|
...
|
274
288
|
|
@@ -300,6 +314,8 @@ class QueueManager:
|
|
300
314
|
```python notest
|
301
315
|
await modal.Queue.objects.delete("my-queue", environment_name="dev")
|
302
316
|
```
|
317
|
+
|
318
|
+
Added in v1.1.2.
|
303
319
|
"""
|
304
320
|
...
|
305
321
|
|
@@ -328,6 +344,8 @@ class QueueManager:
|
|
328
344
|
```python notest
|
329
345
|
await modal.Queue.objects.delete("my-queue", environment_name="dev")
|
330
346
|
```
|
347
|
+
|
348
|
+
Added in v1.1.2.
|
331
349
|
"""
|
332
350
|
...
|
333
351
|
|
modal/secret.py
CHANGED
@@ -74,6 +74,8 @@ class _SecretManager:
|
|
74
74
|
Note that this method does not return a local instance of the Secret. You can use
|
75
75
|
`modal.Secret.from_name` to perform a lookup after creation.
|
76
76
|
|
77
|
+
Added in v1.1.2.
|
78
|
+
|
77
79
|
"""
|
78
80
|
check_object_name(name, "Secret")
|
79
81
|
client = await _Client.from_env() if client is None else client
|
@@ -126,6 +128,8 @@ class _SecretManager:
|
|
126
128
|
secrets = modal.Secret.objects.list(max_objects=10, created_before="2025-01-01")
|
127
129
|
```
|
128
130
|
|
131
|
+
Added in v1.1.2.
|
132
|
+
|
129
133
|
"""
|
130
134
|
client = await _Client.from_env() if client is None else client
|
131
135
|
if max_objects is not None and max_objects < 0:
|
@@ -185,6 +189,9 @@ class _SecretManager:
|
|
185
189
|
```python notest
|
186
190
|
await modal.Secret.objects.delete("my-secret", environment_name="dev")
|
187
191
|
```
|
192
|
+
|
193
|
+
Added in v1.1.2.
|
194
|
+
|
188
195
|
"""
|
189
196
|
try:
|
190
197
|
obj = await _Secret.from_name(name, environment_name=environment_name).hydrate(client)
|
modal/secret.pyi
CHANGED
@@ -65,6 +65,8 @@ class _SecretManager:
|
|
65
65
|
|
66
66
|
Note that this method does not return a local instance of the Secret. You can use
|
67
67
|
`modal.Secret.from_name` to perform a lookup after creation.
|
68
|
+
|
69
|
+
Added in v1.1.2.
|
68
70
|
"""
|
69
71
|
...
|
70
72
|
|
@@ -97,6 +99,8 @@ class _SecretManager:
|
|
97
99
|
```python
|
98
100
|
secrets = modal.Secret.objects.list(max_objects=10, created_before="2025-01-01")
|
99
101
|
```
|
102
|
+
|
103
|
+
Added in v1.1.2.
|
100
104
|
"""
|
101
105
|
...
|
102
106
|
|
@@ -123,6 +127,8 @@ class _SecretManager:
|
|
123
127
|
```python notest
|
124
128
|
await modal.Secret.objects.delete("my-secret", environment_name="dev")
|
125
129
|
```
|
130
|
+
|
131
|
+
Added in v1.1.2.
|
126
132
|
"""
|
127
133
|
...
|
128
134
|
|
@@ -168,6 +174,8 @@ class SecretManager:
|
|
168
174
|
|
169
175
|
Note that this method does not return a local instance of the Secret. You can use
|
170
176
|
`modal.Secret.from_name` to perform a lookup after creation.
|
177
|
+
|
178
|
+
Added in v1.1.2.
|
171
179
|
"""
|
172
180
|
...
|
173
181
|
|
@@ -206,6 +214,8 @@ class SecretManager:
|
|
206
214
|
|
207
215
|
Note that this method does not return a local instance of the Secret. You can use
|
208
216
|
`modal.Secret.from_name` to perform a lookup after creation.
|
217
|
+
|
218
|
+
Added in v1.1.2.
|
209
219
|
"""
|
210
220
|
...
|
211
221
|
|
@@ -242,6 +252,8 @@ class SecretManager:
|
|
242
252
|
```python
|
243
253
|
secrets = modal.Secret.objects.list(max_objects=10, created_before="2025-01-01")
|
244
254
|
```
|
255
|
+
|
256
|
+
Added in v1.1.2.
|
245
257
|
"""
|
246
258
|
...
|
247
259
|
|
@@ -275,6 +287,8 @@ class SecretManager:
|
|
275
287
|
```python
|
276
288
|
secrets = modal.Secret.objects.list(max_objects=10, created_before="2025-01-01")
|
277
289
|
```
|
290
|
+
|
291
|
+
Added in v1.1.2.
|
278
292
|
"""
|
279
293
|
...
|
280
294
|
|
@@ -305,6 +319,8 @@ class SecretManager:
|
|
305
319
|
```python notest
|
306
320
|
await modal.Secret.objects.delete("my-secret", environment_name="dev")
|
307
321
|
```
|
322
|
+
|
323
|
+
Added in v1.1.2.
|
308
324
|
"""
|
309
325
|
...
|
310
326
|
|
@@ -332,6 +348,8 @@ class SecretManager:
|
|
332
348
|
```python notest
|
333
349
|
await modal.Secret.objects.delete("my-secret", environment_name="dev")
|
334
350
|
```
|
351
|
+
|
352
|
+
Added in v1.1.2.
|
335
353
|
"""
|
336
354
|
...
|
337
355
|
|
modal/volume.py
CHANGED
@@ -139,6 +139,7 @@ class _VolumeManager:
|
|
139
139
|
modal.Volume.objects.create("my-volume", environment_name="dev")
|
140
140
|
```
|
141
141
|
|
142
|
+
By default, an error will be raised if the Volume already exists, but passing
|
142
143
|
`allow_existing=True` will make the creation attempt a no-op in this case.
|
143
144
|
|
144
145
|
```python notest
|
@@ -148,6 +149,8 @@ class _VolumeManager:
|
|
148
149
|
Note that this method does not return a local instance of the Volume. You can use
|
149
150
|
`modal.Volume.from_name` to perform a lookup after creation.
|
150
151
|
|
152
|
+
Added in v1.1.2.
|
153
|
+
|
151
154
|
"""
|
152
155
|
check_object_name(name, "Volume")
|
153
156
|
client = await _Client.from_env() if client is None else client
|
@@ -204,6 +207,8 @@ class _VolumeManager:
|
|
204
207
|
volumes = modal.Volume.objects.list(max_objects=10, created_before="2025-01-01")
|
205
208
|
```
|
206
209
|
|
210
|
+
Added in v1.1.2.
|
211
|
+
|
207
212
|
"""
|
208
213
|
client = await _Client.from_env() if client is None else client
|
209
214
|
if max_objects is not None and max_objects < 0:
|
@@ -264,6 +269,9 @@ class _VolumeManager:
|
|
264
269
|
```python notest
|
265
270
|
await modal.Volume.objects.delete("my-volume", environment_name="dev")
|
266
271
|
```
|
272
|
+
|
273
|
+
Added in v1.1.2.
|
274
|
+
|
267
275
|
"""
|
268
276
|
try:
|
269
277
|
obj = await _Volume.from_name(name, environment_name=environment_name).hydrate(client)
|
@@ -685,6 +693,7 @@ class _Volume(_Object, type_prefix="vo"):
|
|
685
693
|
except modal.exception.NotFoundError as exc:
|
686
694
|
raise FileNotFoundError(exc.args[0])
|
687
695
|
|
696
|
+
@retry(n_attempts=5, base_delay=0.1, timeout=None)
|
688
697
|
async def read_block(block_url: str) -> bytes:
|
689
698
|
async with ClientSessionRegistry.get_session().get(block_url) as get_response:
|
690
699
|
return await get_response.content.read()
|
@@ -724,6 +733,7 @@ class _Volume(_Object, type_prefix="vo"):
|
|
724
733
|
write_lock = asyncio.Lock()
|
725
734
|
start_pos = fileobj.tell()
|
726
735
|
|
736
|
+
@retry(n_attempts=5, base_delay=0.1, timeout=None)
|
727
737
|
async def download_block(idx, url) -> int:
|
728
738
|
block_start_pos = start_pos + idx * BLOCK_SIZE
|
729
739
|
num_bytes_written = 0
|
modal/volume.pyi
CHANGED
@@ -105,6 +105,7 @@ class _VolumeManager:
|
|
105
105
|
modal.Volume.objects.create("my-volume", environment_name="dev")
|
106
106
|
```
|
107
107
|
|
108
|
+
By default, an error will be raised if the Volume already exists, but passing
|
108
109
|
`allow_existing=True` will make the creation attempt a no-op in this case.
|
109
110
|
|
110
111
|
```python notest
|
@@ -113,6 +114,8 @@ class _VolumeManager:
|
|
113
114
|
|
114
115
|
Note that this method does not return a local instance of the Volume. You can use
|
115
116
|
`modal.Volume.from_name` to perform a lookup after creation.
|
117
|
+
|
118
|
+
Added in v1.1.2.
|
116
119
|
"""
|
117
120
|
...
|
118
121
|
|
@@ -145,6 +148,8 @@ class _VolumeManager:
|
|
145
148
|
```python
|
146
149
|
volumes = modal.Volume.objects.list(max_objects=10, created_before="2025-01-01")
|
147
150
|
```
|
151
|
+
|
152
|
+
Added in v1.1.2.
|
148
153
|
"""
|
149
154
|
...
|
150
155
|
|
@@ -172,6 +177,8 @@ class _VolumeManager:
|
|
172
177
|
```python notest
|
173
178
|
await modal.Volume.objects.delete("my-volume", environment_name="dev")
|
174
179
|
```
|
180
|
+
|
181
|
+
Added in v1.1.2.
|
175
182
|
"""
|
176
183
|
...
|
177
184
|
|
@@ -206,6 +213,7 @@ class VolumeManager:
|
|
206
213
|
modal.Volume.objects.create("my-volume", environment_name="dev")
|
207
214
|
```
|
208
215
|
|
216
|
+
By default, an error will be raised if the Volume already exists, but passing
|
209
217
|
`allow_existing=True` will make the creation attempt a no-op in this case.
|
210
218
|
|
211
219
|
```python notest
|
@@ -214,6 +222,8 @@ class VolumeManager:
|
|
214
222
|
|
215
223
|
Note that this method does not return a local instance of the Volume. You can use
|
216
224
|
`modal.Volume.from_name` to perform a lookup after creation.
|
225
|
+
|
226
|
+
Added in v1.1.2.
|
217
227
|
"""
|
218
228
|
...
|
219
229
|
|
@@ -241,6 +251,7 @@ class VolumeManager:
|
|
241
251
|
modal.Volume.objects.create("my-volume", environment_name="dev")
|
242
252
|
```
|
243
253
|
|
254
|
+
By default, an error will be raised if the Volume already exists, but passing
|
244
255
|
`allow_existing=True` will make the creation attempt a no-op in this case.
|
245
256
|
|
246
257
|
```python notest
|
@@ -249,6 +260,8 @@ class VolumeManager:
|
|
249
260
|
|
250
261
|
Note that this method does not return a local instance of the Volume. You can use
|
251
262
|
`modal.Volume.from_name` to perform a lookup after creation.
|
263
|
+
|
264
|
+
Added in v1.1.2.
|
252
265
|
"""
|
253
266
|
...
|
254
267
|
|
@@ -285,6 +298,8 @@ class VolumeManager:
|
|
285
298
|
```python
|
286
299
|
volumes = modal.Volume.objects.list(max_objects=10, created_before="2025-01-01")
|
287
300
|
```
|
301
|
+
|
302
|
+
Added in v1.1.2.
|
288
303
|
"""
|
289
304
|
...
|
290
305
|
|
@@ -318,6 +333,8 @@ class VolumeManager:
|
|
318
333
|
```python
|
319
334
|
volumes = modal.Volume.objects.list(max_objects=10, created_before="2025-01-01")
|
320
335
|
```
|
336
|
+
|
337
|
+
Added in v1.1.2.
|
321
338
|
"""
|
322
339
|
...
|
323
340
|
|
@@ -349,6 +366,8 @@ class VolumeManager:
|
|
349
366
|
```python notest
|
350
367
|
await modal.Volume.objects.delete("my-volume", environment_name="dev")
|
351
368
|
```
|
369
|
+
|
370
|
+
Added in v1.1.2.
|
352
371
|
"""
|
353
372
|
...
|
354
373
|
|
@@ -377,6 +396,8 @@ class VolumeManager:
|
|
377
396
|
```python notest
|
378
397
|
await modal.Volume.objects.delete("my-volume", environment_name="dev")
|
379
398
|
```
|
399
|
+
|
400
|
+
Added in v1.1.2.
|
380
401
|
"""
|
381
402
|
...
|
382
403
|
|
@@ -3,7 +3,7 @@ modal/__main__.py,sha256=45H-GtwzaDfN-1nP4_HYvzN3s7AG_HXR4-ynrsjO_OI,2803
|
|
3
3
|
modal/_clustered_functions.py,sha256=zmrKbptRbqp4euS3LWncKaLXb8Kjj4YreusOzpEpRMk,2856
|
4
4
|
modal/_clustered_functions.pyi,sha256=_wtFjWocGf1WgI-qYBpbJPArNkg2H9JV7BVaGgMesEQ,1103
|
5
5
|
modal/_container_entrypoint.py,sha256=a1HAQYh1gGpqHuhSw6AW7XDYHztbeYr5a8iNnfCnoks,29023
|
6
|
-
modal/_functions.py,sha256=
|
6
|
+
modal/_functions.py,sha256=lPDk_KBKTS_FhOuLu15EXkvQndmoiNOnEe5A7BBd0ek,88003
|
7
7
|
modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
|
8
8
|
modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
|
9
9
|
modal/_object.py,sha256=gwsLdXb-Ecd8nH8LVCo8oVZPzzdyo9BrN1DjgQmsSuM,11967
|
@@ -18,11 +18,11 @@ modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
|
|
18
18
|
modal/_tunnel.pyi,sha256=rvC7USR2BcKkbZIeCJXwf7-UfGE-LPLjKsGNiK7Lxa4,13366
|
19
19
|
modal/_type_manager.py,sha256=DWjgmjYJuOagw2erin506UUbG2H5UzZCFEekS-7hmfA,9087
|
20
20
|
modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
|
21
|
-
modal/app.py,sha256=
|
21
|
+
modal/app.py,sha256=hJU3DGzP5GwYRmBj57XajljkQtLxkKftxXih2TYRcKo,48047
|
22
22
|
modal/app.pyi,sha256=0U2xVKD3yfHe5l2bcihTDjPl__tzOvx1AIYOTebu-5o,43375
|
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=8fwIonzX4a3CeGzwFS_67LsvnmE9x_0nfLH_JaHgP-w,15829
|
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=1mBcExFrLDTZwkD3Dzu8F26_CL0CGktOV9pE60Y8g_E,40689
|
@@ -30,8 +30,8 @@ modal/cls.pyi,sha256=TevKBrBez2R0_4Epsx5GB5gyQX_kQV-uVHPxpqEokhQ,28357
|
|
30
30
|
modal/config.py,sha256=tW-SEGjVvAt3D_MNi3LhxXnFKIA9fjLd3UIgbW8uSJE,12121
|
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=azL6WHOAR49OsqB33Rqyd1j9ljbbW7blHZDuRV8xPrA,22676
|
34
|
+
modal/dict.pyi,sha256=x0PxEqfC8wNGe5u4Y1GI5W1J0H51e3ZG9kHdYFRVLvQ,33575
|
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=OSKr77TujcXGJW1iikzYiHckLSmv07QBgBHcxxYEkoI,21456
|
|
39
39
|
modal/file_io.pyi,sha256=xtO6Glf_BFwDE7QiQQo24QqcMf_Vv-iz7WojcGVlLBU,15932
|
40
40
|
modal/file_pattern_matcher.py,sha256=A_Kdkej6q7YQyhM_2-BvpFmPqJ0oHb54B6yf9VqvPVE,8116
|
41
41
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
42
|
-
modal/functions.pyi,sha256=
|
42
|
+
modal/functions.pyi,sha256=h1oPAvbErW_i1Glzf_HsQenG-uH4KZk7X6razFbif6M,38890
|
43
43
|
modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
|
44
44
|
modal/image.py,sha256=9pSLEGMxwal55AY-hbL4eTf0lq3xMwuQ0mN-Gc3E99M,103134
|
45
45
|
modal/image.pyi,sha256=zwCW80xe2BL7q4_kswfljKRrKjMkK5paTY26e5ITM1U,68507
|
@@ -52,15 +52,15 @@ modal/network_file_system.pyi,sha256=Td_IobHr84iLo_9LZKQ4tNdUB60yjX8QWBaFiUvhfi8
|
|
52
52
|
modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
|
53
53
|
modal/object.pyi,sha256=qlyVVMezW3XgJe_iqhtzWRSki3Nuk-KrpXc1g-r8ujA,6944
|
54
54
|
modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
|
55
|
-
modal/parallel_map.py,sha256=
|
56
|
-
modal/parallel_map.pyi,sha256=
|
55
|
+
modal/parallel_map.py,sha256=Pi6WrgVGmjUrz7hCGPbOCDeRKnKLGXxP3B0HuujIa9c,67508
|
56
|
+
modal/parallel_map.pyi,sha256=dp_ip_JrbAf9qCkSyaKDdop8LjfRj5r_oc5LG26umOo,15527
|
57
57
|
modal/partial_function.py,sha256=aIdlGfTjjgqY6Fpr-biCjvRU9W542_S5N2xkNN_rYGM,1127
|
58
58
|
modal/partial_function.pyi,sha256=lqqOzZ9-QvHTDWKQ_oAYYOvsXgTOBKhO9u-RI98JbUk,13986
|
59
59
|
modal/proxy.py,sha256=CQydu_NPDgApN2GLdd7rrcg8PM-pXyFdVYcTaGMBRCQ,1491
|
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=ooD_-z3gthje_kxBZQ_xDfwyTy_cxtyn5oM9wt2sXTo,27133
|
63
|
+
modal/queue.pyi,sha256=EJ6extEFKclbEUBXk-PuRJ4bkUYRwWgAAUNofQBbBmo,39509
|
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=O_vB-VgJ2ZMw2yyT2-ATYIWHdeDXCPf4cFcc-3JSB5Q,40895
|
|
69
69
|
modal/sandbox.pyi,sha256=HoHgwb167i83qiGhUE7UAy79l45wqfXKfOA9hZ5HiEo,41572
|
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=jcNJKc4ZB2nvAn7HJFawInqE-_7sbB43IWLZwyLBQ28,19308
|
73
|
+
modal/secret.pyi,sha256=7EzD7nZGSZHQR-Hf5aRi0ooZGxvy1-G8A4ul-M04Qs4,21552
|
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=bPC8632-LyeLOjJu2fKOFyod0QG7Hd5bb-UIJ5syCjo,53303
|
82
|
+
modal/volume.pyi,sha256=5VppIgoqoJqpivESYt5_oWgVTL__zlmpNZkOPk43JF8,54443
|
83
83
|
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
84
84
|
modal/_runtime/asgi.py,sha256=yewQjvqPdXQ9SeEMMM53-h3Y22WlJNe28tFvPrrwguk,22607
|
85
85
|
modal/_runtime/container_io_manager.py,sha256=iiFxPfnJjnZd_l2Aj5TCR_O1dQwBcrvHccq0LSIJGZY,45719
|
@@ -153,7 +153,7 @@ modal/experimental/__init__.py,sha256=dPBPpxsmjZMLF3YjRrXoTvT01pl65wxi4UdFZsOem3
|
|
153
153
|
modal/experimental/flash.py,sha256=viXQumCIFp5VFsPFURdFTBTjP_QnsAi8nSWXAMmfjeQ,19744
|
154
154
|
modal/experimental/flash.pyi,sha256=A8_qJGtGoXEzKDdHbvhmCw7oqfneFEvJQK3ZdTOvUdU,10830
|
155
155
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
156
|
-
modal-1.1.
|
156
|
+
modal-1.1.3.dev0.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
157
157
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
158
158
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
159
159
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
@@ -176,10 +176,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
|
|
176
176
|
modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
177
177
|
modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
|
178
178
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
179
|
-
modal_version/__init__.py,sha256=
|
179
|
+
modal_version/__init__.py,sha256=imKg3ytw59rZrAJQnW-XDHVW59eJBGzmAMJiNKN-Bdo,120
|
180
180
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
181
|
-
modal-1.1.
|
182
|
-
modal-1.1.
|
183
|
-
modal-1.1.
|
184
|
-
modal-1.1.
|
185
|
-
modal-1.1.
|
181
|
+
modal-1.1.3.dev0.dist-info/METADATA,sha256=Nn6lynhxtjQ9qYAOfd2wvwYtqNSKjVBz96aBLshqEVc,2459
|
182
|
+
modal-1.1.3.dev0.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
183
|
+
modal-1.1.3.dev0.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
184
|
+
modal-1.1.3.dev0.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
185
|
+
modal-1.1.3.dev0.dist-info/RECORD,,
|
modal_version/__init__.py
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|