modal 1.2.2.dev22__py3-none-any.whl → 1.2.2.dev31__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 +69 -37
- modal/_grpc_client.py +25 -2
- modal/_load_context.py +105 -0
- modal/_object.py +47 -18
- modal/_resolver.py +21 -35
- modal/_utils/function_utils.py +1 -2
- modal/app.py +7 -0
- modal/app.pyi +3 -0
- modal/cli/dict.py +5 -2
- modal/cli/queues.py +4 -2
- modal/client.pyi +2 -2
- modal/cloud_bucket_mount.py +2 -0
- modal/cloud_bucket_mount.pyi +4 -0
- modal/cls.py +71 -32
- modal/cls.pyi +3 -0
- modal/dict.py +14 -5
- modal/dict.pyi +2 -0
- modal/environments.py +16 -7
- modal/environments.pyi +6 -2
- modal/experimental/flash.py +2 -3
- modal/functions.pyi +10 -3
- modal/image.py +25 -25
- modal/image.pyi +9 -9
- modal/mount.py +34 -24
- modal/mount.pyi +33 -7
- modal/network_file_system.py +14 -5
- modal/network_file_system.pyi +12 -2
- modal/object.pyi +35 -8
- modal/proxy.py +14 -6
- modal/proxy.pyi +10 -2
- modal/queue.py +14 -5
- modal/queue.pyi +12 -2
- modal/runner.py +54 -50
- modal/runner.pyi +4 -3
- modal/sandbox.py +21 -12
- modal/secret.py +34 -17
- modal/secret.pyi +12 -2
- modal/serving.py +7 -11
- modal/serving.pyi +7 -8
- modal/snapshot.py +11 -5
- modal/volume.py +25 -7
- modal/volume.pyi +2 -0
- {modal-1.2.2.dev22.dist-info → modal-1.2.2.dev31.dist-info}/METADATA +2 -2
- {modal-1.2.2.dev22.dist-info → modal-1.2.2.dev31.dist-info}/RECORD +52 -51
- modal_proto/api.proto +10 -0
- modal_proto/api_pb2.py +841 -838
- modal_proto/api_pb2.pyi +25 -2
- modal_version/__init__.py +1 -1
- {modal-1.2.2.dev22.dist-info → modal-1.2.2.dev31.dist-info}/WHEEL +0 -0
- {modal-1.2.2.dev22.dist-info → modal-1.2.2.dev31.dist-info}/entry_points.txt +0 -0
- {modal-1.2.2.dev22.dist-info → modal-1.2.2.dev31.dist-info}/licenses/LICENSE +0 -0
- {modal-1.2.2.dev22.dist-info → modal-1.2.2.dev31.dist-info}/top_level.txt +0 -0
modal/secret.py
CHANGED
|
@@ -10,6 +10,7 @@ from synchronicity import classproperty
|
|
|
10
10
|
|
|
11
11
|
from modal_proto import api_pb2
|
|
12
12
|
|
|
13
|
+
from ._load_context import LoadContext
|
|
13
14
|
from ._object import _get_environment_name, _Object, live_method
|
|
14
15
|
from ._resolver import Resolver
|
|
15
16
|
from ._runtime.execution_context import is_local
|
|
@@ -259,8 +260,10 @@ class _Secret(_Object, type_prefix="st"):
|
|
|
259
260
|
if not all(isinstance(v, str) for v in env_dict_filtered.values()):
|
|
260
261
|
raise InvalidError(ENV_DICT_WRONG_TYPE_ERR)
|
|
261
262
|
|
|
262
|
-
async def _load(
|
|
263
|
-
|
|
263
|
+
async def _load(
|
|
264
|
+
self: _Secret, resolver: Resolver, load_context: LoadContext, existing_object_id: Optional[str]
|
|
265
|
+
):
|
|
266
|
+
if load_context.app_id is not None:
|
|
264
267
|
object_creation_type = api_pb2.OBJECT_CREATION_TYPE_ANONYMOUS_OWNED_BY_APP
|
|
265
268
|
else:
|
|
266
269
|
object_creation_type = api_pb2.OBJECT_CREATION_TYPE_EPHEMERAL
|
|
@@ -268,21 +271,22 @@ class _Secret(_Object, type_prefix="st"):
|
|
|
268
271
|
req = api_pb2.SecretGetOrCreateRequest(
|
|
269
272
|
object_creation_type=object_creation_type,
|
|
270
273
|
env_dict=env_dict_filtered,
|
|
271
|
-
app_id=
|
|
272
|
-
environment_name=
|
|
274
|
+
app_id=load_context.app_id,
|
|
275
|
+
environment_name=load_context.environment_name,
|
|
273
276
|
)
|
|
274
277
|
try:
|
|
275
|
-
resp = await
|
|
278
|
+
resp = await load_context.client.stub.SecretGetOrCreate(req)
|
|
276
279
|
except GRPCError as exc:
|
|
277
280
|
if exc.status == Status.INVALID_ARGUMENT:
|
|
278
281
|
raise InvalidError(exc.message)
|
|
279
282
|
if exc.status == Status.FAILED_PRECONDITION:
|
|
280
283
|
raise InvalidError(exc.message)
|
|
281
284
|
raise
|
|
282
|
-
self._hydrate(resp.secret_id,
|
|
285
|
+
self._hydrate(resp.secret_id, load_context.client, resp.metadata)
|
|
283
286
|
|
|
284
287
|
rep = f"Secret.from_dict([{', '.join(env_dict.keys())}])"
|
|
285
|
-
|
|
288
|
+
# TODO: scoping - these should probably not be lazily hydrated without having an app and/or sandbox association
|
|
289
|
+
return _Secret._from_loader(_load, rep, hydrate_lazily=True, load_context_overrides=LoadContext.empty())
|
|
286
290
|
|
|
287
291
|
@staticmethod
|
|
288
292
|
def from_local_environ(
|
|
@@ -330,7 +334,9 @@ class _Secret(_Object, type_prefix="st"):
|
|
|
330
334
|
```
|
|
331
335
|
"""
|
|
332
336
|
|
|
333
|
-
async def _load(
|
|
337
|
+
async def _load(
|
|
338
|
+
self: _Secret, resolver: Resolver, load_context: LoadContext, existing_object_id: Optional[str]
|
|
339
|
+
):
|
|
334
340
|
try:
|
|
335
341
|
from dotenv import dotenv_values, find_dotenv
|
|
336
342
|
from dotenv.main import _walk_to_root
|
|
@@ -359,13 +365,15 @@ class _Secret(_Object, type_prefix="st"):
|
|
|
359
365
|
req = api_pb2.SecretGetOrCreateRequest(
|
|
360
366
|
object_creation_type=api_pb2.OBJECT_CREATION_TYPE_ANONYMOUS_OWNED_BY_APP,
|
|
361
367
|
env_dict=env_dict,
|
|
362
|
-
app_id=
|
|
368
|
+
app_id=load_context.app_id, # TODO: what if app_id isn't set here (e.g. .hydrate())
|
|
363
369
|
)
|
|
364
|
-
resp = await
|
|
370
|
+
resp = await load_context.client.stub.SecretGetOrCreate(req)
|
|
365
371
|
|
|
366
|
-
self._hydrate(resp.secret_id,
|
|
372
|
+
self._hydrate(resp.secret_id, load_context.client, resp.metadata)
|
|
367
373
|
|
|
368
|
-
return _Secret._from_loader(
|
|
374
|
+
return _Secret._from_loader(
|
|
375
|
+
_load, "Secret.from_dotenv()", hydrate_lazily=True, load_context_overrides=LoadContext.empty()
|
|
376
|
+
)
|
|
369
377
|
|
|
370
378
|
@staticmethod
|
|
371
379
|
def from_name(
|
|
@@ -376,6 +384,7 @@ class _Secret(_Object, type_prefix="st"):
|
|
|
376
384
|
required_keys: list[
|
|
377
385
|
str
|
|
378
386
|
] = [], # Optionally, a list of required environment variables (will be asserted server-side)
|
|
387
|
+
client: Optional[_Client] = None,
|
|
379
388
|
) -> "_Secret":
|
|
380
389
|
"""Reference a Secret by its name.
|
|
381
390
|
|
|
@@ -393,23 +402,31 @@ class _Secret(_Object, type_prefix="st"):
|
|
|
393
402
|
"""
|
|
394
403
|
warn_if_passing_namespace(namespace, "modal.Secret.from_name")
|
|
395
404
|
|
|
396
|
-
async def _load(
|
|
405
|
+
async def _load(
|
|
406
|
+
self: _Secret, resolver: Resolver, load_context: LoadContext, existing_object_id: Optional[str]
|
|
407
|
+
):
|
|
397
408
|
req = api_pb2.SecretGetOrCreateRequest(
|
|
398
409
|
deployment_name=name,
|
|
399
|
-
environment_name=
|
|
410
|
+
environment_name=load_context.environment_name,
|
|
400
411
|
required_keys=required_keys,
|
|
401
412
|
)
|
|
402
413
|
try:
|
|
403
|
-
response = await
|
|
414
|
+
response = await load_context.client.stub.SecretGetOrCreate(req)
|
|
404
415
|
except GRPCError as exc:
|
|
405
416
|
if exc.status == Status.NOT_FOUND:
|
|
406
417
|
raise NotFoundError(exc.message)
|
|
407
418
|
else:
|
|
408
419
|
raise
|
|
409
|
-
self._hydrate(response.secret_id,
|
|
420
|
+
self._hydrate(response.secret_id, load_context.client, response.metadata)
|
|
410
421
|
|
|
411
422
|
rep = _Secret._repr(name, environment_name)
|
|
412
|
-
return _Secret._from_loader(
|
|
423
|
+
return _Secret._from_loader(
|
|
424
|
+
_load,
|
|
425
|
+
rep,
|
|
426
|
+
hydrate_lazily=True,
|
|
427
|
+
name=name,
|
|
428
|
+
load_context_overrides=LoadContext(environment_name=environment_name, client=client),
|
|
429
|
+
)
|
|
413
430
|
|
|
414
431
|
@staticmethod
|
|
415
432
|
async def create_deployed(
|
modal/secret.pyi
CHANGED
|
@@ -423,7 +423,12 @@ class _Secret(modal._object._Object):
|
|
|
423
423
|
|
|
424
424
|
@staticmethod
|
|
425
425
|
def from_name(
|
|
426
|
-
name: str,
|
|
426
|
+
name: str,
|
|
427
|
+
*,
|
|
428
|
+
namespace=None,
|
|
429
|
+
environment_name: typing.Optional[str] = None,
|
|
430
|
+
required_keys: list[str] = [],
|
|
431
|
+
client: typing.Optional[modal.client._Client] = None,
|
|
427
432
|
) -> _Secret:
|
|
428
433
|
"""Reference a Secret by its name.
|
|
429
434
|
|
|
@@ -543,7 +548,12 @@ class Secret(modal.object.Object):
|
|
|
543
548
|
|
|
544
549
|
@staticmethod
|
|
545
550
|
def from_name(
|
|
546
|
-
name: str,
|
|
551
|
+
name: str,
|
|
552
|
+
*,
|
|
553
|
+
namespace=None,
|
|
554
|
+
environment_name: typing.Optional[str] = None,
|
|
555
|
+
required_keys: list[str] = [],
|
|
556
|
+
client: typing.Optional[modal.client.Client] = None,
|
|
547
557
|
) -> Secret:
|
|
548
558
|
"""Reference a Secret by its name.
|
|
549
559
|
|
modal/serving.py
CHANGED
|
@@ -4,13 +4,13 @@ import platform
|
|
|
4
4
|
from collections.abc import AsyncGenerator
|
|
5
5
|
from multiprocessing.context import SpawnProcess
|
|
6
6
|
from multiprocessing.synchronize import Event
|
|
7
|
-
from typing import TYPE_CHECKING, Optional
|
|
7
|
+
from typing import TYPE_CHECKING, Optional
|
|
8
8
|
|
|
9
9
|
from synchronicity.async_wrap import asynccontextmanager
|
|
10
10
|
|
|
11
11
|
from modal._output import OutputManager
|
|
12
12
|
|
|
13
|
-
from ._utils.async_utils import TaskContext, asyncify, synchronize_api
|
|
13
|
+
from ._utils.async_utils import TaskContext, asyncify, synchronize_api
|
|
14
14
|
from ._utils.logger import logger
|
|
15
15
|
from ._watcher import watch
|
|
16
16
|
from .cli.import_refs import ImportRef, import_app_from_ref
|
|
@@ -20,20 +20,16 @@ from .output import _get_output_manager, enable_output
|
|
|
20
20
|
from .runner import _run_app, serve_update
|
|
21
21
|
|
|
22
22
|
if TYPE_CHECKING:
|
|
23
|
-
|
|
24
|
-
else:
|
|
25
|
-
_App = TypeVar("_App")
|
|
23
|
+
import modal.app
|
|
26
24
|
|
|
27
25
|
|
|
28
26
|
def _run_serve(
|
|
29
27
|
import_ref: ImportRef, existing_app_id: str, is_ready: Event, environment_name: str, show_progress: bool
|
|
30
28
|
):
|
|
31
|
-
|
|
32
|
-
_app = import_app_from_ref(import_ref, base_cmd="modal serve")
|
|
33
|
-
blocking_app = synchronizer._translate_out(_app)
|
|
29
|
+
app = import_app_from_ref(import_ref, base_cmd="modal serve")
|
|
34
30
|
|
|
35
31
|
with enable_output(show_progress=show_progress):
|
|
36
|
-
serve_update(
|
|
32
|
+
serve_update(app, existing_app_id, is_ready, environment_name)
|
|
37
33
|
|
|
38
34
|
|
|
39
35
|
async def _restart_serve(
|
|
@@ -97,12 +93,12 @@ async def _run_watch_loop(
|
|
|
97
93
|
|
|
98
94
|
@asynccontextmanager
|
|
99
95
|
async def _serve_app(
|
|
100
|
-
app: "_App",
|
|
96
|
+
app: "modal.app._App",
|
|
101
97
|
import_ref: ImportRef,
|
|
102
98
|
*,
|
|
103
99
|
_watcher: Optional[AsyncGenerator[set[str], None]] = None, # for testing
|
|
104
100
|
environment_name: Optional[str] = None,
|
|
105
|
-
) -> AsyncGenerator["_App", None]:
|
|
101
|
+
) -> AsyncGenerator["modal.app._App", None]:
|
|
106
102
|
if environment_name is None:
|
|
107
103
|
environment_name = config.get("environment")
|
|
108
104
|
|
modal/serving.pyi
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import collections.abc
|
|
2
|
+
import modal.app
|
|
2
3
|
import modal.cli.import_refs
|
|
3
4
|
import multiprocessing.context
|
|
4
5
|
import multiprocessing.synchronize
|
|
@@ -6,8 +7,6 @@ import synchronicity.combined_types
|
|
|
6
7
|
import typing
|
|
7
8
|
import typing_extensions
|
|
8
9
|
|
|
9
|
-
_App = typing.TypeVar("_App")
|
|
10
|
-
|
|
11
10
|
def _run_serve(
|
|
12
11
|
import_ref: modal.cli.import_refs.ImportRef,
|
|
13
12
|
existing_app_id: str,
|
|
@@ -27,31 +26,31 @@ async def _run_watch_loop(
|
|
|
27
26
|
environment_name: str,
|
|
28
27
|
): ...
|
|
29
28
|
def _serve_app(
|
|
30
|
-
app: _App,
|
|
29
|
+
app: modal.app._App,
|
|
31
30
|
import_ref: modal.cli.import_refs.ImportRef,
|
|
32
31
|
*,
|
|
33
32
|
_watcher: typing.Optional[collections.abc.AsyncGenerator[set[str], None]] = None,
|
|
34
33
|
environment_name: typing.Optional[str] = None,
|
|
35
|
-
) -> typing.AsyncContextManager[_App]: ...
|
|
34
|
+
) -> typing.AsyncContextManager[modal.app._App]: ...
|
|
36
35
|
|
|
37
36
|
class __serve_app_spec(typing_extensions.Protocol):
|
|
38
37
|
def __call__(
|
|
39
38
|
self,
|
|
40
39
|
/,
|
|
41
|
-
app:
|
|
40
|
+
app: modal.app.App,
|
|
42
41
|
import_ref: modal.cli.import_refs.ImportRef,
|
|
43
42
|
*,
|
|
44
43
|
_watcher: typing.Optional[typing.Generator[set[str], None, None]] = None,
|
|
45
44
|
environment_name: typing.Optional[str] = None,
|
|
46
|
-
) -> synchronicity.combined_types.AsyncAndBlockingContextManager[
|
|
45
|
+
) -> synchronicity.combined_types.AsyncAndBlockingContextManager[modal.app.App]: ...
|
|
47
46
|
def aio(
|
|
48
47
|
self,
|
|
49
48
|
/,
|
|
50
|
-
app:
|
|
49
|
+
app: modal.app.App,
|
|
51
50
|
import_ref: modal.cli.import_refs.ImportRef,
|
|
52
51
|
*,
|
|
53
52
|
_watcher: typing.Optional[collections.abc.AsyncGenerator[set[str], None]] = None,
|
|
54
53
|
environment_name: typing.Optional[str] = None,
|
|
55
|
-
) -> typing.AsyncContextManager[
|
|
54
|
+
) -> typing.AsyncContextManager[modal.app.App]: ...
|
|
56
55
|
|
|
57
56
|
serve_app: __serve_app_spec
|
modal/snapshot.py
CHANGED
|
@@ -3,6 +3,7 @@ from typing import Optional
|
|
|
3
3
|
|
|
4
4
|
from modal_proto import api_pb2
|
|
5
5
|
|
|
6
|
+
from ._load_context import LoadContext
|
|
6
7
|
from ._object import _Object
|
|
7
8
|
from ._resolver import Resolver
|
|
8
9
|
from ._utils.async_utils import synchronize_api
|
|
@@ -23,14 +24,19 @@ class _SandboxSnapshot(_Object, type_prefix="sn"):
|
|
|
23
24
|
"""
|
|
24
25
|
Construct a `SandboxSnapshot` object from a sandbox snapshot ID.
|
|
25
26
|
"""
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
# TODO: remove this - from_id constructor should not do io:
|
|
28
|
+
client = client or await _Client.from_env()
|
|
28
29
|
|
|
29
|
-
async def _load(
|
|
30
|
-
|
|
30
|
+
async def _load(
|
|
31
|
+
self: _SandboxSnapshot, resolver: Resolver, load_context: LoadContext, existing_object_id: Optional[str]
|
|
32
|
+
):
|
|
33
|
+
await load_context.client.stub.SandboxSnapshotGet(
|
|
34
|
+
api_pb2.SandboxSnapshotGetRequest(snapshot_id=sandbox_snapshot_id)
|
|
35
|
+
)
|
|
31
36
|
|
|
32
37
|
rep = "SandboxSnapshot()"
|
|
33
|
-
obj = _SandboxSnapshot._from_loader(_load, rep)
|
|
38
|
+
obj = _SandboxSnapshot._from_loader(_load, rep, load_context_overrides=LoadContext(client=client))
|
|
39
|
+
# TODO: should this be a _Object._new_hydrated instead?
|
|
34
40
|
obj._hydrate(sandbox_snapshot_id, client, None)
|
|
35
41
|
|
|
36
42
|
return obj
|
modal/volume.py
CHANGED
|
@@ -33,6 +33,7 @@ import modal_proto.api_pb2
|
|
|
33
33
|
from modal.exception import AlreadyExistsError, InvalidError, NotFoundError, VolumeUploadTimeoutError
|
|
34
34
|
from modal_proto import api_pb2
|
|
35
35
|
|
|
36
|
+
from ._load_context import LoadContext
|
|
36
37
|
from ._object import (
|
|
37
38
|
EPHEMERAL_OBJECT_HEARTBEAT_SLEEP,
|
|
38
39
|
_get_environment_name,
|
|
@@ -362,11 +363,19 @@ class _Volume(_Object, type_prefix="vo"):
|
|
|
362
363
|
Added in v1.0.5.
|
|
363
364
|
"""
|
|
364
365
|
|
|
365
|
-
async def _load(
|
|
366
|
+
async def _load(
|
|
367
|
+
new_volume: _Volume, resolver: Resolver, load_context: LoadContext, existing_object_id: Optional[str]
|
|
368
|
+
):
|
|
366
369
|
new_volume._initialize_from_other(self)
|
|
367
370
|
new_volume._read_only = True
|
|
368
371
|
|
|
369
|
-
obj = _Volume._from_loader(
|
|
372
|
+
obj = _Volume._from_loader(
|
|
373
|
+
_load,
|
|
374
|
+
"Volume()",
|
|
375
|
+
hydrate_lazily=True,
|
|
376
|
+
deps=lambda: [self],
|
|
377
|
+
load_context_overrides=self._load_context_overrides,
|
|
378
|
+
)
|
|
370
379
|
return obj
|
|
371
380
|
|
|
372
381
|
def _hydrate_metadata(self, metadata: Optional[Message]):
|
|
@@ -408,6 +417,7 @@ class _Volume(_Object, type_prefix="vo"):
|
|
|
408
417
|
environment_name: Optional[str] = None,
|
|
409
418
|
create_if_missing: bool = False,
|
|
410
419
|
version: "typing.Optional[modal_proto.api_pb2.VolumeFsVersion.ValueType]" = None,
|
|
420
|
+
client: Optional[_Client] = None,
|
|
411
421
|
) -> "_Volume":
|
|
412
422
|
"""Reference a Volume by name, creating if necessary.
|
|
413
423
|
|
|
@@ -429,18 +439,26 @@ class _Volume(_Object, type_prefix="vo"):
|
|
|
429
439
|
check_object_name(name, "Volume")
|
|
430
440
|
warn_if_passing_namespace(namespace, "modal.Volume.from_name")
|
|
431
441
|
|
|
432
|
-
async def _load(
|
|
442
|
+
async def _load(
|
|
443
|
+
self: _Volume, resolver: Resolver, load_context: LoadContext, existing_object_id: Optional[str]
|
|
444
|
+
):
|
|
433
445
|
req = api_pb2.VolumeGetOrCreateRequest(
|
|
434
446
|
deployment_name=name,
|
|
435
|
-
environment_name=
|
|
447
|
+
environment_name=load_context.environment_name,
|
|
436
448
|
object_creation_type=(api_pb2.OBJECT_CREATION_TYPE_CREATE_IF_MISSING if create_if_missing else None),
|
|
437
449
|
version=version,
|
|
438
450
|
)
|
|
439
|
-
response = await
|
|
440
|
-
self._hydrate(response.volume_id,
|
|
451
|
+
response = await load_context.client.stub.VolumeGetOrCreate(req)
|
|
452
|
+
self._hydrate(response.volume_id, load_context.client, response.metadata)
|
|
441
453
|
|
|
442
454
|
rep = _Volume._repr(name, environment_name)
|
|
443
|
-
return _Volume._from_loader(
|
|
455
|
+
return _Volume._from_loader(
|
|
456
|
+
_load,
|
|
457
|
+
rep,
|
|
458
|
+
hydrate_lazily=True,
|
|
459
|
+
name=name,
|
|
460
|
+
load_context_overrides=LoadContext(client=client, environment_name=environment_name),
|
|
461
|
+
)
|
|
444
462
|
|
|
445
463
|
@classmethod
|
|
446
464
|
@asynccontextmanager
|
modal/volume.pyi
CHANGED
|
@@ -489,6 +489,7 @@ class _Volume(modal._object._Object):
|
|
|
489
489
|
environment_name: typing.Optional[str] = None,
|
|
490
490
|
create_if_missing: bool = False,
|
|
491
491
|
version: typing.Optional[int] = None,
|
|
492
|
+
client: typing.Optional[modal.client._Client] = None,
|
|
492
493
|
) -> _Volume:
|
|
493
494
|
"""Reference a Volume by name, creating if necessary.
|
|
494
495
|
|
|
@@ -806,6 +807,7 @@ class Volume(modal.object.Object):
|
|
|
806
807
|
environment_name: typing.Optional[str] = None,
|
|
807
808
|
create_if_missing: bool = False,
|
|
808
809
|
version: typing.Optional[int] = None,
|
|
810
|
+
client: typing.Optional[modal.client.Client] = None,
|
|
809
811
|
) -> Volume:
|
|
810
812
|
"""Reference a Volume by name, creating if necessary.
|
|
811
813
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: modal
|
|
3
|
-
Version: 1.2.2.
|
|
3
|
+
Version: 1.2.2.dev31
|
|
4
4
|
Summary: Python client library for Modal
|
|
5
5
|
Author-email: Modal Labs <support@modal.com>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -13,7 +13,7 @@ Classifier: Topic :: System :: Distributed Computing
|
|
|
13
13
|
Classifier: Operating System :: OS Independent
|
|
14
14
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Requires-Python:
|
|
16
|
+
Requires-Python: <3.14,>=3.9
|
|
17
17
|
Description-Content-Type: text/markdown
|
|
18
18
|
License-File: LICENSE
|
|
19
19
|
Requires-Dist: aiohttp
|
|
@@ -4,15 +4,16 @@ modal/_billing.py,sha256=C1jUN9f_1WqozSZAt9EOk1nImXUdiLrgFeeAu3R23cI,3012
|
|
|
4
4
|
modal/_clustered_functions.py,sha256=7amiOxErtlciWeBJBL2KvaxerUomJpTAJ3qElflFHQA,2884
|
|
5
5
|
modal/_clustered_functions.pyi,sha256=JmYwAGOLEnD5AF-gYF9O5tu-SgGjeoJz-X1j48b1Ijg,1157
|
|
6
6
|
modal/_container_entrypoint.py,sha256=zYk5mC8_IMx4kWnyFMRHKOrFRLBWchy6x-py3M8FYEw,28084
|
|
7
|
-
modal/_functions.py,sha256=
|
|
8
|
-
modal/_grpc_client.py,sha256=
|
|
7
|
+
modal/_functions.py,sha256=1qzvFuLSgcW4PkowKiC4uDhfhb113jNMI1R3zDThlJo,91482
|
|
8
|
+
modal/_grpc_client.py,sha256=KZcggVNvFL5jRQkFumshMppeFHMbaZI9Dzf13run6As,6083
|
|
9
9
|
modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
|
|
10
|
+
modal/_load_context.py,sha256=OL-rzWl-q2YNGe5nryInNsN1FaaUGOA3sOGlMqw0h9U,3730
|
|
10
11
|
modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
|
|
11
|
-
modal/_object.py,sha256=
|
|
12
|
+
modal/_object.py,sha256=fb_FDjWLDnytVvuBsW4hudDKEer46hiUBNoLs3okOtk,12838
|
|
12
13
|
modal/_output.py,sha256=eikFqD82RA8uwF-LLVzO-A9EtmoVLnqg0X5nZE5hdLA,26852
|
|
13
14
|
modal/_partial_function.py,sha256=t0yOVrYrDUdCJt7eVNyBS-atnUtjO56izKB3rDuN17Q,38573
|
|
14
15
|
modal/_pty.py,sha256=E58MQ8d5-wkbMatRKpQR-G9FdbCRcZGiZxOpGy__VuY,1481
|
|
15
|
-
modal/_resolver.py,sha256=
|
|
16
|
+
modal/_resolver.py,sha256=j_nhDXxT2gbmNEx5b0B8An4ZEt4EKdVLncIj8zF9-nU,7241
|
|
16
17
|
modal/_resources.py,sha256=NMAp0GCLutiZI4GuKSIVnRHVlstoD3hNGUabjTUtzf4,1794
|
|
17
18
|
modal/_serialization.py,sha256=_3-Z9jSoleDnv2HghH2kfo0m_WG8Iajs1wop1Iqnam8,26341
|
|
18
19
|
modal/_traceback.py,sha256=muKP7RbAXq74UGwkaVIdOxDdfDug0UcDKr9fe4LL3m8,6503
|
|
@@ -20,69 +21,69 @@ modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
|
|
|
20
21
|
modal/_tunnel.pyi,sha256=rvC7USR2BcKkbZIeCJXwf7-UfGE-LPLjKsGNiK7Lxa4,13366
|
|
21
22
|
modal/_type_manager.py,sha256=DWjgmjYJuOagw2erin506UUbG2H5UzZCFEekS-7hmfA,9087
|
|
22
23
|
modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
|
|
23
|
-
modal/app.py,sha256=
|
|
24
|
-
modal/app.pyi,sha256=
|
|
24
|
+
modal/app.py,sha256=wdcdEoWsP7UIH2TnZj39ZiHrQhwX-CH_tqa6yuKL6Xg,55057
|
|
25
|
+
modal/app.pyi,sha256=5XnLb07hnNS5mI7MpLTHSFrDVJbh7lYqHOdU0jz7lnk,50683
|
|
25
26
|
modal/billing.py,sha256=zmQ3bcCJlwa4KD1IA_QgdWpm1pn13c-7qfy79iEauYI,195
|
|
26
27
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
|
27
28
|
modal/client.py,sha256=tPzihC7R9WtP56k6dyPKi5GLGdLEHdMA6YUj9Ry5G8o,14409
|
|
28
|
-
modal/client.pyi,sha256=
|
|
29
|
-
modal/cloud_bucket_mount.py,sha256=
|
|
30
|
-
modal/cloud_bucket_mount.pyi,sha256=
|
|
31
|
-
modal/cls.py,sha256=
|
|
32
|
-
modal/cls.pyi,sha256=
|
|
29
|
+
modal/client.pyi,sha256=hY8EdKK9jmeJFFIL5qAdCVscW9iX2npr-dd8n3csMJg,13094
|
|
30
|
+
modal/cloud_bucket_mount.py,sha256=Ff8UFG_Z0HUzcRAAfo1jvDwzaNgiX_btTFOHL7CGyI8,6016
|
|
31
|
+
modal/cloud_bucket_mount.pyi,sha256=vXusGMOUk9HjCs4lhxteuCK4xLQclPfugGWKo7LECEA,7539
|
|
32
|
+
modal/cls.py,sha256=TSkc7XOdfYcMkVfXBHZzhqgnQTUYA8RPdv-DySIT9L0,41883
|
|
33
|
+
modal/cls.pyi,sha256=p8Unbfr0yUdAzYYnD7erSRO7dH-87HkAg4oAn6srBzA,27424
|
|
33
34
|
modal/config.py,sha256=xUbw_ETdR7S3guj4dyzqdd9EYwRRht3aGYQRogZbi1o,13050
|
|
34
35
|
modal/container_process.py,sha256=KG2ZkFOWe2KN1b8dFSBLBoW5pWoRxBzJ20MLhDTicJs,16749
|
|
35
36
|
modal/container_process.pyi,sha256=xMKr-VbQsydS8AbhAys9UTpHHnH2QRyINpPtPG7NwmI,8373
|
|
36
|
-
modal/dict.py,sha256=
|
|
37
|
-
modal/dict.pyi,sha256=
|
|
38
|
-
modal/environments.py,sha256=
|
|
39
|
-
modal/environments.pyi,sha256=
|
|
37
|
+
modal/dict.py,sha256=Omfmj3fUyg7ijTI33Z97geyK7MW8T31LRm-N7pZqSwU,21582
|
|
38
|
+
modal/dict.pyi,sha256=wemd-RTH3__HUsF2zfcVojb2ixE0-Xm0RVKOh5ZSDYE,31835
|
|
39
|
+
modal/environments.py,sha256=wMiMNpPkvIl_BdxRb81CY9Djzhczp_y4GEYKWp0JyBc,6135
|
|
40
|
+
modal/environments.pyi,sha256=bMIxvwahckgaolGD3-hP2iovRHDXewvgbVs_nx4ze0o,3808
|
|
40
41
|
modal/exception.py,sha256=HrvKRJO4EMwkoqa77PBeZyrGIgEZ-yqLIA10cqZndqI,5768
|
|
41
42
|
modal/file_io.py,sha256=Whs3QSl3pQbSoLzSRIIWfK4XyP-kwgyZmWgx3bhJ9u0,20933
|
|
42
43
|
modal/file_io.pyi,sha256=xtO6Glf_BFwDE7QiQQo24QqcMf_Vv-iz7WojcGVlLBU,15932
|
|
43
44
|
modal/file_pattern_matcher.py,sha256=A_Kdkej6q7YQyhM_2-BvpFmPqJ0oHb54B6yf9VqvPVE,8116
|
|
44
45
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
|
45
|
-
modal/functions.pyi,sha256=
|
|
46
|
+
modal/functions.pyi,sha256=9t4rVUEKJcK-_9mnr7IBtCLOyAesa6p_EJjsdSf_hU0,38146
|
|
46
47
|
modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
|
|
47
|
-
modal/image.py,sha256=
|
|
48
|
-
modal/image.pyi,sha256=
|
|
48
|
+
modal/image.py,sha256=wdgZlQqewK8Tj95uGOq7s8YZ8wFxMhKZtzJFTN-RT0Y,108328
|
|
49
|
+
modal/image.pyi,sha256=grkqK9BfyKDXmJYNme-lGa0O3u7pOU5GifyLOAhG3sc,78202
|
|
49
50
|
modal/io_streams.py,sha256=Lc-id7HvW-ffJKSoN1xQxf37pHARNkr4re2HKyGpKy4,29316
|
|
50
51
|
modal/io_streams.pyi,sha256=P9kvQhXmh9fxQNGI2DtuFnnZ_9MJQ4ZiqOpDP2-QWUU,16746
|
|
51
|
-
modal/mount.py,sha256=
|
|
52
|
-
modal/mount.pyi,sha256=
|
|
53
|
-
modal/network_file_system.py,sha256=
|
|
54
|
-
modal/network_file_system.pyi,sha256=
|
|
52
|
+
modal/mount.py,sha256=ifRV6PIU4VZJH4S00E4ILPQ2T7obzTHS_yBdyODSmO8,33298
|
|
53
|
+
modal/mount.pyi,sha256=3_Xftyk2lEMQbt8UzmUW5N77eb7t9EdbczPwj9wue9o,15828
|
|
54
|
+
modal/network_file_system.py,sha256=23GUYz2DZ5kCzlUrdWBq1siBse6fP_CeGt2Lo9xHkR8,13598
|
|
55
|
+
modal/network_file_system.pyi,sha256=A0YyIpxToPTRi-x5DQWtlWPgzw9qHGauvwW7jTcw6y0,15554
|
|
55
56
|
modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
|
|
56
|
-
modal/object.pyi,sha256=
|
|
57
|
+
modal/object.pyi,sha256=fl-jJ0xYzYyIYBcU7OKubpLOeJHdtREKGYTzByq4x1I,7913
|
|
57
58
|
modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
|
|
58
59
|
modal/parallel_map.py,sha256=VAfhkgCKFXtpba01Dvq7kc-xg5nlP-AdvmJW0LoyfD8,68670
|
|
59
60
|
modal/parallel_map.pyi,sha256=3sbWnV2ijA2KCh4BV8oNUJMd7ryemJu7NvwsqyUlvho,15588
|
|
60
61
|
modal/partial_function.py,sha256=aIdlGfTjjgqY6Fpr-biCjvRU9W542_S5N2xkNN_rYGM,1127
|
|
61
62
|
modal/partial_function.pyi,sha256=M7aHV6sbCc7R28D4Tk6Agr39m6R0emrXvm8IfWflt1o,14023
|
|
62
|
-
modal/proxy.py,sha256=
|
|
63
|
-
modal/proxy.pyi,sha256=
|
|
63
|
+
modal/proxy.py,sha256=zIe_ZMAeRu9dgU9FKwZqpvCFTNwLLwIC0Vra4ZZfz1I,1737
|
|
64
|
+
modal/proxy.pyi,sha256=05HihJqRRJydYQSjLMYs9-mxdvzq4OUpKg3PAfrBppo,1597
|
|
64
65
|
modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
|
-
modal/queue.py,sha256=
|
|
66
|
-
modal/queue.pyi,sha256=
|
|
66
|
+
modal/queue.py,sha256=ABXb1eaGBfl5lKh-O60B0wNi0rT7lZ8gCntMOA4piLQ,25801
|
|
67
|
+
modal/queue.pyi,sha256=XD-VwX9m-lH8Rc4KZXmvuaNZ8f5Sip1clQSTJPdUBZo,37445
|
|
67
68
|
modal/retries.py,sha256=IvNLDM0f_GLUDD5VgEDoN09C88yoxSrCquinAuxT1Sc,5205
|
|
68
|
-
modal/runner.py,sha256=
|
|
69
|
-
modal/runner.pyi,sha256=
|
|
69
|
+
modal/runner.py,sha256=EkEAzZNJyYQa2TNHwCEP0-y_almtOfrfiUoYWv27JGg,25813
|
|
70
|
+
modal/runner.pyi,sha256=HYBi04nUrZN9-L-cTlvDDHFiJS-N6M3usKk1_QzGnpc,8736
|
|
70
71
|
modal/running_app.py,sha256=v61mapYNV1-O-Uaho5EfJlryMLvIT9We0amUOSvSGx8,1188
|
|
71
|
-
modal/sandbox.py,sha256=
|
|
72
|
+
modal/sandbox.py,sha256=onH4cjq8SAbMhzn7eVOOkYzr-6odBatrCQBX6_R7qjk,50374
|
|
72
73
|
modal/sandbox.pyi,sha256=XWH57XZIouFGeE-CidVYXdI_l5w-kjCzIhqN4kd2y8Q,57428
|
|
73
74
|
modal/schedule.py,sha256=ng0g0AqNY5GQI9KhkXZQ5Wam5G42glbkqVQsNpBtbDE,3078
|
|
74
75
|
modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
|
|
75
|
-
modal/secret.py,sha256
|
|
76
|
-
modal/secret.pyi,sha256=
|
|
77
|
-
modal/serving.py,sha256=
|
|
78
|
-
modal/serving.pyi,sha256=
|
|
79
|
-
modal/snapshot.py,sha256=
|
|
76
|
+
modal/secret.py,sha256=-W_XuzvmGElDmLv6RawHPski-ZOufCLDhhzR1IF2ayo,18865
|
|
77
|
+
modal/secret.pyi,sha256=LvlFGun262nWO1WbhllpZE4JBkV8-tyXgIjgYX3eXBA,20682
|
|
78
|
+
modal/serving.py,sha256=rfzj23Q4hPSMpc3vj_cQg3awkZULu4hLtRs83cOEB-w,4291
|
|
79
|
+
modal/serving.pyi,sha256=eNqF_bhO_JQ0EDpqvSjSUdNs48vv7AcPXinp7GEs5wI,1966
|
|
80
|
+
modal/snapshot.py,sha256=HiXLbJAZiQv2cEQ4ur8M3AVbI_ZSL-eoteVfCL77lUw,1640
|
|
80
81
|
modal/snapshot.pyi,sha256=0q83hlmWxAhDu8xwZyL5VmYh0i8Tigf7S60or2k30L8,1682
|
|
81
82
|
modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
|
|
82
83
|
modal/token_flow.py,sha256=tLvBE9OT50p8AnYYh4b5MvBMQc1vV1-6C0GsmyFDfxw,7626
|
|
83
84
|
modal/token_flow.pyi,sha256=eirYjyqbRiT3GCKMIPHJPpkvBTu8WxDKqSHehWaJI_4,2533
|
|
84
|
-
modal/volume.py,sha256=
|
|
85
|
-
modal/volume.pyi,sha256=
|
|
85
|
+
modal/volume.py,sha256=gVGp1gvME3n1fALSXgLSRdSMbMiihJKEX5GV599orh8,52432
|
|
86
|
+
modal/volume.pyi,sha256=sBnG6t4aPjH09vlo63S-k4915uz5VNycE-JPgUjwDs8,53335
|
|
86
87
|
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
87
88
|
modal/_runtime/asgi.py,sha256=AOcduIlijmlxhXVWo7AIUhigo-bqm6nDkHj4Q4JLy6o,22607
|
|
88
89
|
modal/_runtime/container_io_manager.py,sha256=MGURW9xa89j6GXzLlZDe9onMvfb-E69HrTyJUPaVXjw,52051
|
|
@@ -100,7 +101,7 @@ modal/_utils/blob_utils.py,sha256=NoAWDqYQsqAjievWmH5mCFSXA6XxQStDt9otT-Nh7_g,22
|
|
|
100
101
|
modal/_utils/bytes_io_segment_payload.py,sha256=vaXPq8b52-x6G2hwE7SrjS58pg_aRm7gV3bn3yjmTzQ,4261
|
|
101
102
|
modal/_utils/deprecation.py,sha256=-Bgg7jZdcJU8lROy18YyVnQYbM8hue-hVmwJqlWAGH0,5504
|
|
102
103
|
modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,3722
|
|
103
|
-
modal/_utils/function_utils.py,sha256=
|
|
104
|
+
modal/_utils/function_utils.py,sha256=wL2AA8aEftxCBATPStHgKDRPxrFjPAv-rHt0Wb7y9Ts,28629
|
|
104
105
|
modal/_utils/git_utils.py,sha256=qtUU6JAttF55ZxYq51y55OR58B0tDPZsZWK5dJe6W5g,3182
|
|
105
106
|
modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
|
|
106
107
|
modal/_utils/grpc_utils.py,sha256=9KOQ3JW6DEmsi0lqve0YkTMU23u9AmWIyvLWJVA3TKc,11515
|
|
@@ -135,14 +136,14 @@ modal/cli/app.py,sha256=rbuAG92my-1eZN0olk6p2eD4oBnyBliUsrCOUW-U-9k,7832
|
|
|
135
136
|
modal/cli/cluster.py,sha256=BLcKDpwpDmlqE2UC4V0qNpJKiQ-ZXfI9g_SE7u6vnIU,3347
|
|
136
137
|
modal/cli/config.py,sha256=7xgglsSf5pKfE7ZLz-uZf9S11NBuNbUkUbcZ5nFk8Y0,1721
|
|
137
138
|
modal/cli/container.py,sha256=meFH-T_Bdyd7a9HjClzGCgYuPq0KhWs_HUUsSW12HjM,3686
|
|
138
|
-
modal/cli/dict.py,sha256=
|
|
139
|
+
modal/cli/dict.py,sha256=8aVWjxdmsPznYNMNYYkKHtrJSEREGc_H21g1hTHa0FM,4686
|
|
139
140
|
modal/cli/entry_point.py,sha256=7nGM8zob80L5iyLCf_TEmjyinKojquW3_O_V0wDnK-U,4809
|
|
140
141
|
modal/cli/environment.py,sha256=LGBq8RVQjfBH3EWz8QgmYe19UO66JKSDNxOXMUjw7JM,4285
|
|
141
142
|
modal/cli/import_refs.py,sha256=X59Z5JwgliRO6C-cIFto2Pr7o3SwlZMKQPKA0aI4ZK4,13927
|
|
142
143
|
modal/cli/launch.py,sha256=oJKGWjTJiXQTdw-SUiCmCQ76bY_8nlzJMUMu0zew0zs,6435
|
|
143
144
|
modal/cli/network_file_system.py,sha256=MO4YHBdwokXaVv95W4ucmxvi-Q2IpiMrxWLOBhEED5c,8029
|
|
144
145
|
modal/cli/profile.py,sha256=g8X6tFFK9ccKyu2he9Yu19WLSLNdztzECgmIV__XJFs,3257
|
|
145
|
-
modal/cli/queues.py,sha256
|
|
146
|
+
modal/cli/queues.py,sha256=S5dqk6lEd_2fJolHqoN9iRs6EkeTa0k7KqJWBBGS23k,6170
|
|
146
147
|
modal/cli/run.py,sha256=3_UF2Vdye_KEgY8JzBBomt0i944cCJx96RfNbeAEPDo,25783
|
|
147
148
|
modal/cli/secret.py,sha256=zkCztov8c4x8CI8G0EoyieUfv9XLQQtVXV8xeMLK-Os,8044
|
|
148
149
|
modal/cli/token.py,sha256=NAmQzKBfEHkcldWKeFxAVIqQBoo1RTp7_A4yc7-8qM0,1911
|
|
@@ -154,10 +155,10 @@ modal/cli/programs/run_jupyter.py,sha256=IJw8nds8Cjl9j4dxBqMGxhz-bIyVX0kle7jbt8H
|
|
|
154
155
|
modal/cli/programs/run_marimo.py,sha256=QlCGPkwQ0XLajt2LtujR_BGsRV1AZ3OCUgZxkkM1lug,2893
|
|
155
156
|
modal/cli/programs/vscode.py,sha256=E1aJPU7b8RWWj-JX71DifsCoLYsCAnre7lATiBJjUms,3386
|
|
156
157
|
modal/experimental/__init__.py,sha256=sCwNbBLcR2t-jhrpwtMAPGKt2WNqXBg0xkNZdyB-6CE,13940
|
|
157
|
-
modal/experimental/flash.py,sha256=
|
|
158
|
+
modal/experimental/flash.py,sha256=RKS3X3h4tY_mOLcMzbRs5tNCLPFL01dBAhCZSqCeBgA,26675
|
|
158
159
|
modal/experimental/flash.pyi,sha256=uwinKAYxpunNNfBj58FP88DXb535Qik4F6tnJKPAIwQ,14696
|
|
159
160
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
|
160
|
-
modal-1.2.2.
|
|
161
|
+
modal-1.2.2.dev31.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
|
161
162
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
162
163
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
|
163
164
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
|
@@ -165,10 +166,10 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
|
|
|
165
166
|
modal_docs/mdmd/mdmd.py,sha256=tUTImNd4UMFk1opkaw8J672gX8AkBO5gbY2S_NMxsxs,7140
|
|
166
167
|
modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
|
|
167
168
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
168
|
-
modal_proto/api.proto,sha256=
|
|
169
|
+
modal_proto/api.proto,sha256=_S8S_Ci838KDw8dqf4fmhVOE5_apAuctufrX56ze7bk,109030
|
|
169
170
|
modal_proto/api_grpc.py,sha256=vwC-GjejDKWbG5jRN3rkU8WBSqQ8Pdj-T2E2xAECAUw,134411
|
|
170
|
-
modal_proto/api_pb2.py,sha256=
|
|
171
|
-
modal_proto/api_pb2.pyi,sha256=
|
|
171
|
+
modal_proto/api_pb2.py,sha256=9D9DrafONt1rKOa8o-Qa-4Et7AGk8_XwV9kYXuja4g8,381073
|
|
172
|
+
modal_proto/api_pb2.pyi,sha256=vAuI2gGBbKY2APIcWitUCSjdw7uM92zU9FL32i6R75s,534109
|
|
172
173
|
modal_proto/api_pb2_grpc.py,sha256=Hqw9jcbhpr-W6jsfog_tGU55ouZjITxGvA-DGNBqOLA,289714
|
|
173
174
|
modal_proto/api_pb2_grpc.pyi,sha256=QLJ58ANCx147HeGJva58h0MTCLIDs9JmVjrx8bDdwlg,67776
|
|
174
175
|
modal_proto/modal_api_grpc.py,sha256=MqaBZB2ZqYj6XTIgI_p5dOPjt9gKT4pAJNd_WXR3W84,21295
|
|
@@ -185,10 +186,10 @@ modal_proto/task_command_router_pb2.py,sha256=_pD2ZpU0bNzhwBdzmLoLyLtAtftI_Agxwn
|
|
|
185
186
|
modal_proto/task_command_router_pb2.pyi,sha256=EyDgXPLr7alqjXYERV8w_MPuO404x0uCppmSkrfE9IE,14589
|
|
186
187
|
modal_proto/task_command_router_pb2_grpc.py,sha256=uEQ0HdrCp8v-9bB5yIic9muA8spCShLHY6Bz9cCgOUE,10114
|
|
187
188
|
modal_proto/task_command_router_pb2_grpc.pyi,sha256=s3Yxsrawdj4nr8vqQqsAxyX6ilWaGbdECy425KKbLIA,3301
|
|
188
|
-
modal_version/__init__.py,sha256=
|
|
189
|
+
modal_version/__init__.py,sha256=BsqagvnCuIGsPhQjsCROvTtbZNa8sPTNoVYGTscS9uw,121
|
|
189
190
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
|
190
|
-
modal-1.2.2.
|
|
191
|
-
modal-1.2.2.
|
|
192
|
-
modal-1.2.2.
|
|
193
|
-
modal-1.2.2.
|
|
194
|
-
modal-1.2.2.
|
|
191
|
+
modal-1.2.2.dev31.dist-info/METADATA,sha256=eHc4WZUCof9mgGVCIIcv874vclj0oqXSpp7Of1bdF7M,2490
|
|
192
|
+
modal-1.2.2.dev31.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
193
|
+
modal-1.2.2.dev31.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
|
194
|
+
modal-1.2.2.dev31.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
|
195
|
+
modal-1.2.2.dev31.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED
|
@@ -849,6 +849,12 @@ message CloudBucketMount {
|
|
|
849
849
|
GCP = 3;
|
|
850
850
|
}
|
|
851
851
|
|
|
852
|
+
enum MetadataTTLType {
|
|
853
|
+
METADATA_TTL_TYPE_UNSPECIFIED = 0;
|
|
854
|
+
METADATA_TTL_TYPE_MINIMAL = 1;
|
|
855
|
+
METADATA_TTL_TYPE_INDEFINITE = 2;
|
|
856
|
+
}
|
|
857
|
+
|
|
852
858
|
string bucket_name = 1;
|
|
853
859
|
string mount_path = 2;
|
|
854
860
|
string credentials_secret_id = 3;
|
|
@@ -859,6 +865,10 @@ message CloudBucketMount {
|
|
|
859
865
|
optional string key_prefix = 8;
|
|
860
866
|
optional string oidc_auth_role_arn = 9;
|
|
861
867
|
bool force_path_style = 10;
|
|
868
|
+
oneof metadata_ttl_oneof {
|
|
869
|
+
MetadataTTLType metadata_ttl_type = 11;
|
|
870
|
+
uint64 metadata_ttl_seconds = 12;
|
|
871
|
+
}
|
|
862
872
|
}
|
|
863
873
|
|
|
864
874
|
message ClusterGetRequest {
|