modal 0.68.11__py3-none-any.whl → 0.68.31__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/__init__.py +2 -0
- modal/_ipython.py +3 -13
- modal/_runtime/asgi.py +4 -0
- modal/_runtime/user_code_imports.py +13 -18
- modal/_utils/blob_utils.py +27 -92
- modal/_utils/bytes_io_segment_payload.py +97 -0
- modal/_utils/deprecation.py +44 -0
- modal/_utils/hash_utils.py +38 -9
- modal/_utils/http_utils.py +19 -10
- modal/_utils/{pattern_matcher.py → pattern_utils.py} +1 -70
- modal/_utils/shell_utils.py +11 -5
- modal/app.py +11 -31
- modal/app.pyi +3 -4
- modal/cli/app.py +1 -1
- modal/cli/run.py +25 -5
- modal/client.py +1 -1
- modal/client.pyi +2 -2
- modal/config.py +2 -1
- modal/container_process.py +2 -1
- modal/dict.py +2 -1
- modal/exception.py +0 -54
- modal/file_io.py +54 -7
- modal/file_io.pyi +18 -8
- modal/file_pattern_matcher.py +154 -0
- modal/functions.py +2 -8
- modal/functions.pyi +5 -1
- modal/image.py +106 -10
- modal/image.pyi +36 -6
- modal/mount.py +49 -9
- modal/mount.pyi +19 -4
- modal/network_file_system.py +6 -2
- modal/partial_function.py +10 -1
- modal/partial_function.pyi +8 -0
- modal/queue.py +2 -1
- modal/runner.py +2 -7
- modal/sandbox.py +23 -13
- modal/sandbox.pyi +21 -0
- modal/serving.py +1 -1
- modal/volume.py +7 -2
- {modal-0.68.11.dist-info → modal-0.68.31.dist-info}/METADATA +1 -1
- {modal-0.68.11.dist-info → modal-0.68.31.dist-info}/RECORD +49 -46
- modal_proto/api.proto +8 -0
- modal_proto/api_pb2.py +781 -745
- modal_proto/api_pb2.pyi +65 -3
- modal_version/_version_generated.py +1 -1
- {modal-0.68.11.dist-info → modal-0.68.31.dist-info}/LICENSE +0 -0
- {modal-0.68.11.dist-info → modal-0.68.31.dist-info}/WHEEL +0 -0
- {modal-0.68.11.dist-info → modal-0.68.31.dist-info}/entry_points.txt +0 -0
- {modal-0.68.11.dist-info → modal-0.68.31.dist-info}/top_level.txt +0 -0
modal/queue.py
CHANGED
@@ -13,10 +13,11 @@ from modal_proto import api_pb2
|
|
13
13
|
from ._resolver import Resolver
|
14
14
|
from ._serialization import deserialize, serialize
|
15
15
|
from ._utils.async_utils import TaskContext, synchronize_api, warn_if_generator_is_not_consumed
|
16
|
+
from ._utils.deprecation import deprecation_error
|
16
17
|
from ._utils.grpc_utils import retry_transient_errors
|
17
18
|
from ._utils.name_utils import check_object_name
|
18
19
|
from .client import _Client
|
19
|
-
from .exception import InvalidError, RequestSizeError
|
20
|
+
from .exception import InvalidError, RequestSizeError
|
20
21
|
from .object import EPHEMERAL_OBJECT_HEARTBEAT_SLEEP, _get_environment_name, _Object, live_method, live_method_gen
|
21
22
|
|
22
23
|
|
modal/runner.py
CHANGED
@@ -19,19 +19,14 @@ from ._resolver import Resolver
|
|
19
19
|
from ._runtime.execution_context import is_local
|
20
20
|
from ._traceback import print_server_warnings, traceback_contains_remote_call
|
21
21
|
from ._utils.async_utils import TaskContext, gather_cancel_on_exc, synchronize_api
|
22
|
+
from ._utils.deprecation import deprecation_error
|
22
23
|
from ._utils.grpc_utils import retry_transient_errors
|
23
24
|
from ._utils.name_utils import check_object_name, is_valid_tag
|
24
25
|
from .client import HEARTBEAT_INTERVAL, HEARTBEAT_TIMEOUT, _Client
|
25
26
|
from .cls import _Cls
|
26
27
|
from .config import config, logger
|
27
28
|
from .environments import _get_environment_cached
|
28
|
-
from .exception import
|
29
|
-
InteractiveTimeoutError,
|
30
|
-
InvalidError,
|
31
|
-
RemoteError,
|
32
|
-
_CliUserExecutionError,
|
33
|
-
deprecation_error,
|
34
|
-
)
|
29
|
+
from .exception import InteractiveTimeoutError, InvalidError, RemoteError, _CliUserExecutionError
|
35
30
|
from .functions import _Function
|
36
31
|
from .object import _get_environment_name, _Object
|
37
32
|
from .output import _get_output_manager, enable_output
|
modal/sandbox.py
CHANGED
@@ -19,19 +19,13 @@ from ._location import parse_cloud_provider
|
|
19
19
|
from ._resolver import Resolver
|
20
20
|
from ._resources import convert_fn_config_to_resources_config
|
21
21
|
from ._utils.async_utils import synchronize_api
|
22
|
+
from ._utils.deprecation import deprecation_error
|
22
23
|
from ._utils.grpc_utils import retry_transient_errors
|
23
24
|
from ._utils.mount_utils import validate_network_file_systems, validate_volumes
|
24
25
|
from .client import _Client
|
25
26
|
from .config import config
|
26
27
|
from .container_process import _ContainerProcess
|
27
|
-
from .exception import
|
28
|
-
ExecutionError,
|
29
|
-
InvalidError,
|
30
|
-
SandboxTerminatedError,
|
31
|
-
SandboxTimeoutError,
|
32
|
-
deprecation_error,
|
33
|
-
deprecation_warning,
|
34
|
-
)
|
28
|
+
from .exception import ExecutionError, InvalidError, SandboxTerminatedError, SandboxTimeoutError
|
35
29
|
from .file_io import _FileIO
|
36
30
|
from .gpu import GPU_T
|
37
31
|
from .image import _Image
|
@@ -284,13 +278,14 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
284
278
|
app_id = _App._container_app.app_id
|
285
279
|
app_client = _App._container_app.client
|
286
280
|
else:
|
287
|
-
|
281
|
+
arglist = ", ".join(repr(s) for s in entrypoint_args)
|
282
|
+
deprecation_error(
|
288
283
|
(2024, 9, 14),
|
289
|
-
"Creating a `Sandbox` without an `App` is deprecated.\n"
|
290
|
-
"You may pass in an `App` object, or reference one by name with `App.lookup`:\n"
|
284
|
+
"Creating a `Sandbox` without an `App` is deprecated.\n\n"
|
285
|
+
"You may pass in an `App` object, or reference one by name with `App.lookup`:\n\n"
|
291
286
|
"```\n"
|
292
|
-
"app = modal.App.lookup('
|
293
|
-
"modal.Sandbox.create(
|
287
|
+
"app = modal.App.lookup('sandbox-app', create_if_missing=True)\n"
|
288
|
+
f"sb = modal.Sandbox.create({arglist}, app=app)\n"
|
294
289
|
"```",
|
295
290
|
)
|
296
291
|
|
@@ -567,6 +562,21 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
567
562
|
task_id = await self._get_task_id()
|
568
563
|
return await _FileIO.create(path, mode, self._client, task_id)
|
569
564
|
|
565
|
+
async def ls(self, path: str) -> list[str]:
|
566
|
+
"""List the contents of a directory in the Sandbox."""
|
567
|
+
task_id = await self._get_task_id()
|
568
|
+
return await _FileIO.ls(path, self._client, task_id)
|
569
|
+
|
570
|
+
async def mkdir(self, path: str, parents: bool = False) -> None:
|
571
|
+
"""Create a new directory in the Sandbox."""
|
572
|
+
task_id = await self._get_task_id()
|
573
|
+
return await _FileIO.mkdir(path, self._client, task_id, parents)
|
574
|
+
|
575
|
+
async def rm(self, path: str, recursive: bool = False) -> None:
|
576
|
+
"""Remove a file or directory in the Sandbox."""
|
577
|
+
task_id = await self._get_task_id()
|
578
|
+
return await _FileIO.rm(path, self._client, task_id, recursive)
|
579
|
+
|
570
580
|
@property
|
571
581
|
def stdout(self) -> _StreamReader[str]:
|
572
582
|
"""
|
modal/sandbox.pyi
CHANGED
@@ -128,6 +128,9 @@ class _Sandbox(modal.object._Object):
|
|
128
128
|
async def open(self, path: str, mode: _typeshed.OpenTextMode) -> modal.file_io._FileIO[str]: ...
|
129
129
|
@typing.overload
|
130
130
|
async def open(self, path: str, mode: _typeshed.OpenBinaryMode) -> modal.file_io._FileIO[bytes]: ...
|
131
|
+
async def ls(self, path: str) -> list[str]: ...
|
132
|
+
async def mkdir(self, path: str, parents: bool = False) -> None: ...
|
133
|
+
async def rm(self, path: str, recursive: bool = False) -> None: ...
|
131
134
|
@property
|
132
135
|
def stdout(self) -> modal.io_streams._StreamReader[str]: ...
|
133
136
|
@property
|
@@ -367,6 +370,24 @@ class Sandbox(modal.object.Object):
|
|
367
370
|
|
368
371
|
open: __open_spec
|
369
372
|
|
373
|
+
class __ls_spec(typing_extensions.Protocol):
|
374
|
+
def __call__(self, path: str) -> list[str]: ...
|
375
|
+
async def aio(self, path: str) -> list[str]: ...
|
376
|
+
|
377
|
+
ls: __ls_spec
|
378
|
+
|
379
|
+
class __mkdir_spec(typing_extensions.Protocol):
|
380
|
+
def __call__(self, path: str, parents: bool = False) -> None: ...
|
381
|
+
async def aio(self, path: str, parents: bool = False) -> None: ...
|
382
|
+
|
383
|
+
mkdir: __mkdir_spec
|
384
|
+
|
385
|
+
class __rm_spec(typing_extensions.Protocol):
|
386
|
+
def __call__(self, path: str, recursive: bool = False) -> None: ...
|
387
|
+
async def aio(self, path: str, recursive: bool = False) -> None: ...
|
388
|
+
|
389
|
+
rm: __rm_spec
|
390
|
+
|
370
391
|
@property
|
371
392
|
def stdout(self) -> modal.io_streams.StreamReader[str]: ...
|
372
393
|
@property
|
modal/serving.py
CHANGED
@@ -11,12 +11,12 @@ from synchronicity.async_wrap import asynccontextmanager
|
|
11
11
|
from modal._output import OutputManager
|
12
12
|
|
13
13
|
from ._utils.async_utils import TaskContext, asyncify, synchronize_api, synchronizer
|
14
|
+
from ._utils.deprecation import deprecation_error
|
14
15
|
from ._utils.logger import logger
|
15
16
|
from ._watcher import watch
|
16
17
|
from .cli.import_refs import import_app
|
17
18
|
from .client import _Client
|
18
19
|
from .config import config
|
19
|
-
from .exception import deprecation_error
|
20
20
|
from .output import _get_output_manager, enable_output
|
21
21
|
from .runner import _run_app, serve_update
|
22
22
|
|
modal/volume.py
CHANGED
@@ -24,7 +24,7 @@ from grpclib import GRPCError, Status
|
|
24
24
|
from synchronicity.async_wrap import asynccontextmanager
|
25
25
|
|
26
26
|
import modal_proto.api_pb2
|
27
|
-
from modal.exception import VolumeUploadTimeoutError
|
27
|
+
from modal.exception import VolumeUploadTimeoutError
|
28
28
|
from modal_proto import api_pb2
|
29
29
|
|
30
30
|
from ._resolver import Resolver
|
@@ -36,6 +36,7 @@ from ._utils.blob_utils import (
|
|
36
36
|
get_file_upload_spec_from_fileobj,
|
37
37
|
get_file_upload_spec_from_path,
|
38
38
|
)
|
39
|
+
from ._utils.deprecation import deprecation_error, deprecation_warning
|
39
40
|
from ._utils.grpc_utils import retry_transient_errors
|
40
41
|
from ._utils.name_utils import check_object_name
|
41
42
|
from .client import _Client
|
@@ -632,7 +633,11 @@ class _VolumeUploadContextManager:
|
|
632
633
|
logger.debug(f"Creating blob file for {file_spec.source_description} ({file_spec.size} bytes)")
|
633
634
|
with file_spec.source() as fp:
|
634
635
|
blob_id = await blob_upload_file(
|
635
|
-
fp,
|
636
|
+
fp,
|
637
|
+
self._client.stub,
|
638
|
+
functools.partial(self._progress_cb, progress_task_id),
|
639
|
+
sha256_hex=file_spec.sha256_hex,
|
640
|
+
md5_hex=file_spec.md5_hex,
|
636
641
|
)
|
637
642
|
logger.debug(f"Uploading blob file {file_spec.source_description} as {remote_filename}")
|
638
643
|
request2 = api_pb2.MountPutFileRequest(data_blob_id=blob_id, sha256_hex=file_spec.sha256_hex)
|
@@ -1,9 +1,9 @@
|
|
1
|
-
modal/__init__.py,sha256=
|
1
|
+
modal/__init__.py,sha256=3NJLLHb0TRc2tc68kf8NHzORx38GbtbZvPEWDWrQ6N4,2234
|
2
2
|
modal/__main__.py,sha256=scYhGFqh8OJcVDo-VOxIT6CCwxOgzgflYWMnIZiMRqE,2871
|
3
3
|
modal/_clustered_functions.py,sha256=kTf-9YBXY88NutC1akI-gCbvf01RhMPCw-zoOI_YIUE,2700
|
4
4
|
modal/_clustered_functions.pyi,sha256=vllkegc99A0jrUOWa8mdlSbdp6uz36TsHhGxysAOpaQ,771
|
5
5
|
modal/_container_entrypoint.py,sha256=wk10vA5vRZZsVwQ0yINOLd0i-NwH7x6XbhTslumvGjo,28910
|
6
|
-
modal/_ipython.py,sha256=
|
6
|
+
modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
|
7
7
|
modal/_location.py,sha256=S3lSxIU3h9HkWpkJ3Pwo0pqjIOSB1fjeSgUsY3x7eec,1202
|
8
8
|
modal/_output.py,sha256=0fWX_KQwhER--U81ys16CL-pA5A-LN20C0EZjElKGJQ,25410
|
9
9
|
modal/_proxy_tunnel.py,sha256=gnKyCfmVB7x2d1A6c-JDysNIP3kEFxmXzhcXhPrzPn0,1906
|
@@ -15,88 +15,91 @@ modal/_traceback.py,sha256=orZ7rsCk9ekV7ZoFjZTH_H00azCypwRKaLh0MZb1dR8,4898
|
|
15
15
|
modal/_tunnel.py,sha256=o-jJhS4vQ6-XswDhHcJWGMZZmD03SC0e9i8fEu1JTjo,6310
|
16
16
|
modal/_tunnel.pyi,sha256=JmmDYAy9F1FpgJ_hWx0xkom2nTOFQjn4mTPYlU3PFo4,1245
|
17
17
|
modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
|
18
|
-
modal/app.py,sha256=
|
19
|
-
modal/app.pyi,sha256=
|
18
|
+
modal/app.py,sha256=nt25_TXlzG4Kw_Ev4cgGaQnJaMnXN9-23tUh8dtR5xk,45454
|
19
|
+
modal/app.pyi,sha256=3h538rJ0Z2opldsKLuQhDnvop05TfzNG-Uw_n9rEHa4,25197
|
20
20
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
21
|
-
modal/client.py,sha256=
|
22
|
-
modal/client.pyi,sha256=
|
21
|
+
modal/client.py,sha256=JAnd4-GCN093BwkvOFAK5a6iy5ycxofjpUncMxlrIMw,15253
|
22
|
+
modal/client.pyi,sha256=qaus2Fah5EEsfJGBXrjVzb-fCwJ459fjrWGkXVDQQGs,7280
|
23
23
|
modal/cloud_bucket_mount.py,sha256=G7T7jWLD0QkmrfKR75mSTwdUZ2xNfj7pkVqb4ipmxmI,5735
|
24
24
|
modal/cloud_bucket_mount.pyi,sha256=CEi7vrH3kDUF4LAy4qP6tfImy2UJuFRcRbsgRNM1wo8,1403
|
25
25
|
modal/cls.py,sha256=ONnrfZ2vPcaY2JuKypPiBA9eTiyg8Qfg-Ull40nn9zs,30956
|
26
26
|
modal/cls.pyi,sha256=uoOEANXgCFT9Au3e-_bU98M6ZfAgQWF5ngj8f4c6qpY,8225
|
27
|
-
modal/config.py,sha256=
|
28
|
-
modal/container_process.py,sha256=
|
27
|
+
modal/config.py,sha256=BzhZYUUwOmvVwf6x5kf0ywMC257s648dmuhsnB6g3gk,11041
|
28
|
+
modal/container_process.py,sha256=WTqLn01dJPVkPpwR_0w_JH96ceN5mV4TGtiu1ZR2RRA,6108
|
29
29
|
modal/container_process.pyi,sha256=dqtqBmyRpXXpRrDooESL6WBVU_1Rh6OG-66P2Hk9E5U,2666
|
30
|
-
modal/dict.py,sha256=
|
30
|
+
modal/dict.py,sha256=put8iNVOoifRa7vOvMThZ2_NeHiDc474xBCsGCOZ8I4,12653
|
31
31
|
modal/dict.pyi,sha256=2cYgOqBxYZih4BYgMV0c3rNPuxYR6-cB1GBXzFkHA5c,7265
|
32
32
|
modal/environments.py,sha256=5cgA-zbm6ngKLsRA19zSOgtgo9-BarJK3FJK0BiF2Lo,6505
|
33
33
|
modal/environments.pyi,sha256=XalNpiPkAtHWAvOU2Cotq0ozmtl-Jv0FDsR8h9mr27Q,3521
|
34
|
-
modal/exception.py,sha256=
|
34
|
+
modal/exception.py,sha256=GEV6xMnVnkle0gsFZVLB4B7cUMyw8HzVDvAvPr34ZV4,5185
|
35
35
|
modal/experimental.py,sha256=jFuNbwrNHos47viMB9q-cHJSvf2RDxDdoEcss9plaZE,2302
|
36
|
-
modal/file_io.py,sha256=
|
37
|
-
modal/file_io.pyi,sha256=
|
38
|
-
modal/
|
39
|
-
modal/functions.
|
36
|
+
modal/file_io.py,sha256=pDOFNQU5m-x-k3oJauck4fOp3bZ55Vc-_LvSaN5_Bow,16465
|
37
|
+
modal/file_io.pyi,sha256=GMhCCRyMftXYI3HqI9EdGPOx70CbCNi-VC5Sfy5TYnc,7631
|
38
|
+
modal/file_pattern_matcher.py,sha256=V6P74Vc7LAuBFe_uepIaZmoDJiuAvqjFibe0GcMJwxo,5119
|
39
|
+
modal/functions.py,sha256=ig7FjNHrzsYzIgpagLGphQYLybvtx_4m0Exp0ribO1c,67669
|
40
|
+
modal/functions.pyi,sha256=dsA-f4Jc-VvXWaKcPyzUSgDCBQ5ujKv55AL7rtkSCT4,25213
|
40
41
|
modal/gpu.py,sha256=r4rL6uH3UJIQthzYvfWauXNyh01WqCPtKZCmmSX1fd4,6881
|
41
|
-
modal/image.py,sha256
|
42
|
-
modal/image.pyi,sha256=
|
42
|
+
modal/image.py,sha256=-swOPK80OXnFuhxoG3tT2zmJhas8yO-lr0jkOebBdKQ,82858
|
43
|
+
modal/image.pyi,sha256=Ryd3x_Bic7j40DPe0MveGqqwvNtum2qA-6lUd5lnHvk,25503
|
43
44
|
modal/io_streams.py,sha256=QkQiizKRzd5bnbKQsap31LJgBYlAnj4-XkV_50xPYX0,15079
|
44
45
|
modal/io_streams.pyi,sha256=bCCVSxkMcosYd8O3PQDDwJw7TQ8JEcnYonLJ5t27TQs,4804
|
45
|
-
modal/mount.py,sha256=
|
46
|
-
modal/mount.pyi,sha256=
|
47
|
-
modal/network_file_system.py,sha256=
|
46
|
+
modal/mount.py,sha256=QKvrgpS_FMqrGdoyVZWeWnkNpQeDSLpuiwZFSGgRp_Y,29017
|
47
|
+
modal/mount.pyi,sha256=a0WAFmT7kZvoq_ZAu6R6fwxiEUR6QSmeC_avUpJKGWM,10495
|
48
|
+
modal/network_file_system.py,sha256=6H-TMvU5pet448aSnqzmOOFOgv-IVjjEiVFeYT68Qc4,14631
|
48
49
|
modal/network_file_system.pyi,sha256=8mHKXuRkxHPazF6ljIW7g4M5aVqLSl6eKUPLgDCug5c,7901
|
49
50
|
modal/object.py,sha256=HZs3N59C6JxlMuPQWJYvrWV1FEEkH9txUovVDorVUbs,9763
|
50
51
|
modal/object.pyi,sha256=MO78H9yFSE5i1gExPEwyyQzLdlshkcGHN1aQ0ylyvq0,8802
|
51
52
|
modal/output.py,sha256=N0xf4qeudEaYrslzdAl35VKV8rapstgIM2e9wO8_iy0,1967
|
52
53
|
modal/parallel_map.py,sha256=4aoMXIrlG3wl5Ifk2YDNOQkXsGRsm6Xbfm6WtJ2t3WY,16002
|
53
54
|
modal/parallel_map.pyi,sha256=pOhT0P3DDYlwLx0fR3PTsecA7DI8uOdXC1N8i-ZkyOY,2328
|
54
|
-
modal/partial_function.py,sha256=
|
55
|
-
modal/partial_function.pyi,sha256=
|
55
|
+
modal/partial_function.py,sha256=s87ILMvIfQY0gwGzRcdfLog-nqeyrl04kaQpj-w1gmg,29232
|
56
|
+
modal/partial_function.pyi,sha256=pO6kf8i5HVsZ7CF0z_KkzLk4Aeq7NJhFJ_VNIycRXaU,9260
|
56
57
|
modal/proxy.py,sha256=ZrOsuQP7dSZFq1OrIxalNnt0Zvsnp1h86Th679sSL40,1417
|
57
58
|
modal/proxy.pyi,sha256=UvygdOYneLTuoDY6hVaMNCyZ947Tmx93IdLjErUqkvM,368
|
58
59
|
modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
59
|
-
modal/queue.py,sha256=
|
60
|
+
modal/queue.py,sha256=KJmY2kakfZZWwkYqTJ5maUwCty-Ijo3co1P5gHuzFDg,18689
|
60
61
|
modal/queue.pyi,sha256=di3ownBw4jc6d4X7ygXtbpjlUMOK69qyaD3lVsJbpoM,9900
|
61
62
|
modal/retries.py,sha256=HKR2Q9aNPWkMjQ5nwobqYTuZaSuw0a8lI2zrtY5IW98,5230
|
62
|
-
modal/runner.py,sha256=
|
63
|
+
modal/runner.py,sha256=qfkB0OM97kb_-oP-D5KPj_jUwfd8ePUA3R_zLkjSTBQ,24586
|
63
64
|
modal/runner.pyi,sha256=BvMS1ZVzWSn8B8q0KnIZOJKPkN5L-i5b-USbV6SWWHQ,5177
|
64
65
|
modal/running_app.py,sha256=CshNvGDJtagOdKW54uYjY8HY73j2TpnsL9jkPFZAsfA,560
|
65
|
-
modal/sandbox.py,sha256=
|
66
|
-
modal/sandbox.pyi,sha256=
|
66
|
+
modal/sandbox.py,sha256=YJaAeeBiyf3k1loHpLyJ3kwobEhS0Jnr7voC9venNJA,28049
|
67
|
+
modal/sandbox.pyi,sha256=k8_vHjN3oigxSCF13Cm2HfcSHuliGuSb8ryd3CGqwoA,19815
|
67
68
|
modal/schedule.py,sha256=0ZFpKs1bOxeo5n3HZjoL7OE2ktsb-_oGtq-WJEPO4tY,2615
|
68
69
|
modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
|
69
70
|
modal/secret.py,sha256=Y1WgybQIkfkxdzH9CQ1h-Wd1DJJpzipigMhyyvSxTww,10007
|
70
71
|
modal/secret.pyi,sha256=B_9QWiLvTwSopLsAHre-qSB2VS74cqfhtbA4GS8faQY,2957
|
71
|
-
modal/serving.py,sha256=
|
72
|
+
modal/serving.py,sha256=MnVuTsimN05LfNPxuJZ4sr5s1_BPUkIsOP_VC-bkp78,4464
|
72
73
|
modal/serving.pyi,sha256=ncV-9jY_vZYFnGs5ZnMb3ffrX8LmcLdIMHBC56xRbtE,1711
|
73
74
|
modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
|
74
75
|
modal/token_flow.py,sha256=LcgSce_MSQ2p7j55DPwpVRpiAtCDe8GRSEwzO7muNR8,6774
|
75
76
|
modal/token_flow.pyi,sha256=gOYtYujrWt_JFZeiI8EmfahXPx5GCR5Na-VaPQcWgEY,1937
|
76
|
-
modal/volume.py,sha256=
|
77
|
+
modal/volume.py,sha256=m25hZctl3zV5EMRM5BTd8mVDe66Scysbt__z6IXXa5g,29347
|
77
78
|
modal/volume.pyi,sha256=St0mDiaojfep6Bs4sBbkRJmeacYHF6lh6FKOWGmheHA,11182
|
78
79
|
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
79
|
-
modal/_runtime/asgi.py,sha256=
|
80
|
+
modal/_runtime/asgi.py,sha256=H68KAN8bz8Zp7EcRl2c_ite1Y3kP1MHvjQAf-uUpCx8,21691
|
80
81
|
modal/_runtime/container_io_manager.py,sha256=ctgyNFiHjq1brCrabXmlurkAXjnrCeWPRvTVa735vRw,44215
|
81
82
|
modal/_runtime/execution_context.py,sha256=E6ofm6j1POXGPxS841X3V7JU6NheVb8OkQc7JpLq4Kg,2712
|
82
83
|
modal/_runtime/telemetry.py,sha256=T1RoAGyjBDr1swiM6pPsGRSITm7LI5FDK18oNXxY08U,5163
|
83
|
-
modal/_runtime/user_code_imports.py,sha256=
|
84
|
+
modal/_runtime/user_code_imports.py,sha256=n4CQOojzSdf0jwSKSy6MEnVX3IWl3t3Dq54-x9VS2Ds,14663
|
84
85
|
modal/_utils/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
|
85
86
|
modal/_utils/app_utils.py,sha256=88BT4TPLWfYAQwKTHcyzNQRHg8n9B-QE2UyJs96iV-0,108
|
86
87
|
modal/_utils/async_utils.py,sha256=9ubwMkwiDB4gzOYG2jL9j7Fs-5dxHjcifZe3r7JRg-k,25091
|
87
|
-
modal/_utils/blob_utils.py,sha256=
|
88
|
+
modal/_utils/blob_utils.py,sha256=N66LtZI8PpCkZ7maA7GLW5CAmYUoNJdG-GjaAUR4_NQ,14509
|
89
|
+
modal/_utils/bytes_io_segment_payload.py,sha256=uunxVJS4PE1LojF_UpURMzVK9GuvmYWRqQo_bxEj5TU,3385
|
90
|
+
modal/_utils/deprecation.py,sha256=9yHc2_bIuvivx-oYOzg-kj6JIolPdxXBlEkOVgnZcFA,1556
|
88
91
|
modal/_utils/function_utils.py,sha256=LgcveUUb4XU_dWxtqgK_3ujZBvS3cGVzcDOkljyFZ2w,25066
|
89
92
|
modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
|
90
93
|
modal/_utils/grpc_utils.py,sha256=PPB5ay-vXencXNIWPVw5modr3EH7gfq2QPcO5YJ1lMU,7737
|
91
|
-
modal/_utils/hash_utils.py,sha256=
|
92
|
-
modal/_utils/http_utils.py,sha256=
|
94
|
+
modal/_utils/hash_utils.py,sha256=zg3J6OGxTFGSFri1qQ12giDz90lWk8bzaxCTUCRtiX4,3034
|
95
|
+
modal/_utils/http_utils.py,sha256=yeTFsXYr0rYMEhB7vBP7audG9Uc7OLhzKBANFDZWVt0,2451
|
93
96
|
modal/_utils/logger.py,sha256=ePzdudrtx9jJCjuO6-bcL_kwUJfi4AwloUmIiNtqkY0,1330
|
94
97
|
modal/_utils/mount_utils.py,sha256=J-FRZbPQv1i__Tob-FIpbB1oXWpFLAwZiB4OCiJpFG0,3206
|
95
98
|
modal/_utils/name_utils.py,sha256=TW1iyJedvDNPEJ5UVp93u8xuD5J2gQL_CUt1mgov_aI,1939
|
96
99
|
modal/_utils/package_utils.py,sha256=LcL2olGN4xaUzu2Tbv-C-Ft9Qp6bsLxEfETOAVd-mjU,2073
|
97
|
-
modal/_utils/
|
100
|
+
modal/_utils/pattern_utils.py,sha256=ZUffaECfe2iYBhH6cvCB-0-UWhmEBTZEl_TwG_So3ag,6714
|
98
101
|
modal/_utils/rand_pb_testing.py,sha256=NYM8W6HF-6_bzxJCAj4ITvItZYrclacEZlBhTptOT_Q,3845
|
99
|
-
modal/_utils/shell_utils.py,sha256=
|
102
|
+
modal/_utils/shell_utils.py,sha256=hWHzv730Br2Xyj6cGPiMZ-198Z3RZuOu3pDXhFSZ22c,2157
|
100
103
|
modal/_vendor/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
101
104
|
modal/_vendor/a2wsgi_wsgi.py,sha256=Q1AsjpV_Q_vzQsz_cSqmP9jWzsGsB-ARFU6vpQYml8k,21878
|
102
105
|
modal/_vendor/cloudpickle.py,sha256=Loq12qo7PBNbE4LFVEW6BdMMwY10MG94EOW1SCpcnQ0,55217
|
@@ -104,7 +107,7 @@ modal/_vendor/tblib.py,sha256=g1O7QUDd3sDoLd8YPFltkXkih7r_fyZOjgmGuligv3s,9722
|
|
104
107
|
modal/cli/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
|
105
108
|
modal/cli/_download.py,sha256=t6BXZwjTd9MgznDvbsV8rp0FZWggdzC-lUAGZU4xx1g,3984
|
106
109
|
modal/cli/_traceback.py,sha256=QlLa_iw3fAOA-mqCqjS8qAxvNT48J3YY3errtVVc2cw,7316
|
107
|
-
modal/cli/app.py,sha256=
|
110
|
+
modal/cli/app.py,sha256=HkwI38FZxx66jxiur4o_DRN3uwyO3L8hqgyo8oXKZxc,7726
|
108
111
|
modal/cli/config.py,sha256=pXPLmX0bIoV57rQNqIPK7V-yllj-GPRY4jiBO_EklGg,1667
|
109
112
|
modal/cli/container.py,sha256=nCySVD10VJPzmX3ghTsGmpxdYeVYYMW6ofjsyt2gQcM,3667
|
110
113
|
modal/cli/dict.py,sha256=gwX4ZBsrr0dpWf_B5_5GN_ealcVzpcGyvY24dEY4y3Y,4455
|
@@ -115,7 +118,7 @@ modal/cli/launch.py,sha256=uyI-ouGvYRjHLGxGQ2lYBZq32BiRT1i0L8ksz5iy7K8,2935
|
|
115
118
|
modal/cli/network_file_system.py,sha256=3QbAxKEoRc6RCMsYE3OS-GcuiI4GMkz_wAKsIBbN1qg,8186
|
116
119
|
modal/cli/profile.py,sha256=rLXfjJObfPNjaZvNfHGIKqs7y9bGYyGe-K7V0w-Ni0M,3110
|
117
120
|
modal/cli/queues.py,sha256=MIh2OsliNE2QeL1erubfsRsNuG4fxqcqWA2vgIfQ4Mg,4494
|
118
|
-
modal/cli/run.py,sha256=
|
121
|
+
modal/cli/run.py,sha256=W9isFpIQTNCxKafVfI_PUjxNrDMl5V8N9y15F3wtPXk,17831
|
119
122
|
modal/cli/secret.py,sha256=uQpwYrMY98iMCWeZOQTcktOYhPTZ8IHnyealDc2CZqo,4206
|
120
123
|
modal/cli/token.py,sha256=mxSgOWakXG6N71hQb1ko61XAR9ZGkTMZD-Txn7gmTac,1924
|
121
124
|
modal/cli/utils.py,sha256=hZmjyzcPjDnQSkLvycZD2LhGdcsfdZshs_rOU78EpvI,3717
|
@@ -144,10 +147,10 @@ modal_global_objects/mounts/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0
|
|
144
147
|
modal_global_objects/mounts/modal_client_package.py,sha256=W0E_yShsRojPzWm6LtIQqNVolapdnrZkm2hVEQuZK_4,767
|
145
148
|
modal_global_objects/mounts/python_standalone.py,sha256=SL_riIxpd8mP4i4CLDCWiFFNj0Ltknm9c_UIGfX5d60,1836
|
146
149
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
147
|
-
modal_proto/api.proto,sha256=
|
150
|
+
modal_proto/api.proto,sha256=Fdc1QR9kxirCiZW7o8fslrYd8vk-gR2dWOWj2uCbkHk,79553
|
148
151
|
modal_proto/api_grpc.py,sha256=DveC4ejFYEhCLiWbQShnmY31_FWGYU675Bmr7nHhsgs,101342
|
149
|
-
modal_proto/api_pb2.py,sha256=
|
150
|
-
modal_proto/api_pb2.pyi,sha256=
|
152
|
+
modal_proto/api_pb2.py,sha256=EwN_R_HDiLP0s61rpSRQ5r6Kwof_XiPtH-lqeX6gC9I,292335
|
153
|
+
modal_proto/api_pb2.pyi,sha256=Ggl_mfNlUQWPQaxDUMqeC4Rglf1xXSf4Kx8vIFPiXp8,390741
|
151
154
|
modal_proto/api_pb2_grpc.py,sha256=2PEP6JPOoTw2rDC5qYjLNuumP68ZwAouRhCoayisAhY,219162
|
152
155
|
modal_proto/api_pb2_grpc.pyi,sha256=uWtCxVEd0cFpOZ1oOGfZNO7Dv45OP4kp09jMnNyx9D4,51098
|
153
156
|
modal_proto/modal_api_grpc.py,sha256=-8mLby_om5MYo6yu1zA_hqhz0yLsQW7k2YWBVZW1iVs,13546
|
@@ -161,10 +164,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
|
|
161
164
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
162
165
|
modal_version/__init__.py,sha256=RT6zPoOdFO99u5Wcxxaoir4ZCuPTbQ22cvzFAXl3vUY,470
|
163
166
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
164
|
-
modal_version/_version_generated.py,sha256=
|
165
|
-
modal-0.68.
|
166
|
-
modal-0.68.
|
167
|
-
modal-0.68.
|
168
|
-
modal-0.68.
|
169
|
-
modal-0.68.
|
170
|
-
modal-0.68.
|
167
|
+
modal_version/_version_generated.py,sha256=C9Vb_Q2jwc4JqXMWby_tAoXXSlH3UtNjbodotQ6GwxI,149
|
168
|
+
modal-0.68.31.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
169
|
+
modal-0.68.31.dist-info/METADATA,sha256=DBQM-eDw-6sWtFeC6cVRZvEPULWr_Grn0eYDBEcUmaM,2329
|
170
|
+
modal-0.68.31.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
171
|
+
modal-0.68.31.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
172
|
+
modal-0.68.31.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
|
173
|
+
modal-0.68.31.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED
@@ -360,6 +360,12 @@ message AppHeartbeatRequest {
|
|
360
360
|
string app_id = 1;
|
361
361
|
}
|
362
362
|
|
363
|
+
message AppLayout {
|
364
|
+
repeated Object objects = 1;
|
365
|
+
map<string, string> function_ids = 2; // tag -> function id
|
366
|
+
map<string, string> class_ids = 3; // tag -> class id
|
367
|
+
}
|
368
|
+
|
363
369
|
message AppListRequest {
|
364
370
|
string environment_name = 1;
|
365
371
|
}
|
@@ -710,6 +716,7 @@ message ContainerArguments { // This is used to pass data from the worker to th
|
|
710
716
|
string runtime = 11;
|
711
717
|
string environment_name = 13;
|
712
718
|
optional string checkpoint_id = 14;
|
719
|
+
AppLayout app_layout = 15;
|
713
720
|
}
|
714
721
|
|
715
722
|
message ContainerCheckpointRequest {
|
@@ -2677,6 +2684,7 @@ message WebhookConfig {
|
|
2677
2684
|
uint32 web_server_port = 7;
|
2678
2685
|
float web_server_startup_timeout = 8;
|
2679
2686
|
bool web_endpoint_docs = 9;
|
2687
|
+
bool requires_proxy_auth = 10;
|
2680
2688
|
}
|
2681
2689
|
|
2682
2690
|
message WorkspaceNameLookupResponse {
|