modal 1.1.2.dev15__py3-none-any.whl → 1.1.2.dev16__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/dict.py +8 -4
- modal/cli/queues.py +9 -4
- modal/cli/secret.py +7 -10
- modal/cli/volume.py +7 -6
- modal/client.pyi +2 -2
- modal/dict.py +47 -4
- modal/dict.pyi +118 -3
- modal/functions.pyi +6 -6
- modal/queue.py +49 -4
- modal/queue.pyi +118 -3
- modal/secret.py +33 -0
- modal/secret.pyi +83 -0
- modal/volume.py +49 -4
- modal/volume.pyi +118 -3
- {modal-1.1.2.dev15.dist-info → modal-1.1.2.dev16.dist-info}/METADATA +1 -1
- {modal-1.1.2.dev15.dist-info → modal-1.1.2.dev16.dist-info}/RECORD +21 -21
- modal_version/__init__.py +1 -1
- {modal-1.1.2.dev15.dist-info → modal-1.1.2.dev16.dist-info}/WHEEL +0 -0
- {modal-1.1.2.dev15.dist-info → modal-1.1.2.dev16.dist-info}/entry_points.txt +0 -0
- {modal-1.1.2.dev15.dist-info → modal-1.1.2.dev16.dist-info}/licenses/LICENSE +0 -0
- {modal-1.1.2.dev15.dist-info → modal-1.1.2.dev16.dist-info}/top_level.txt +0 -0
modal/cli/dict.py
CHANGED
@@ -63,17 +63,21 @@ async def clear(name: str, *, yes: bool = YES_OPTION, env: Optional[str] = ENV_O
|
|
63
63
|
|
64
64
|
@dict_cli.command(name="delete", rich_help_panel="Management")
|
65
65
|
@synchronizer.create_blocking
|
66
|
-
async def delete(
|
66
|
+
async def delete(
|
67
|
+
name: str,
|
68
|
+
*,
|
69
|
+
allow_missing: bool = Option(False, "--allow-missing", help="Don't error if the Dict doesn't exist."),
|
70
|
+
yes: bool = YES_OPTION,
|
71
|
+
env: Optional[str] = ENV_OPTION,
|
72
|
+
):
|
67
73
|
"""Delete a named Dict and all of its data."""
|
68
|
-
# Lookup first to validate the name, even though delete is a staticmethod
|
69
|
-
await _Dict.from_name(name, environment_name=env).hydrate()
|
70
74
|
if not yes:
|
71
75
|
typer.confirm(
|
72
76
|
f"Are you sure you want to irrevocably delete the modal.Dict '{name}'?",
|
73
77
|
default=False,
|
74
78
|
abort=True,
|
75
79
|
)
|
76
|
-
await _Dict.delete(name, environment_name=env)
|
80
|
+
await _Dict.objects.delete(name, environment_name=env, allow_missing=allow_missing)
|
77
81
|
|
78
82
|
|
79
83
|
@dict_cli.command(name="get", rich_help_panel="Inspection")
|
modal/cli/queues.py
CHANGED
@@ -45,17 +45,22 @@ async def create(name: str, *, env: Optional[str] = ENV_OPTION):
|
|
45
45
|
|
46
46
|
@queue_cli.command(name="delete", rich_help_panel="Management")
|
47
47
|
@synchronizer.create_blocking
|
48
|
-
async def delete(
|
48
|
+
async def delete(
|
49
|
+
name: str,
|
50
|
+
*,
|
51
|
+
allow_missing: bool = Option(False, "--allow-missing", help="Don't error if the Queue doesn't exist."),
|
52
|
+
yes: bool = YES_OPTION,
|
53
|
+
env: Optional[str] = ENV_OPTION,
|
54
|
+
):
|
49
55
|
"""Delete a named Queue and all of its data."""
|
50
|
-
|
51
|
-
await _Queue.from_name(name, environment_name=env).hydrate()
|
56
|
+
env = ensure_env(env)
|
52
57
|
if not yes:
|
53
58
|
typer.confirm(
|
54
59
|
f"Are you sure you want to irrevocably delete the modal.Queue '{name}'?",
|
55
60
|
default=False,
|
56
61
|
abort=True,
|
57
62
|
)
|
58
|
-
await _Queue.delete(name, environment_name=env)
|
63
|
+
await _Queue.objects.delete(name, environment_name=env, allow_missing=allow_missing)
|
59
64
|
|
60
65
|
|
61
66
|
@queue_cli.command(name="list", rich_help_panel="Management")
|
modal/cli/secret.py
CHANGED
@@ -11,7 +11,7 @@ from typing import Optional
|
|
11
11
|
import click
|
12
12
|
import typer
|
13
13
|
from rich.syntax import Syntax
|
14
|
-
from typer import Argument
|
14
|
+
from typer import Argument, Option
|
15
15
|
|
16
16
|
from modal._output import make_console
|
17
17
|
from modal._utils.async_utils import synchronizer
|
@@ -158,26 +158,23 @@ def some_function():
|
|
158
158
|
console.print(Syntax(example_code, "python"))
|
159
159
|
|
160
160
|
|
161
|
-
@secret_cli.command("delete", help="Delete a named
|
161
|
+
@secret_cli.command("delete", help="Delete a named Secret.")
|
162
162
|
@synchronizer.create_blocking
|
163
163
|
async def delete(
|
164
|
-
|
164
|
+
name: str = Argument(help="Name of the modal.Secret to be deleted. Case sensitive"),
|
165
|
+
*,
|
166
|
+
allow_missing: bool = Option(False, "--allow-missing", help="Don't error if the Secret doesn't exist."),
|
165
167
|
yes: bool = YES_OPTION,
|
166
168
|
env: Optional[str] = ENV_OPTION,
|
167
169
|
):
|
168
|
-
"""TODO"""
|
169
170
|
env = ensure_env(env)
|
170
|
-
secret = await _Secret.from_name(secret_name, environment_name=env).hydrate()
|
171
171
|
if not yes:
|
172
172
|
typer.confirm(
|
173
|
-
f"Are you sure you want to irrevocably delete the modal.Secret '{
|
173
|
+
f"Are you sure you want to irrevocably delete the modal.Secret '{name}'?",
|
174
174
|
default=False,
|
175
175
|
abort=True,
|
176
176
|
)
|
177
|
-
|
178
|
-
|
179
|
-
# TODO: replace with API on `modal.Secret` when we add it
|
180
|
-
await client.stub.SecretDelete(api_pb2.SecretDeleteRequest(secret_id=secret.object_id))
|
177
|
+
await _Secret.objects.delete(name, environment_name=env, allow_missing=allow_missing)
|
181
178
|
|
182
179
|
|
183
180
|
def get_text_from_editor(key) -> str:
|
modal/cli/volume.py
CHANGED
@@ -274,25 +274,26 @@ async def cp(
|
|
274
274
|
|
275
275
|
@volume_cli.command(
|
276
276
|
name="delete",
|
277
|
-
help="Delete a named
|
277
|
+
help="Delete a named Volume and all of its data.",
|
278
278
|
rich_help_panel="Management",
|
279
279
|
)
|
280
280
|
@synchronizer.create_blocking
|
281
281
|
async def delete(
|
282
|
-
|
282
|
+
name: str = Argument(help="Name of the modal.Volume to be deleted. Case sensitive"),
|
283
|
+
*,
|
284
|
+
allow_missing: bool = Option(False, "--allow-missing", help="Don't error if the Volume doesn't exist."),
|
283
285
|
yes: bool = YES_OPTION,
|
284
286
|
env: Optional[str] = ENV_OPTION,
|
285
287
|
):
|
286
|
-
|
287
|
-
await _Volume.from_name(volume_name, environment_name=env).hydrate()
|
288
|
+
env = ensure_env(env)
|
288
289
|
if not yes:
|
289
290
|
typer.confirm(
|
290
|
-
f"Are you sure you want to irrevocably delete the modal.Volume '{
|
291
|
+
f"Are you sure you want to irrevocably delete the modal.Volume '{name}'?",
|
291
292
|
default=False,
|
292
293
|
abort=True,
|
293
294
|
)
|
294
295
|
|
295
|
-
await _Volume.delete(
|
296
|
+
await _Volume.objects.delete(name, environment_name=env, allow_missing=allow_missing)
|
296
297
|
|
297
298
|
|
298
299
|
@volume_cli.command(
|
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.2.
|
36
|
+
version: str = "1.1.2.dev16",
|
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.2.
|
167
|
+
version: str = "1.1.2.dev16",
|
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
@@ -27,7 +27,7 @@ from ._utils.name_utils import check_object_name
|
|
27
27
|
from ._utils.time_utils import as_timestamp, timestamp_to_localized_dt
|
28
28
|
from .client import _Client
|
29
29
|
from .config import logger
|
30
|
-
from .exception import InvalidError, RequestSizeError
|
30
|
+
from .exception import InvalidError, NotFoundError, RequestSizeError
|
31
31
|
|
32
32
|
|
33
33
|
def _serialize_dict(data):
|
@@ -104,6 +104,40 @@ class _DictManager:
|
|
104
104
|
dicts = [_Dict._new_hydrated(item.dict_id, client, item.metadata, is_another_app=True) for item in items]
|
105
105
|
return dicts[:max_objects] if max_objects is not None else dicts
|
106
106
|
|
107
|
+
@staticmethod
|
108
|
+
async def delete(
|
109
|
+
name: str, # Name of the Dict to delete
|
110
|
+
*,
|
111
|
+
allow_missing: bool = False, # If True, don't raise an error if the Dict doesn't exist
|
112
|
+
environment_name: Optional[str] = None, # Uses active environment if not specified
|
113
|
+
client: Optional[_Client] = None, # Optional client with Modal credentials
|
114
|
+
):
|
115
|
+
"""Delete a named Dict.
|
116
|
+
|
117
|
+
Warning: This deletes an *entire Dict*, not just a specific key.
|
118
|
+
Deletion is irreversible and will affect any Apps currently using the Dict.
|
119
|
+
|
120
|
+
**Examples:**
|
121
|
+
|
122
|
+
```python notest
|
123
|
+
await modal.Dict.objects.delete("my-dict")
|
124
|
+
```
|
125
|
+
|
126
|
+
Dicts will be deleted from the active environment, or another one can be specified:
|
127
|
+
|
128
|
+
```python notest
|
129
|
+
await modal.Dict.objects.delete("my-dict", environment_name="dev")
|
130
|
+
```
|
131
|
+
"""
|
132
|
+
try:
|
133
|
+
obj = await _Dict.from_name(name, environment_name=environment_name).hydrate(client)
|
134
|
+
except NotFoundError:
|
135
|
+
if not allow_missing:
|
136
|
+
raise
|
137
|
+
else:
|
138
|
+
req = api_pb2.DictDeleteRequest(dict_id=obj.object_id)
|
139
|
+
await retry_transient_errors(obj._client.stub.DictDelete, req)
|
140
|
+
|
107
141
|
|
108
142
|
DictManager = synchronize_api(_DictManager)
|
109
143
|
|
@@ -311,9 +345,18 @@ class _Dict(_Object, type_prefix="di"):
|
|
311
345
|
client: Optional[_Client] = None,
|
312
346
|
environment_name: Optional[str] = None,
|
313
347
|
):
|
314
|
-
|
315
|
-
|
316
|
-
|
348
|
+
"""mdmd:hidden
|
349
|
+
Delete a named Dict object.
|
350
|
+
|
351
|
+
Warning: This deletes an *entire Dict*, not just a specific key.
|
352
|
+
Deletion is irreversible and will affect any Apps currently using the Dict.
|
353
|
+
|
354
|
+
DEPRECATED: This method is deprecated; we recommend using `modal.Dict.objects.delete` instead.
|
355
|
+
"""
|
356
|
+
deprecation_warning(
|
357
|
+
(2025, 8, 6), "`modal.Dict.delete` is deprecated; we recommend using `modal.Dict.objects.delete` instead."
|
358
|
+
)
|
359
|
+
await _Dict.objects.delete(name, environment_name=environment_name, client=client)
|
317
360
|
|
318
361
|
@live_method
|
319
362
|
async def info(self) -> DictInfo:
|
modal/dict.pyi
CHANGED
@@ -67,6 +67,33 @@ class _DictManager:
|
|
67
67
|
"""
|
68
68
|
...
|
69
69
|
|
70
|
+
@staticmethod
|
71
|
+
async def delete(
|
72
|
+
name: str,
|
73
|
+
*,
|
74
|
+
allow_missing: bool = False,
|
75
|
+
environment_name: typing.Optional[str] = None,
|
76
|
+
client: typing.Optional[modal.client._Client] = None,
|
77
|
+
):
|
78
|
+
"""Delete a named Dict.
|
79
|
+
|
80
|
+
Warning: This deletes an *entire Dict*, not just a specific key.
|
81
|
+
Deletion is irreversible and will affect any Apps currently using the Dict.
|
82
|
+
|
83
|
+
**Examples:**
|
84
|
+
|
85
|
+
```python notest
|
86
|
+
await modal.Dict.objects.delete("my-dict")
|
87
|
+
```
|
88
|
+
|
89
|
+
Dicts will be deleted from the active environment, or another one can be specified:
|
90
|
+
|
91
|
+
```python notest
|
92
|
+
await modal.Dict.objects.delete("my-dict", environment_name="dev")
|
93
|
+
```
|
94
|
+
"""
|
95
|
+
...
|
96
|
+
|
70
97
|
class DictManager:
|
71
98
|
"""Namespace with methods for managing named Dict objects."""
|
72
99
|
def __init__(self, /, *args, **kwargs):
|
@@ -142,6 +169,65 @@ class DictManager:
|
|
142
169
|
|
143
170
|
list: __list_spec
|
144
171
|
|
172
|
+
class __delete_spec(typing_extensions.Protocol):
|
173
|
+
def __call__(
|
174
|
+
self,
|
175
|
+
/,
|
176
|
+
name: str,
|
177
|
+
*,
|
178
|
+
allow_missing: bool = False,
|
179
|
+
environment_name: typing.Optional[str] = None,
|
180
|
+
client: typing.Optional[modal.client.Client] = None,
|
181
|
+
):
|
182
|
+
"""Delete a named Dict.
|
183
|
+
|
184
|
+
Warning: This deletes an *entire Dict*, not just a specific key.
|
185
|
+
Deletion is irreversible and will affect any Apps currently using the Dict.
|
186
|
+
|
187
|
+
**Examples:**
|
188
|
+
|
189
|
+
```python notest
|
190
|
+
await modal.Dict.objects.delete("my-dict")
|
191
|
+
```
|
192
|
+
|
193
|
+
Dicts will be deleted from the active environment, or another one can be specified:
|
194
|
+
|
195
|
+
```python notest
|
196
|
+
await modal.Dict.objects.delete("my-dict", environment_name="dev")
|
197
|
+
```
|
198
|
+
"""
|
199
|
+
...
|
200
|
+
|
201
|
+
async def aio(
|
202
|
+
self,
|
203
|
+
/,
|
204
|
+
name: str,
|
205
|
+
*,
|
206
|
+
allow_missing: bool = False,
|
207
|
+
environment_name: typing.Optional[str] = None,
|
208
|
+
client: typing.Optional[modal.client.Client] = None,
|
209
|
+
):
|
210
|
+
"""Delete a named Dict.
|
211
|
+
|
212
|
+
Warning: This deletes an *entire Dict*, not just a specific key.
|
213
|
+
Deletion is irreversible and will affect any Apps currently using the Dict.
|
214
|
+
|
215
|
+
**Examples:**
|
216
|
+
|
217
|
+
```python notest
|
218
|
+
await modal.Dict.objects.delete("my-dict")
|
219
|
+
```
|
220
|
+
|
221
|
+
Dicts will be deleted from the active environment, or another one can be specified:
|
222
|
+
|
223
|
+
```python notest
|
224
|
+
await modal.Dict.objects.delete("my-dict", environment_name="dev")
|
225
|
+
```
|
226
|
+
"""
|
227
|
+
...
|
228
|
+
|
229
|
+
delete: __delete_spec
|
230
|
+
|
145
231
|
class _Dict(modal._object._Object):
|
146
232
|
"""Distributed dictionary for storage in Modal apps.
|
147
233
|
|
@@ -274,7 +360,17 @@ class _Dict(modal._object._Object):
|
|
274
360
|
*,
|
275
361
|
client: typing.Optional[modal.client._Client] = None,
|
276
362
|
environment_name: typing.Optional[str] = None,
|
277
|
-
):
|
363
|
+
):
|
364
|
+
"""mdmd:hidden
|
365
|
+
Delete a named Dict object.
|
366
|
+
|
367
|
+
Warning: This deletes an *entire Dict*, not just a specific key.
|
368
|
+
Deletion is irreversible and will affect any Apps currently using the Dict.
|
369
|
+
|
370
|
+
DEPRECATED: This method is deprecated; we recommend using `modal.Dict.objects.delete` instead.
|
371
|
+
"""
|
372
|
+
...
|
373
|
+
|
278
374
|
async def info(self) -> DictInfo:
|
279
375
|
"""Return information about the Dict object."""
|
280
376
|
...
|
@@ -534,7 +630,17 @@ class Dict(modal.object.Object):
|
|
534
630
|
*,
|
535
631
|
client: typing.Optional[modal.client.Client] = None,
|
536
632
|
environment_name: typing.Optional[str] = None,
|
537
|
-
):
|
633
|
+
):
|
634
|
+
"""mdmd:hidden
|
635
|
+
Delete a named Dict object.
|
636
|
+
|
637
|
+
Warning: This deletes an *entire Dict*, not just a specific key.
|
638
|
+
Deletion is irreversible and will affect any Apps currently using the Dict.
|
639
|
+
|
640
|
+
DEPRECATED: This method is deprecated; we recommend using `modal.Dict.objects.delete` instead.
|
641
|
+
"""
|
642
|
+
...
|
643
|
+
|
538
644
|
async def aio(
|
539
645
|
self,
|
540
646
|
/,
|
@@ -542,7 +648,16 @@ class Dict(modal.object.Object):
|
|
542
648
|
*,
|
543
649
|
client: typing.Optional[modal.client.Client] = None,
|
544
650
|
environment_name: typing.Optional[str] = None,
|
545
|
-
):
|
651
|
+
):
|
652
|
+
"""mdmd:hidden
|
653
|
+
Delete a named Dict object.
|
654
|
+
|
655
|
+
Warning: This deletes an *entire Dict*, not just a specific key.
|
656
|
+
Deletion is irreversible and will affect any Apps currently using the Dict.
|
657
|
+
|
658
|
+
DEPRECATED: This method is deprecated; we recommend using `modal.Dict.objects.delete` instead.
|
659
|
+
"""
|
660
|
+
...
|
546
661
|
|
547
662
|
delete: __delete_spec
|
548
663
|
|
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[ReturnType_INNER, P_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.ReturnType, modal._functions.P, 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[ReturnType_INNER, P_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.ReturnType, modal._functions.P, 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[ReturnType_INNER, P_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.ReturnType, modal._functions.P, 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."""
|
modal/queue.py
CHANGED
@@ -29,7 +29,7 @@ from ._utils.grpc_utils import retry_transient_errors
|
|
29
29
|
from ._utils.name_utils import check_object_name
|
30
30
|
from ._utils.time_utils import as_timestamp, timestamp_to_localized_dt
|
31
31
|
from .client import _Client
|
32
|
-
from .exception import InvalidError, RequestSizeError
|
32
|
+
from .exception import InvalidError, NotFoundError, RequestSizeError
|
33
33
|
|
34
34
|
|
35
35
|
@dataclass
|
@@ -102,6 +102,40 @@ class _QueueManager:
|
|
102
102
|
queues = [_Queue._new_hydrated(item.queue_id, client, item.metadata, is_another_app=True) for item in items]
|
103
103
|
return queues[:max_objects] if max_objects is not None else queues
|
104
104
|
|
105
|
+
@staticmethod
|
106
|
+
async def delete(
|
107
|
+
name: str, # Name of the Queue to delete
|
108
|
+
*,
|
109
|
+
allow_missing: bool = False, # If True, don't raise an error if the Queue doesn't exist
|
110
|
+
environment_name: Optional[str] = None, # Uses active environment if not specified
|
111
|
+
client: Optional[_Client] = None, # Optional client with Modal credentials
|
112
|
+
):
|
113
|
+
"""Delete a named Queue.
|
114
|
+
|
115
|
+
Warning: This deletes an *entire Queue*, not just a specific entry or partition.
|
116
|
+
Deletion is irreversible and will affect any Apps currently using the Queue.
|
117
|
+
|
118
|
+
**Examples:**
|
119
|
+
|
120
|
+
```python notest
|
121
|
+
await modal.Queue.objects.delete("my-queue")
|
122
|
+
```
|
123
|
+
|
124
|
+
Queues will be deleted from the active environment, or another one can be specified:
|
125
|
+
|
126
|
+
```python notest
|
127
|
+
await modal.Queue.objects.delete("my-queue", environment_name="dev")
|
128
|
+
```
|
129
|
+
"""
|
130
|
+
try:
|
131
|
+
obj = await _Queue.from_name(name, environment_name=environment_name).hydrate(client)
|
132
|
+
except NotFoundError:
|
133
|
+
if not allow_missing:
|
134
|
+
raise
|
135
|
+
else:
|
136
|
+
req = api_pb2.QueueDeleteRequest(queue_id=obj.object_id)
|
137
|
+
await retry_transient_errors(obj._client.stub.QueueDelete, req)
|
138
|
+
|
105
139
|
|
106
140
|
QueueManager = synchronize_api(_QueueManager)
|
107
141
|
|
@@ -323,9 +357,20 @@ class _Queue(_Object, type_prefix="qu"):
|
|
323
357
|
|
324
358
|
@staticmethod
|
325
359
|
async def delete(name: str, *, client: Optional[_Client] = None, environment_name: Optional[str] = None):
|
326
|
-
|
327
|
-
|
328
|
-
|
360
|
+
"""mdmd:hidden
|
361
|
+
Delete a named Queue.
|
362
|
+
|
363
|
+
Warning: This deletes an *entire Queue*, not just a specific entry or partition.
|
364
|
+
Deletion is irreversible and will affect any Apps currently using the Queue.
|
365
|
+
|
366
|
+
DEPRECATED: This method is deprecated; we recommend using `modal.Queue.objects.delete` instead.
|
367
|
+
|
368
|
+
"""
|
369
|
+
deprecation_warning(
|
370
|
+
(2025, 8, 6),
|
371
|
+
"`modal.Queue.delete` is deprecated; we recommend using `modal.Queue.objects.delete` instead.",
|
372
|
+
)
|
373
|
+
await _Queue.objects.delete(name, environment_name=environment_name, client=client)
|
329
374
|
|
330
375
|
@live_method
|
331
376
|
async def info(self) -> QueueInfo:
|
modal/queue.pyi
CHANGED
@@ -65,6 +65,33 @@ class _QueueManager:
|
|
65
65
|
"""
|
66
66
|
...
|
67
67
|
|
68
|
+
@staticmethod
|
69
|
+
async def delete(
|
70
|
+
name: str,
|
71
|
+
*,
|
72
|
+
allow_missing: bool = False,
|
73
|
+
environment_name: typing.Optional[str] = None,
|
74
|
+
client: typing.Optional[modal.client._Client] = None,
|
75
|
+
):
|
76
|
+
"""Delete a named Queue.
|
77
|
+
|
78
|
+
Warning: This deletes an *entire Queue*, not just a specific entry or partition.
|
79
|
+
Deletion is irreversible and will affect any Apps currently using the Queue.
|
80
|
+
|
81
|
+
**Examples:**
|
82
|
+
|
83
|
+
```python notest
|
84
|
+
await modal.Queue.objects.delete("my-queue")
|
85
|
+
```
|
86
|
+
|
87
|
+
Queues will be deleted from the active environment, or another one can be specified:
|
88
|
+
|
89
|
+
```python notest
|
90
|
+
await modal.Queue.objects.delete("my-queue", environment_name="dev")
|
91
|
+
```
|
92
|
+
"""
|
93
|
+
...
|
94
|
+
|
68
95
|
class QueueManager:
|
69
96
|
"""Namespace with methods for managing named Queue objects."""
|
70
97
|
def __init__(self, /, *args, **kwargs):
|
@@ -140,6 +167,65 @@ class QueueManager:
|
|
140
167
|
|
141
168
|
list: __list_spec
|
142
169
|
|
170
|
+
class __delete_spec(typing_extensions.Protocol):
|
171
|
+
def __call__(
|
172
|
+
self,
|
173
|
+
/,
|
174
|
+
name: str,
|
175
|
+
*,
|
176
|
+
allow_missing: bool = False,
|
177
|
+
environment_name: typing.Optional[str] = None,
|
178
|
+
client: typing.Optional[modal.client.Client] = None,
|
179
|
+
):
|
180
|
+
"""Delete a named Queue.
|
181
|
+
|
182
|
+
Warning: This deletes an *entire Queue*, not just a specific entry or partition.
|
183
|
+
Deletion is irreversible and will affect any Apps currently using the Queue.
|
184
|
+
|
185
|
+
**Examples:**
|
186
|
+
|
187
|
+
```python notest
|
188
|
+
await modal.Queue.objects.delete("my-queue")
|
189
|
+
```
|
190
|
+
|
191
|
+
Queues will be deleted from the active environment, or another one can be specified:
|
192
|
+
|
193
|
+
```python notest
|
194
|
+
await modal.Queue.objects.delete("my-queue", environment_name="dev")
|
195
|
+
```
|
196
|
+
"""
|
197
|
+
...
|
198
|
+
|
199
|
+
async def aio(
|
200
|
+
self,
|
201
|
+
/,
|
202
|
+
name: str,
|
203
|
+
*,
|
204
|
+
allow_missing: bool = False,
|
205
|
+
environment_name: typing.Optional[str] = None,
|
206
|
+
client: typing.Optional[modal.client.Client] = None,
|
207
|
+
):
|
208
|
+
"""Delete a named Queue.
|
209
|
+
|
210
|
+
Warning: This deletes an *entire Queue*, not just a specific entry or partition.
|
211
|
+
Deletion is irreversible and will affect any Apps currently using the Queue.
|
212
|
+
|
213
|
+
**Examples:**
|
214
|
+
|
215
|
+
```python notest
|
216
|
+
await modal.Queue.objects.delete("my-queue")
|
217
|
+
```
|
218
|
+
|
219
|
+
Queues will be deleted from the active environment, or another one can be specified:
|
220
|
+
|
221
|
+
```python notest
|
222
|
+
await modal.Queue.objects.delete("my-queue", environment_name="dev")
|
223
|
+
```
|
224
|
+
"""
|
225
|
+
...
|
226
|
+
|
227
|
+
delete: __delete_spec
|
228
|
+
|
143
229
|
class _Queue(modal._object._Object):
|
144
230
|
"""Distributed, FIFO queue for data flow in Modal apps.
|
145
231
|
|
@@ -297,7 +383,17 @@ class _Queue(modal._object._Object):
|
|
297
383
|
*,
|
298
384
|
client: typing.Optional[modal.client._Client] = None,
|
299
385
|
environment_name: typing.Optional[str] = None,
|
300
|
-
):
|
386
|
+
):
|
387
|
+
"""mdmd:hidden
|
388
|
+
Delete a named Queue.
|
389
|
+
|
390
|
+
Warning: This deletes an *entire Queue*, not just a specific entry or partition.
|
391
|
+
Deletion is irreversible and will affect any Apps currently using the Queue.
|
392
|
+
|
393
|
+
DEPRECATED: This method is deprecated; we recommend using `modal.Queue.objects.delete` instead.
|
394
|
+
"""
|
395
|
+
...
|
396
|
+
|
301
397
|
async def info(self) -> QueueInfo:
|
302
398
|
"""Return information about the Queue object."""
|
303
399
|
...
|
@@ -597,7 +693,17 @@ class Queue(modal.object.Object):
|
|
597
693
|
*,
|
598
694
|
client: typing.Optional[modal.client.Client] = None,
|
599
695
|
environment_name: typing.Optional[str] = None,
|
600
|
-
):
|
696
|
+
):
|
697
|
+
"""mdmd:hidden
|
698
|
+
Delete a named Queue.
|
699
|
+
|
700
|
+
Warning: This deletes an *entire Queue*, not just a specific entry or partition.
|
701
|
+
Deletion is irreversible and will affect any Apps currently using the Queue.
|
702
|
+
|
703
|
+
DEPRECATED: This method is deprecated; we recommend using `modal.Queue.objects.delete` instead.
|
704
|
+
"""
|
705
|
+
...
|
706
|
+
|
601
707
|
async def aio(
|
602
708
|
self,
|
603
709
|
/,
|
@@ -605,7 +711,16 @@ class Queue(modal.object.Object):
|
|
605
711
|
*,
|
606
712
|
client: typing.Optional[modal.client.Client] = None,
|
607
713
|
environment_name: typing.Optional[str] = None,
|
608
|
-
):
|
714
|
+
):
|
715
|
+
"""mdmd:hidden
|
716
|
+
Delete a named Queue.
|
717
|
+
|
718
|
+
Warning: This deletes an *entire Queue*, not just a specific entry or partition.
|
719
|
+
Deletion is irreversible and will affect any Apps currently using the Queue.
|
720
|
+
|
721
|
+
DEPRECATED: This method is deprecated; we recommend using `modal.Queue.objects.delete` instead.
|
722
|
+
"""
|
723
|
+
...
|
609
724
|
|
610
725
|
delete: __delete_spec
|
611
726
|
|
modal/secret.py
CHANGED
@@ -94,6 +94,39 @@ class _SecretManager:
|
|
94
94
|
secrets = [_Secret._new_hydrated(item.secret_id, client, item.metadata, is_another_app=True) for item in items]
|
95
95
|
return secrets[:max_objects] if max_objects is not None else secrets
|
96
96
|
|
97
|
+
@staticmethod
|
98
|
+
async def delete(
|
99
|
+
name: str, # Name of the Secret to delete
|
100
|
+
*,
|
101
|
+
allow_missing: bool = False, # If True, don't raise an error if the Secret doesn't exist
|
102
|
+
environment_name: Optional[str] = None, # Uses active environment if not specified
|
103
|
+
client: Optional[_Client] = None, # Optional client with Modal credentials
|
104
|
+
):
|
105
|
+
"""Delete a named Secret.
|
106
|
+
|
107
|
+
Warning: Deletion is irreversible and will affect any Apps currently using the Secret.
|
108
|
+
|
109
|
+
**Examples:**
|
110
|
+
|
111
|
+
```python notest
|
112
|
+
await modal.Secret.objects.delete("my-secret")
|
113
|
+
```
|
114
|
+
|
115
|
+
Secrets will be deleted from the active environment, or another one can be specified:
|
116
|
+
|
117
|
+
```python notest
|
118
|
+
await modal.Secret.objects.delete("my-secret", environment_name="dev")
|
119
|
+
```
|
120
|
+
"""
|
121
|
+
try:
|
122
|
+
obj = await _Secret.from_name(name, environment_name=environment_name).hydrate(client)
|
123
|
+
except NotFoundError:
|
124
|
+
if not allow_missing:
|
125
|
+
raise
|
126
|
+
else:
|
127
|
+
req = api_pb2.SecretDeleteRequest(secret_id=obj.object_id)
|
128
|
+
await retry_transient_errors(obj._client.stub.SecretDelete, req)
|
129
|
+
|
97
130
|
|
98
131
|
SecretManager = synchronize_api(_SecretManager)
|
99
132
|
|
modal/secret.pyi
CHANGED
@@ -63,6 +63,32 @@ class _SecretManager:
|
|
63
63
|
"""
|
64
64
|
...
|
65
65
|
|
66
|
+
@staticmethod
|
67
|
+
async def delete(
|
68
|
+
name: str,
|
69
|
+
*,
|
70
|
+
allow_missing: bool = False,
|
71
|
+
environment_name: typing.Optional[str] = None,
|
72
|
+
client: typing.Optional[modal.client._Client] = None,
|
73
|
+
):
|
74
|
+
"""Delete a named Secret.
|
75
|
+
|
76
|
+
Warning: Deletion is irreversible and will affect any Apps currently using the Secret.
|
77
|
+
|
78
|
+
**Examples:**
|
79
|
+
|
80
|
+
```python notest
|
81
|
+
await modal.Secret.objects.delete("my-secret")
|
82
|
+
```
|
83
|
+
|
84
|
+
Secrets will be deleted from the active environment, or another one can be specified:
|
85
|
+
|
86
|
+
```python notest
|
87
|
+
await modal.Secret.objects.delete("my-secret", environment_name="dev")
|
88
|
+
```
|
89
|
+
"""
|
90
|
+
...
|
91
|
+
|
66
92
|
class SecretManager:
|
67
93
|
"""Namespace with methods for managing named Secret objects."""
|
68
94
|
def __init__(self, /, *args, **kwargs):
|
@@ -138,6 +164,63 @@ class SecretManager:
|
|
138
164
|
|
139
165
|
list: __list_spec
|
140
166
|
|
167
|
+
class __delete_spec(typing_extensions.Protocol):
|
168
|
+
def __call__(
|
169
|
+
self,
|
170
|
+
/,
|
171
|
+
name: str,
|
172
|
+
*,
|
173
|
+
allow_missing: bool = False,
|
174
|
+
environment_name: typing.Optional[str] = None,
|
175
|
+
client: typing.Optional[modal.client.Client] = None,
|
176
|
+
):
|
177
|
+
"""Delete a named Secret.
|
178
|
+
|
179
|
+
Warning: Deletion is irreversible and will affect any Apps currently using the Secret.
|
180
|
+
|
181
|
+
**Examples:**
|
182
|
+
|
183
|
+
```python notest
|
184
|
+
await modal.Secret.objects.delete("my-secret")
|
185
|
+
```
|
186
|
+
|
187
|
+
Secrets will be deleted from the active environment, or another one can be specified:
|
188
|
+
|
189
|
+
```python notest
|
190
|
+
await modal.Secret.objects.delete("my-secret", environment_name="dev")
|
191
|
+
```
|
192
|
+
"""
|
193
|
+
...
|
194
|
+
|
195
|
+
async def aio(
|
196
|
+
self,
|
197
|
+
/,
|
198
|
+
name: str,
|
199
|
+
*,
|
200
|
+
allow_missing: bool = False,
|
201
|
+
environment_name: typing.Optional[str] = None,
|
202
|
+
client: typing.Optional[modal.client.Client] = None,
|
203
|
+
):
|
204
|
+
"""Delete a named Secret.
|
205
|
+
|
206
|
+
Warning: Deletion is irreversible and will affect any Apps currently using the Secret.
|
207
|
+
|
208
|
+
**Examples:**
|
209
|
+
|
210
|
+
```python notest
|
211
|
+
await modal.Secret.objects.delete("my-secret")
|
212
|
+
```
|
213
|
+
|
214
|
+
Secrets will be deleted from the active environment, or another one can be specified:
|
215
|
+
|
216
|
+
```python notest
|
217
|
+
await modal.Secret.objects.delete("my-secret", environment_name="dev")
|
218
|
+
```
|
219
|
+
"""
|
220
|
+
...
|
221
|
+
|
222
|
+
delete: __delete_spec
|
223
|
+
|
141
224
|
class _Secret(modal._object._Object):
|
142
225
|
"""Secrets provide a dictionary of environment variables for images.
|
143
226
|
|
modal/volume.py
CHANGED
@@ -30,7 +30,7 @@ from synchronicity.async_wrap import asynccontextmanager
|
|
30
30
|
|
31
31
|
import modal.exception
|
32
32
|
import modal_proto.api_pb2
|
33
|
-
from modal.exception import InvalidError, VolumeUploadTimeoutError
|
33
|
+
from modal.exception import InvalidError, NotFoundError, VolumeUploadTimeoutError
|
34
34
|
from modal_proto import api_pb2
|
35
35
|
|
36
36
|
from ._object import (
|
@@ -171,6 +171,40 @@ class _VolumeManager:
|
|
171
171
|
volumes = [_Volume._new_hydrated(item.volume_id, client, item.metadata, is_another_app=True) for item in items]
|
172
172
|
return volumes[:max_objects] if max_objects is not None else volumes
|
173
173
|
|
174
|
+
@staticmethod
|
175
|
+
async def delete(
|
176
|
+
name: str, # Name of the Volume to delete
|
177
|
+
*,
|
178
|
+
allow_missing: bool = False, # If True, don't raise an error if the Volume doesn't exist
|
179
|
+
environment_name: Optional[str] = None, # Uses active environment if not specified
|
180
|
+
client: Optional[_Client] = None, # Optional client with Modal credentials
|
181
|
+
):
|
182
|
+
"""Delete a named Volume.
|
183
|
+
|
184
|
+
Warning: This deletes an *entire Volume*, not just a specific file.
|
185
|
+
Deletion is irreversible and will affect any Apps currently using the Volume.
|
186
|
+
|
187
|
+
**Examples:**
|
188
|
+
|
189
|
+
```python notest
|
190
|
+
await modal.Volume.objects.delete("my-volume")
|
191
|
+
```
|
192
|
+
|
193
|
+
Volumes will be deleted from the active environment, or another one can be specified:
|
194
|
+
|
195
|
+
```python notest
|
196
|
+
await modal.Volume.objects.delete("my-volume", environment_name="dev")
|
197
|
+
```
|
198
|
+
"""
|
199
|
+
try:
|
200
|
+
obj = await _Volume.from_name(name, environment_name=environment_name).hydrate(client)
|
201
|
+
except NotFoundError:
|
202
|
+
if not allow_missing:
|
203
|
+
raise
|
204
|
+
else:
|
205
|
+
req = api_pb2.VolumeDeleteRequest(volume_id=obj.object_id)
|
206
|
+
await retry_transient_errors(obj._client.stub.VolumeDelete, req)
|
207
|
+
|
174
208
|
|
175
209
|
VolumeManager = synchronize_api(_VolumeManager)
|
176
210
|
|
@@ -719,9 +753,20 @@ class _Volume(_Object, type_prefix="vo"):
|
|
719
753
|
|
720
754
|
@staticmethod
|
721
755
|
async def delete(name: str, client: Optional[_Client] = None, environment_name: Optional[str] = None):
|
722
|
-
|
723
|
-
|
724
|
-
|
756
|
+
"""mdmd:hidden
|
757
|
+
Delete a named Volume.
|
758
|
+
|
759
|
+
Warning: This deletes an *entire Volume*, not just a specific file.
|
760
|
+
Deletion is irreversible and will affect any Apps currently using the Volume.
|
761
|
+
|
762
|
+
DEPRECATED: This method is deprecated; we recommend using `modal.Volume.objects.delete` instead.
|
763
|
+
|
764
|
+
"""
|
765
|
+
deprecation_warning(
|
766
|
+
(2025, 8, 6),
|
767
|
+
"`modal.Volume.delete` is deprecated; we recommend using `modal.Volume.objects.delete` instead.",
|
768
|
+
)
|
769
|
+
await _Volume.objects.delete(name, environment_name=environment_name, client=client)
|
725
770
|
|
726
771
|
@staticmethod
|
727
772
|
async def rename(
|
modal/volume.pyi
CHANGED
@@ -114,6 +114,33 @@ class _VolumeManager:
|
|
114
114
|
"""
|
115
115
|
...
|
116
116
|
|
117
|
+
@staticmethod
|
118
|
+
async def delete(
|
119
|
+
name: str,
|
120
|
+
*,
|
121
|
+
allow_missing: bool = False,
|
122
|
+
environment_name: typing.Optional[str] = None,
|
123
|
+
client: typing.Optional[modal.client._Client] = None,
|
124
|
+
):
|
125
|
+
"""Delete a named Volume.
|
126
|
+
|
127
|
+
Warning: This deletes an *entire Volume*, not just a specific file.
|
128
|
+
Deletion is irreversible and will affect any Apps currently using the Volume.
|
129
|
+
|
130
|
+
**Examples:**
|
131
|
+
|
132
|
+
```python notest
|
133
|
+
await modal.Volume.objects.delete("my-volume")
|
134
|
+
```
|
135
|
+
|
136
|
+
Volumes will be deleted from the active environment, or another one can be specified:
|
137
|
+
|
138
|
+
```python notest
|
139
|
+
await modal.Volume.objects.delete("my-volume", environment_name="dev")
|
140
|
+
```
|
141
|
+
"""
|
142
|
+
...
|
143
|
+
|
117
144
|
class VolumeManager:
|
118
145
|
"""Namespace with methods for managing named Volume objects."""
|
119
146
|
def __init__(self, /, *args, **kwargs):
|
@@ -189,6 +216,65 @@ class VolumeManager:
|
|
189
216
|
|
190
217
|
list: __list_spec
|
191
218
|
|
219
|
+
class __delete_spec(typing_extensions.Protocol):
|
220
|
+
def __call__(
|
221
|
+
self,
|
222
|
+
/,
|
223
|
+
name: str,
|
224
|
+
*,
|
225
|
+
allow_missing: bool = False,
|
226
|
+
environment_name: typing.Optional[str] = None,
|
227
|
+
client: typing.Optional[modal.client.Client] = None,
|
228
|
+
):
|
229
|
+
"""Delete a named Volume.
|
230
|
+
|
231
|
+
Warning: This deletes an *entire Volume*, not just a specific file.
|
232
|
+
Deletion is irreversible and will affect any Apps currently using the Volume.
|
233
|
+
|
234
|
+
**Examples:**
|
235
|
+
|
236
|
+
```python notest
|
237
|
+
await modal.Volume.objects.delete("my-volume")
|
238
|
+
```
|
239
|
+
|
240
|
+
Volumes will be deleted from the active environment, or another one can be specified:
|
241
|
+
|
242
|
+
```python notest
|
243
|
+
await modal.Volume.objects.delete("my-volume", environment_name="dev")
|
244
|
+
```
|
245
|
+
"""
|
246
|
+
...
|
247
|
+
|
248
|
+
async def aio(
|
249
|
+
self,
|
250
|
+
/,
|
251
|
+
name: str,
|
252
|
+
*,
|
253
|
+
allow_missing: bool = False,
|
254
|
+
environment_name: typing.Optional[str] = None,
|
255
|
+
client: typing.Optional[modal.client.Client] = None,
|
256
|
+
):
|
257
|
+
"""Delete a named Volume.
|
258
|
+
|
259
|
+
Warning: This deletes an *entire Volume*, not just a specific file.
|
260
|
+
Deletion is irreversible and will affect any Apps currently using the Volume.
|
261
|
+
|
262
|
+
**Examples:**
|
263
|
+
|
264
|
+
```python notest
|
265
|
+
await modal.Volume.objects.delete("my-volume")
|
266
|
+
```
|
267
|
+
|
268
|
+
Volumes will be deleted from the active environment, or another one can be specified:
|
269
|
+
|
270
|
+
```python notest
|
271
|
+
await modal.Volume.objects.delete("my-volume", environment_name="dev")
|
272
|
+
```
|
273
|
+
"""
|
274
|
+
...
|
275
|
+
|
276
|
+
delete: __delete_spec
|
277
|
+
|
192
278
|
class _Volume(modal._object._Object):
|
193
279
|
"""A writeable volume that can be used to share files between one or more Modal functions.
|
194
280
|
|
@@ -479,7 +565,17 @@ class _Volume(modal._object._Object):
|
|
479
565
|
@staticmethod
|
480
566
|
async def delete(
|
481
567
|
name: str, client: typing.Optional[modal.client._Client] = None, environment_name: typing.Optional[str] = None
|
482
|
-
):
|
568
|
+
):
|
569
|
+
"""mdmd:hidden
|
570
|
+
Delete a named Volume.
|
571
|
+
|
572
|
+
Warning: This deletes an *entire Volume*, not just a specific file.
|
573
|
+
Deletion is irreversible and will affect any Apps currently using the Volume.
|
574
|
+
|
575
|
+
DEPRECATED: This method is deprecated; we recommend using `modal.Volume.objects.delete` instead.
|
576
|
+
"""
|
577
|
+
...
|
578
|
+
|
483
579
|
@staticmethod
|
484
580
|
async def rename(
|
485
581
|
old_name: str,
|
@@ -1000,14 +1096,33 @@ class Volume(modal.object.Object):
|
|
1000
1096
|
name: str,
|
1001
1097
|
client: typing.Optional[modal.client.Client] = None,
|
1002
1098
|
environment_name: typing.Optional[str] = None,
|
1003
|
-
):
|
1099
|
+
):
|
1100
|
+
"""mdmd:hidden
|
1101
|
+
Delete a named Volume.
|
1102
|
+
|
1103
|
+
Warning: This deletes an *entire Volume*, not just a specific file.
|
1104
|
+
Deletion is irreversible and will affect any Apps currently using the Volume.
|
1105
|
+
|
1106
|
+
DEPRECATED: This method is deprecated; we recommend using `modal.Volume.objects.delete` instead.
|
1107
|
+
"""
|
1108
|
+
...
|
1109
|
+
|
1004
1110
|
async def aio(
|
1005
1111
|
self,
|
1006
1112
|
/,
|
1007
1113
|
name: str,
|
1008
1114
|
client: typing.Optional[modal.client.Client] = None,
|
1009
1115
|
environment_name: typing.Optional[str] = None,
|
1010
|
-
):
|
1116
|
+
):
|
1117
|
+
"""mdmd:hidden
|
1118
|
+
Delete a named Volume.
|
1119
|
+
|
1120
|
+
Warning: This deletes an *entire Volume*, not just a specific file.
|
1121
|
+
Deletion is irreversible and will affect any Apps currently using the Volume.
|
1122
|
+
|
1123
|
+
DEPRECATED: This method is deprecated; we recommend using `modal.Volume.objects.delete` instead.
|
1124
|
+
"""
|
1125
|
+
...
|
1011
1126
|
|
1012
1127
|
delete: __delete_spec
|
1013
1128
|
|
@@ -22,7 +22,7 @@ modal/app.py,sha256=kpq4kXp7pch688y6g55QYAC10wqPTU5FXKoWPMirA3E,47899
|
|
22
22
|
modal/app.pyi,sha256=-jKXlGDBWRPVsuenBhdMRqawK-L2eiJ7gHbmSblhltg,43525
|
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=IwXcU0POnalVA3djJSCg_k5csRk3QaWhLOAF5OjT6xo,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=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=Xhc26Zl4LFjEsz32u36qbfvc70mlZ_VDAd_QsKOrNCY,20173
|
34
|
+
modal/dict.pyi,sha256=zHj9XK1uv8PR8Vvd9-RmMMd52002SxoNjNsrK2Bn1OE,29914
|
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=A_Kdkej6q7YQyhM_2-BvpFmPqJ0oHb54B6yf9VqvPVE,8116
|
41
41
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
42
|
-
modal/functions.pyi,sha256=
|
42
|
+
modal/functions.pyi,sha256=s3PQtacOfSeHukLR7Xz3qGD2sVh-CEgfpjgimv2gCCo,36161
|
43
43
|
modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
|
44
44
|
modal/image.py,sha256=A83nmo0zfCUwgvJh0LZ7Yc1sYvDnZLl_phbKxN-9HIw,103144
|
45
45
|
modal/image.pyi,sha256=oH-GCHVEwD5fOX0K_IaWN5RKZlYwX82z-K4wxx8aN3c,68541
|
@@ -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=bmfEEMzkQHeMhCoxQj2DEGLlrBq2pe1n6JloLU_LuT4,24747
|
63
|
+
modal/queue.pyi,sha256=cnnd5ZxZA3X0xT-igJbLC3p0TXATNwkJaXC8qCeFphQ,35815
|
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=eQd0Cf9yTFCNshnj7oH8WvecbhVIwsEsmuXB9O-REis,40927
|
|
69
69
|
modal/sandbox.pyi,sha256=_ddnvZGauSRG-WelsMB5oPil8KVWb0PSvmuAzAzrLIw,41713
|
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=uJUms_p7HtWFME8maVHSoHEGB_serWHTHM-z6oJb5cM,15923
|
73
|
+
modal/secret.pyi,sha256=5YTMzaybIoBtOFhK2T2SuhhvHBbo4lDm8sBqH-rITtk,15912
|
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=l_hBz7xpfbXCIhY3KSrgwLHzvHQk-w9lLHoEPrXGzLU,49796
|
82
|
+
modal/volume.pyi,sha256=fnHhR152qCh5St7XT-PReQK_tPAQ0hmcXKoezOulEl4,49427
|
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=9oqlKKPuLZjE7rYw3zTK30XUZighT3s4ZlA-9oxXOVI,45206
|
@@ -131,19 +131,19 @@ modal/cli/app.py,sha256=rbuAG92my-1eZN0olk6p2eD4oBnyBliUsrCOUW-U-9k,7832
|
|
131
131
|
modal/cli/cluster.py,sha256=8pQurDUvLP_HdSeHH5ZB6WIoDh48FR8qP9vGOtSsFXI,3168
|
132
132
|
modal/cli/config.py,sha256=lhp2Pq4RbTDhaZJ-ZJvhrMqJj8c-WjuRX6gjE3TrvXc,1691
|
133
133
|
modal/cli/container.py,sha256=9Ti-TIZ6vjDSmn9mk9h6SRwyhkQjtwirBN18LjpLyvE,3719
|
134
|
-
modal/cli/dict.py,sha256=
|
134
|
+
modal/cli/dict.py,sha256=YAJtiv41YcCd5Fqam3hXCNTs4Y0yOgGR_i6RfQNSAFM,4572
|
135
135
|
modal/cli/entry_point.py,sha256=M9ZeIsYx7rxdc6XP2iOIptVzmpj39D3rU8nfW7Dc3CQ,4388
|
136
136
|
modal/cli/environment.py,sha256=Ayddkiq9jdj3XYDJ8ZmUqFpPPH8xajYlbexRkzGtUcg,4334
|
137
137
|
modal/cli/import_refs.py,sha256=X59Z5JwgliRO6C-cIFto2Pr7o3SwlZMKQPKA0aI4ZK4,13927
|
138
138
|
modal/cli/launch.py,sha256=A5NtAgVDnTMlVFNfTlGS4p4Hbhpub8jZL_T9wvCkK5k,6155
|
139
139
|
modal/cli/network_file_system.py,sha256=I9IqTpVfk32uKYwGd8LTldkQx6UKYrQYNZ26q7Ab5Oo,8126
|
140
140
|
modal/cli/profile.py,sha256=g8X6tFFK9ccKyu2he9Yu19WLSLNdztzECgmIV__XJFs,3257
|
141
|
-
modal/cli/queues.py,sha256=
|
141
|
+
modal/cli/queues.py,sha256=5vKtKQ7YExdaxNPYZ0g5suU9sX0-F5h0zy0qBV-hN80,6140
|
142
142
|
modal/cli/run.py,sha256=96m6fpJKbjtva4xzJut0pxS36Z5WCMq0umpAry96im0,24946
|
143
|
-
modal/cli/secret.py,sha256=
|
143
|
+
modal/cli/secret.py,sha256=joJkA78-jKyGHx6VkpgCYvyWqmPa_BnU_GBMhpwsgTQ,7972
|
144
144
|
modal/cli/token.py,sha256=NAmQzKBfEHkcldWKeFxAVIqQBoo1RTp7_A4yc7-8qM0,1911
|
145
145
|
modal/cli/utils.py,sha256=aUXDU9_VgcJrGaGRy4bGf4dqwKYXHCpoO27x4m_bpuo,3293
|
146
|
-
modal/cli/volume.py,sha256=
|
146
|
+
modal/cli/volume.py,sha256=73u0wj3xXGb2sGG6sR9StY4rE8OG7Ec_3_iPnXRUgPo,10760
|
147
147
|
modal/cli/programs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
148
148
|
modal/cli/programs/launch_instance_ssh.py,sha256=GrwK_Vy8-7B4x5a6AqFaF7lqNVgu75JYZ2BtFV0_DOw,2660
|
149
149
|
modal/cli/programs/run_jupyter.py,sha256=44Lpvqk2l3hH-uOkmAOzw60NEsfB5uaRDWDKVshvQhs,2682
|
@@ -153,7 +153,7 @@ modal/experimental/__init__.py,sha256=v5uDRPVr2BNEyeOo6YNWNF5yFUddr66habUvEAqOAG
|
|
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.2.
|
156
|
+
modal-1.1.2.dev16.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=991qiLp7Gaj7KDTnPn2cQZzYs3lPFPPiUFmLVtqUyCk,121
|
180
180
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
181
|
-
modal-1.1.2.
|
182
|
-
modal-1.1.2.
|
183
|
-
modal-1.1.2.
|
184
|
-
modal-1.1.2.
|
185
|
-
modal-1.1.2.
|
181
|
+
modal-1.1.2.dev16.dist-info/METADATA,sha256=ebR80hnI4tOEH63GsXjKYPZ0sYbuGzjnsLiktsrGxDk,2460
|
182
|
+
modal-1.1.2.dev16.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
183
|
+
modal-1.1.2.dev16.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
184
|
+
modal-1.1.2.dev16.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
185
|
+
modal-1.1.2.dev16.dist-info/RECORD,,
|
modal_version/__init__.py
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|