modal 0.68.24__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/image.pyi CHANGED
@@ -120,7 +120,14 @@ class _Image(modal.object._Object):
120
120
  def copy_local_file(
121
121
  self, local_path: typing.Union[str, pathlib.Path], remote_path: typing.Union[str, pathlib.Path] = "./"
122
122
  ) -> _Image: ...
123
- def add_local_python_source(self, *module_names: str, copy: bool = False) -> _Image: ...
123
+ def add_local_python_source(
124
+ self,
125
+ *module_names: str,
126
+ copy: bool = False,
127
+ ignore: typing.Union[
128
+ collections.abc.Sequence[str], typing.Callable[[pathlib.Path], bool]
129
+ ] = modal.file_pattern_matcher.NON_PYTHON_FILES,
130
+ ) -> _Image: ...
124
131
  def copy_local_dir(
125
132
  self,
126
133
  local_path: typing.Union[str, pathlib.Path],
@@ -385,7 +392,14 @@ class Image(modal.object.Object):
385
392
  def copy_local_file(
386
393
  self, local_path: typing.Union[str, pathlib.Path], remote_path: typing.Union[str, pathlib.Path] = "./"
387
394
  ) -> Image: ...
388
- def add_local_python_source(self, *module_names: str, copy: bool = False) -> Image: ...
395
+ def add_local_python_source(
396
+ self,
397
+ *module_names: str,
398
+ copy: bool = False,
399
+ ignore: typing.Union[
400
+ collections.abc.Sequence[str], typing.Callable[[pathlib.Path], bool]
401
+ ] = modal.file_pattern_matcher.NON_PYTHON_FILES,
402
+ ) -> Image: ...
389
403
  def copy_local_dir(
390
404
  self,
391
405
  local_path: typing.Union[str, pathlib.Path],
@@ -15,11 +15,12 @@ from modal_proto import api_pb2
15
15
  from ._resolver import Resolver
16
16
  from ._utils.async_utils import TaskContext, aclosing, async_map, sync_or_async_iter, synchronize_api
17
17
  from ._utils.blob_utils import LARGE_FILE_LIMIT, blob_iter, blob_upload_file
18
+ from ._utils.deprecation import deprecation_error
18
19
  from ._utils.grpc_utils import retry_transient_errors
19
20
  from ._utils.hash_utils import get_sha256_hex
20
21
  from ._utils.name_utils import check_object_name
21
22
  from .client import _Client
22
- from .exception import InvalidError, deprecation_error
23
+ from .exception import InvalidError
23
24
  from .object import (
24
25
  EPHEMERAL_OBJECT_HEARTBEAT_SLEEP,
25
26
  _get_environment_name,
modal/partial_function.py CHANGED
@@ -15,9 +15,10 @@ import typing_extensions
15
15
  from modal_proto import api_pb2
16
16
 
17
17
  from ._utils.async_utils import synchronize_api, synchronizer
18
+ from ._utils.deprecation import deprecation_error, deprecation_warning
18
19
  from ._utils.function_utils import callable_has_non_self_non_default_params, callable_has_non_self_params
19
20
  from .config import logger
20
- from .exception import InvalidError, deprecation_error, deprecation_warning
21
+ from .exception import InvalidError
21
22
  from .functions import _Function
22
23
 
23
24
  MAX_MAX_BATCH_SIZE = 1000
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, deprecation_error
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
- deprecation_warning(
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('my-app', create_if_missing=True)\n"
293
- "modal.Sandbox.create('echo', 'hi', app=app)\n"
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, deprecation_error, deprecation_warning
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modal
3
- Version: 0.68.24
3
+ Version: 0.68.31
4
4
  Summary: Python client library for Modal
5
5
  Author: Modal Labs
6
6
  Author-email: support@modal.com
@@ -15,66 +15,66 @@ 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=EJ7FUN6rWnSwLJoYJh8nmKg_t-8hdN8_rt0OrkP7JvQ,46084
19
- modal/app.pyi,sha256=BE5SlR5tRECuc6-e2lUuOknDdov3zxgZ4N0AsLb5ZVQ,25270
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
21
  modal/client.py,sha256=JAnd4-GCN093BwkvOFAK5a6iy5ycxofjpUncMxlrIMw,15253
22
- modal/client.pyi,sha256=cGr_WLDO9rrvE2HfYkrzrN6U-XZ_tBEwDBBS1akt94M,7280
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=1KhNJkjYsJkX1V8RPPdRYPlM2HE-ZZs0JVSxbiXjmrw,11010
28
- modal/container_process.py,sha256=zDxCLk6KfJT1G9FfNtjom6gekBQ46op3TWepT7-Hkbg,6077
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=RmJlEwFJOdSfAYcVa50hbbFccV8e7BvC5tc5g1HXF-c,12622
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=dRK789TD1HaB63kHhu1yZuvS2vP_Vua3iLMBtA6dgqk,7128
34
+ modal/exception.py,sha256=GEV6xMnVnkle0gsFZVLB4B7cUMyw8HzVDvAvPr34ZV4,5185
35
35
  modal/experimental.py,sha256=jFuNbwrNHos47viMB9q-cHJSvf2RDxDdoEcss9plaZE,2302
36
- modal/file_io.py,sha256=q8s872qf6Ntdw7dPogDlpYbixxGkwCA0BlQn2UUoVhY,14637
37
- modal/file_io.pyi,sha256=pfkmJiaBpMCZReE6-KCjYOzB1dVtyYDYokJoYX8ARK4,6932
38
- modal/file_pattern_matcher.py,sha256=vX6MjWRGdonE4I8QPdjFUnz6moBjSzvgD6417BNQrW4,4021
39
- modal/functions.py,sha256=IIdHw0FNOdoMksG1b2zvkn8f-xskhJu07ZvHMey9iq4,67667
40
- modal/functions.pyi,sha256=bHbJiWW5TbFKKjDn7bSCFvOcUcAjPFqTStS-NAHPSeM,25068
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
41
41
  modal/gpu.py,sha256=r4rL6uH3UJIQthzYvfWauXNyh01WqCPtKZCmmSX1fd4,6881
42
- modal/image.py,sha256=xQAC1gWOG0L77QfVfAbHfLwfVkvMYi2sy0V_Ah7GWPg,82253
43
- modal/image.pyi,sha256=8R8Ac9eZ83ocM_1qrFUvH3rCbI5zRnq-Eq0xaAQq4nI,25105
42
+ modal/image.py,sha256=-swOPK80OXnFuhxoG3tT2zmJhas8yO-lr0jkOebBdKQ,82858
43
+ modal/image.pyi,sha256=Ryd3x_Bic7j40DPe0MveGqqwvNtum2qA-6lUd5lnHvk,25503
44
44
  modal/io_streams.py,sha256=QkQiizKRzd5bnbKQsap31LJgBYlAnj4-XkV_50xPYX0,15079
45
45
  modal/io_streams.pyi,sha256=bCCVSxkMcosYd8O3PQDDwJw7TQ8JEcnYonLJ5t27TQs,4804
46
46
  modal/mount.py,sha256=QKvrgpS_FMqrGdoyVZWeWnkNpQeDSLpuiwZFSGgRp_Y,29017
47
47
  modal/mount.pyi,sha256=a0WAFmT7kZvoq_ZAu6R6fwxiEUR6QSmeC_avUpJKGWM,10495
48
- modal/network_file_system.py,sha256=kwwQLCJVO086FTiAWSF_jz9BkqijZLpSbEYXpFvS0Ik,14600
48
+ modal/network_file_system.py,sha256=6H-TMvU5pet448aSnqzmOOFOgv-IVjjEiVFeYT68Qc4,14631
49
49
  modal/network_file_system.pyi,sha256=8mHKXuRkxHPazF6ljIW7g4M5aVqLSl6eKUPLgDCug5c,7901
50
50
  modal/object.py,sha256=HZs3N59C6JxlMuPQWJYvrWV1FEEkH9txUovVDorVUbs,9763
51
51
  modal/object.pyi,sha256=MO78H9yFSE5i1gExPEwyyQzLdlshkcGHN1aQ0ylyvq0,8802
52
52
  modal/output.py,sha256=N0xf4qeudEaYrslzdAl35VKV8rapstgIM2e9wO8_iy0,1967
53
53
  modal/parallel_map.py,sha256=4aoMXIrlG3wl5Ifk2YDNOQkXsGRsm6Xbfm6WtJ2t3WY,16002
54
54
  modal/parallel_map.pyi,sha256=pOhT0P3DDYlwLx0fR3PTsecA7DI8uOdXC1N8i-ZkyOY,2328
55
- modal/partial_function.py,sha256=zr_tFmTdoFxpTDw8cSwo_IjiWwZAyROCmQyl2z-Z6MY,29201
55
+ modal/partial_function.py,sha256=s87ILMvIfQY0gwGzRcdfLog-nqeyrl04kaQpj-w1gmg,29232
56
56
  modal/partial_function.pyi,sha256=pO6kf8i5HVsZ7CF0z_KkzLk4Aeq7NJhFJ_VNIycRXaU,9260
57
57
  modal/proxy.py,sha256=ZrOsuQP7dSZFq1OrIxalNnt0Zvsnp1h86Th679sSL40,1417
58
58
  modal/proxy.pyi,sha256=UvygdOYneLTuoDY6hVaMNCyZ947Tmx93IdLjErUqkvM,368
59
59
  modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- modal/queue.py,sha256=fJYFfpdrlVj_doc3QxgvJvv7c8BGHjjja5q_9HCtSqs,18658
60
+ modal/queue.py,sha256=KJmY2kakfZZWwkYqTJ5maUwCty-Ijo3co1P5gHuzFDg,18689
61
61
  modal/queue.pyi,sha256=di3ownBw4jc6d4X7ygXtbpjlUMOK69qyaD3lVsJbpoM,9900
62
62
  modal/retries.py,sha256=HKR2Q9aNPWkMjQ5nwobqYTuZaSuw0a8lI2zrtY5IW98,5230
63
- modal/runner.py,sha256=Q02VdfLCO7YKpnOSqqh58XL3hR2XHaDeiJVYW3MKz_8,24580
63
+ modal/runner.py,sha256=qfkB0OM97kb_-oP-D5KPj_jUwfd8ePUA3R_zLkjSTBQ,24586
64
64
  modal/runner.pyi,sha256=BvMS1ZVzWSn8B8q0KnIZOJKPkN5L-i5b-USbV6SWWHQ,5177
65
65
  modal/running_app.py,sha256=CshNvGDJtagOdKW54uYjY8HY73j2TpnsL9jkPFZAsfA,560
66
- modal/sandbox.py,sha256=abmprnPtA-WVsHKu4J1deoltpAUvXtIHQHX-ZpYjYPE,27293
67
- modal/sandbox.pyi,sha256=QPNuiTLNoKwYf8JK_fmfUBXpdGYlukyaksFV1DpCd2g,18987
66
+ modal/sandbox.py,sha256=YJaAeeBiyf3k1loHpLyJ3kwobEhS0Jnr7voC9venNJA,28049
67
+ modal/sandbox.pyi,sha256=k8_vHjN3oigxSCF13Cm2HfcSHuliGuSb8ryd3CGqwoA,19815
68
68
  modal/schedule.py,sha256=0ZFpKs1bOxeo5n3HZjoL7OE2ktsb-_oGtq-WJEPO4tY,2615
69
69
  modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
70
70
  modal/secret.py,sha256=Y1WgybQIkfkxdzH9CQ1h-Wd1DJJpzipigMhyyvSxTww,10007
71
71
  modal/secret.pyi,sha256=B_9QWiLvTwSopLsAHre-qSB2VS74cqfhtbA4GS8faQY,2957
72
- modal/serving.py,sha256=5JMDpcbf0ETse884R-hgXG3kCbhpQb5gqH0oQpqad34,4455
72
+ modal/serving.py,sha256=MnVuTsimN05LfNPxuJZ4sr5s1_BPUkIsOP_VC-bkp78,4464
73
73
  modal/serving.pyi,sha256=ncV-9jY_vZYFnGs5ZnMb3ffrX8LmcLdIMHBC56xRbtE,1711
74
74
  modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
75
75
  modal/token_flow.py,sha256=LcgSce_MSQ2p7j55DPwpVRpiAtCDe8GRSEwzO7muNR8,6774
76
76
  modal/token_flow.pyi,sha256=gOYtYujrWt_JFZeiI8EmfahXPx5GCR5Na-VaPQcWgEY,1937
77
- modal/volume.py,sha256=PGzbninvRU-IhSwJgM2jZKzD8llRhZhadsOxZ-YNwaM,29316
77
+ modal/volume.py,sha256=m25hZctl3zV5EMRM5BTd8mVDe66Scysbt__z6IXXa5g,29347
78
78
  modal/volume.pyi,sha256=St0mDiaojfep6Bs4sBbkRJmeacYHF6lh6FKOWGmheHA,11182
79
79
  modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
80
80
  modal/_runtime/asgi.py,sha256=H68KAN8bz8Zp7EcRl2c_ite1Y3kP1MHvjQAf-uUpCx8,21691
@@ -87,6 +87,7 @@ modal/_utils/app_utils.py,sha256=88BT4TPLWfYAQwKTHcyzNQRHg8n9B-QE2UyJs96iV-0,108
87
87
  modal/_utils/async_utils.py,sha256=9ubwMkwiDB4gzOYG2jL9j7Fs-5dxHjcifZe3r7JRg-k,25091
88
88
  modal/_utils/blob_utils.py,sha256=N66LtZI8PpCkZ7maA7GLW5CAmYUoNJdG-GjaAUR4_NQ,14509
89
89
  modal/_utils/bytes_io_segment_payload.py,sha256=uunxVJS4PE1LojF_UpURMzVK9GuvmYWRqQo_bxEj5TU,3385
90
+ modal/_utils/deprecation.py,sha256=9yHc2_bIuvivx-oYOzg-kj6JIolPdxXBlEkOVgnZcFA,1556
90
91
  modal/_utils/function_utils.py,sha256=LgcveUUb4XU_dWxtqgK_3ujZBvS3cGVzcDOkljyFZ2w,25066
91
92
  modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
92
93
  modal/_utils/grpc_utils.py,sha256=PPB5ay-vXencXNIWPVw5modr3EH7gfq2QPcO5YJ1lMU,7737
@@ -106,7 +107,7 @@ modal/_vendor/tblib.py,sha256=g1O7QUDd3sDoLd8YPFltkXkih7r_fyZOjgmGuligv3s,9722
106
107
  modal/cli/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
107
108
  modal/cli/_download.py,sha256=t6BXZwjTd9MgznDvbsV8rp0FZWggdzC-lUAGZU4xx1g,3984
108
109
  modal/cli/_traceback.py,sha256=QlLa_iw3fAOA-mqCqjS8qAxvNT48J3YY3errtVVc2cw,7316
109
- modal/cli/app.py,sha256=KOU3tKdcw50612rmN2LmO-N8cT1M1-UgLs7tw68Kgds,7717
110
+ modal/cli/app.py,sha256=HkwI38FZxx66jxiur4o_DRN3uwyO3L8hqgyo8oXKZxc,7726
110
111
  modal/cli/config.py,sha256=pXPLmX0bIoV57rQNqIPK7V-yllj-GPRY4jiBO_EklGg,1667
111
112
  modal/cli/container.py,sha256=nCySVD10VJPzmX3ghTsGmpxdYeVYYMW6ofjsyt2gQcM,3667
112
113
  modal/cli/dict.py,sha256=gwX4ZBsrr0dpWf_B5_5GN_ealcVzpcGyvY24dEY4y3Y,4455
@@ -146,10 +147,10 @@ modal_global_objects/mounts/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0
146
147
  modal_global_objects/mounts/modal_client_package.py,sha256=W0E_yShsRojPzWm6LtIQqNVolapdnrZkm2hVEQuZK_4,767
147
148
  modal_global_objects/mounts/python_standalone.py,sha256=SL_riIxpd8mP4i4CLDCWiFFNj0Ltknm9c_UIGfX5d60,1836
148
149
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
149
- modal_proto/api.proto,sha256=K1QnKJ3UuBkOJ4bCsrKqn-kDeitAiaoBK8Lq2Wzs28Y,79552
150
+ modal_proto/api.proto,sha256=Fdc1QR9kxirCiZW7o8fslrYd8vk-gR2dWOWj2uCbkHk,79553
150
151
  modal_proto/api_grpc.py,sha256=DveC4ejFYEhCLiWbQShnmY31_FWGYU675Bmr7nHhsgs,101342
151
- modal_proto/api_pb2.py,sha256=HoQkd_G9iIPPcXyBQ_50NJFNXxcckZ6VyzGWdaurkgE,292334
152
- modal_proto/api_pb2.pyi,sha256=EqUBkMJr0CKILSvS9AwAAOxlyo26ftZBnMOECfOAzTA,390736
152
+ modal_proto/api_pb2.py,sha256=EwN_R_HDiLP0s61rpSRQ5r6Kwof_XiPtH-lqeX6gC9I,292335
153
+ modal_proto/api_pb2.pyi,sha256=Ggl_mfNlUQWPQaxDUMqeC4Rglf1xXSf4Kx8vIFPiXp8,390741
153
154
  modal_proto/api_pb2_grpc.py,sha256=2PEP6JPOoTw2rDC5qYjLNuumP68ZwAouRhCoayisAhY,219162
154
155
  modal_proto/api_pb2_grpc.pyi,sha256=uWtCxVEd0cFpOZ1oOGfZNO7Dv45OP4kp09jMnNyx9D4,51098
155
156
  modal_proto/modal_api_grpc.py,sha256=-8mLby_om5MYo6yu1zA_hqhz0yLsQW7k2YWBVZW1iVs,13546
@@ -163,10 +164,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
163
164
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
164
165
  modal_version/__init__.py,sha256=RT6zPoOdFO99u5Wcxxaoir4ZCuPTbQ22cvzFAXl3vUY,470
165
166
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
166
- modal_version/_version_generated.py,sha256=SUn_R6s_ZfRkN0JPzGPm4Xkd0kC9ITNqjncXWymKoQY,149
167
- modal-0.68.24.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
168
- modal-0.68.24.dist-info/METADATA,sha256=guiG7ul7yJSYcVcKVXvJErv3Y8DuKpDh5tjdZEzGplU,2329
169
- modal-0.68.24.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
170
- modal-0.68.24.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
171
- modal-0.68.24.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
172
- modal-0.68.24.dist-info/RECORD,,
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
@@ -361,7 +361,7 @@ message AppHeartbeatRequest {
361
361
  }
362
362
 
363
363
  message AppLayout {
364
- repeated Object object = 1;
364
+ repeated Object objects = 1;
365
365
  map<string, string> function_ids = 2; // tag -> function id
366
366
  map<string, string> class_ids = 3; // tag -> class id
367
367
  }