modal 0.68.24__py3-none-any.whl → 0.68.42__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.
Files changed (51) hide show
  1. modal/_traceback.py +6 -2
  2. modal/_utils/deprecation.py +89 -0
  3. modal/app.py +15 -34
  4. modal/app.pyi +6 -7
  5. modal/cli/app.py +1 -1
  6. modal/cli/dict.py +6 -2
  7. modal/cli/network_file_system.py +1 -1
  8. modal/cli/run.py +1 -0
  9. modal/cli/volume.py +1 -1
  10. modal/client.pyi +2 -2
  11. modal/cls.py +15 -9
  12. modal/cls.pyi +5 -5
  13. modal/config.py +2 -1
  14. modal/container_process.py +2 -1
  15. modal/dict.py +12 -17
  16. modal/dict.pyi +8 -12
  17. modal/environments.py +10 -7
  18. modal/environments.pyi +6 -6
  19. modal/exception.py +0 -54
  20. modal/file_io.py +54 -7
  21. modal/file_io.pyi +18 -8
  22. modal/file_pattern_matcher.py +48 -15
  23. modal/functions.py +11 -13
  24. modal/functions.pyi +18 -12
  25. modal/image.py +21 -20
  26. modal/image.pyi +16 -28
  27. modal/mount.py +7 -4
  28. modal/mount.pyi +4 -4
  29. modal/network_file_system.py +13 -19
  30. modal/network_file_system.pyi +8 -12
  31. modal/partial_function.py +2 -30
  32. modal/queue.py +12 -17
  33. modal/queue.pyi +8 -12
  34. modal/runner.py +2 -7
  35. modal/sandbox.py +25 -13
  36. modal/sandbox.pyi +21 -0
  37. modal/secret.py +7 -4
  38. modal/secret.pyi +5 -5
  39. modal/serving.py +1 -1
  40. modal/volume.py +12 -17
  41. modal/volume.pyi +8 -12
  42. {modal-0.68.24.dist-info → modal-0.68.42.dist-info}/METADATA +2 -2
  43. {modal-0.68.24.dist-info → modal-0.68.42.dist-info}/RECORD +51 -50
  44. modal_proto/api.proto +1 -1
  45. modal_proto/api_pb2.py +750 -750
  46. modal_proto/api_pb2.pyi +4 -4
  47. modal_version/_version_generated.py +1 -1
  48. {modal-0.68.24.dist-info → modal-0.68.42.dist-info}/LICENSE +0 -0
  49. {modal-0.68.24.dist-info → modal-0.68.42.dist-info}/WHEEL +0 -0
  50. {modal-0.68.24.dist-info → modal-0.68.42.dist-info}/entry_points.txt +0 -0
  51. {modal-0.68.24.dist-info → modal-0.68.42.dist-info}/top_level.txt +0 -0
modal/secret.py CHANGED
@@ -9,6 +9,7 @@ from modal_proto import api_pb2
9
9
  from ._resolver import Resolver
10
10
  from ._runtime.execution_context import is_local
11
11
  from ._utils.async_utils import synchronize_api
12
+ from ._utils.deprecation import renamed_parameter
12
13
  from ._utils.grpc_utils import retry_transient_errors
13
14
  from ._utils.name_utils import check_object_name
14
15
  from .client import _Client
@@ -161,8 +162,9 @@ class _Secret(_Object, type_prefix="st"):
161
162
  return _Secret._from_loader(_load, "Secret.from_dotenv()", hydrate_lazily=True)
162
163
 
163
164
  @staticmethod
165
+ @renamed_parameter((2024, 12, 18), "label", "name")
164
166
  def from_name(
165
- label: str, # Some global identifier, such as "aws-secret"
167
+ name: str,
166
168
  namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
167
169
  environment_name: Optional[str] = None,
168
170
  required_keys: list[
@@ -186,7 +188,7 @@ class _Secret(_Object, type_prefix="st"):
186
188
 
187
189
  async def _load(self: _Secret, resolver: Resolver, existing_object_id: Optional[str]):
188
190
  req = api_pb2.SecretGetOrCreateRequest(
189
- deployment_name=label,
191
+ deployment_name=name,
190
192
  namespace=namespace,
191
193
  environment_name=_get_environment_name(environment_name, resolver),
192
194
  required_keys=required_keys,
@@ -203,8 +205,9 @@ class _Secret(_Object, type_prefix="st"):
203
205
  return _Secret._from_loader(_load, "Secret()", hydrate_lazily=True)
204
206
 
205
207
  @staticmethod
208
+ @renamed_parameter((2024, 12, 18), "label", "name")
206
209
  async def lookup(
207
- label: str,
210
+ name: str,
208
211
  namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
209
212
  client: Optional[_Client] = None,
210
213
  environment_name: Optional[str] = None,
@@ -212,7 +215,7 @@ class _Secret(_Object, type_prefix="st"):
212
215
  ) -> "_Secret":
213
216
  """mdmd:hidden"""
214
217
  obj = _Secret.from_name(
215
- label, namespace=namespace, environment_name=environment_name, required_keys=required_keys
218
+ name, namespace=namespace, environment_name=environment_name, required_keys=required_keys
216
219
  )
217
220
  if client is None:
218
221
  client = await _Client.from_env()
modal/secret.pyi CHANGED
@@ -12,11 +12,11 @@ class _Secret(modal.object._Object):
12
12
  def from_dotenv(path=None, *, filename=".env"): ...
13
13
  @staticmethod
14
14
  def from_name(
15
- label: str, namespace=1, environment_name: typing.Optional[str] = None, required_keys: list[str] = []
15
+ name: str, namespace=1, environment_name: typing.Optional[str] = None, required_keys: list[str] = []
16
16
  ) -> _Secret: ...
17
17
  @staticmethod
18
18
  async def lookup(
19
- label: str,
19
+ name: str,
20
20
  namespace=1,
21
21
  client: typing.Optional[modal.client._Client] = None,
22
22
  environment_name: typing.Optional[str] = None,
@@ -42,13 +42,13 @@ class Secret(modal.object.Object):
42
42
  def from_dotenv(path=None, *, filename=".env"): ...
43
43
  @staticmethod
44
44
  def from_name(
45
- label: str, namespace=1, environment_name: typing.Optional[str] = None, required_keys: list[str] = []
45
+ name: str, namespace=1, environment_name: typing.Optional[str] = None, required_keys: list[str] = []
46
46
  ) -> Secret: ...
47
47
 
48
48
  class __lookup_spec(typing_extensions.Protocol):
49
49
  def __call__(
50
50
  self,
51
- label: str,
51
+ name: str,
52
52
  namespace=1,
53
53
  client: typing.Optional[modal.client.Client] = None,
54
54
  environment_name: typing.Optional[str] = None,
@@ -56,7 +56,7 @@ class Secret(modal.object.Object):
56
56
  ) -> Secret: ...
57
57
  async def aio(
58
58
  self,
59
- label: str,
59
+ name: str,
60
60
  namespace=1,
61
61
  client: typing.Optional[modal.client.Client] = None,
62
62
  environment_name: typing.Optional[str] = None,
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, renamed_parameter
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
@@ -134,17 +135,9 @@ class _Volume(_Object, type_prefix="vo"):
134
135
  return self._lock
135
136
 
136
137
  @staticmethod
137
- def new():
138
- """mdmd:hidden"""
139
- message = (
140
- "`Volume.new` is deprecated."
141
- " Please use `Volume.from_name` (for persisted) or `Volume.ephemeral` (for ephemeral) volumes instead."
142
- )
143
- deprecation_error((2024, 3, 20), message)
144
-
145
- @staticmethod
138
+ @renamed_parameter((2024, 12, 18), "label", "name")
146
139
  def from_name(
147
- label: str,
140
+ name: str,
148
141
  namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
149
142
  environment_name: Optional[str] = None,
150
143
  create_if_missing: bool = False,
@@ -167,11 +160,11 @@ class _Volume(_Object, type_prefix="vo"):
167
160
  pass
168
161
  ```
169
162
  """
170
- check_object_name(label, "Volume")
163
+ check_object_name(name, "Volume")
171
164
 
172
165
  async def _load(self: _Volume, resolver: Resolver, existing_object_id: Optional[str]):
173
166
  req = api_pb2.VolumeGetOrCreateRequest(
174
- deployment_name=label,
167
+ deployment_name=name,
175
168
  namespace=namespace,
176
169
  environment_name=_get_environment_name(environment_name, resolver),
177
170
  object_creation_type=(api_pb2.OBJECT_CREATION_TYPE_CREATE_IF_MISSING if create_if_missing else None),
@@ -219,8 +212,9 @@ class _Volume(_Object, type_prefix="vo"):
219
212
  yield cls._new_hydrated(response.volume_id, client, None, is_another_app=True)
220
213
 
221
214
  @staticmethod
215
+ @renamed_parameter((2024, 12, 18), "label", "name")
222
216
  async def lookup(
223
- label: str,
217
+ name: str,
224
218
  namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
225
219
  client: Optional[_Client] = None,
226
220
  environment_name: Optional[str] = None,
@@ -238,7 +232,7 @@ class _Volume(_Object, type_prefix="vo"):
238
232
  ```
239
233
  """
240
234
  obj = _Volume.from_name(
241
- label,
235
+ name,
242
236
  namespace=namespace,
243
237
  environment_name=environment_name,
244
238
  create_if_missing=create_if_missing,
@@ -506,8 +500,9 @@ class _Volume(_Object, type_prefix="vo"):
506
500
  )
507
501
 
508
502
  @staticmethod
509
- async def delete(label: str, client: Optional[_Client] = None, environment_name: Optional[str] = None):
510
- obj = await _Volume.lookup(label, client=client, environment_name=environment_name)
503
+ @renamed_parameter((2024, 12, 18), "label", "name")
504
+ async def delete(name: str, client: Optional[_Client] = None, environment_name: Optional[str] = None):
505
+ obj = await _Volume.lookup(name, client=client, environment_name=environment_name)
511
506
  req = api_pb2.VolumeDeleteRequest(volume_id=obj.object_id)
512
507
  await retry_transient_errors(obj._client.stub.VolumeDelete, req)
513
508
 
modal/volume.pyi CHANGED
@@ -38,10 +38,8 @@ class _Volume(modal.object._Object):
38
38
 
39
39
  async def _get_lock(self): ...
40
40
  @staticmethod
41
- def new(): ...
42
- @staticmethod
43
41
  def from_name(
44
- label: str,
42
+ name: str,
45
43
  namespace=1,
46
44
  environment_name: typing.Optional[str] = None,
47
45
  create_if_missing: bool = False,
@@ -57,7 +55,7 @@ class _Volume(modal.object._Object):
57
55
  ) -> typing.AsyncContextManager[_Volume]: ...
58
56
  @staticmethod
59
57
  async def lookup(
60
- label: str,
58
+ name: str,
61
59
  namespace=1,
62
60
  client: typing.Optional[modal.client._Client] = None,
63
61
  environment_name: typing.Optional[str] = None,
@@ -85,7 +83,7 @@ class _Volume(modal.object._Object):
85
83
  async def _instance_delete(self): ...
86
84
  @staticmethod
87
85
  async def delete(
88
- label: str, client: typing.Optional[modal.client._Client] = None, environment_name: typing.Optional[str] = None
86
+ name: str, client: typing.Optional[modal.client._Client] = None, environment_name: typing.Optional[str] = None
89
87
  ): ...
90
88
 
91
89
  class _VolumeUploadContextManager:
@@ -133,11 +131,9 @@ class Volume(modal.object.Object):
133
131
 
134
132
  _get_lock: ___get_lock_spec
135
133
 
136
- @staticmethod
137
- def new(): ...
138
134
  @staticmethod
139
135
  def from_name(
140
- label: str,
136
+ name: str,
141
137
  namespace=1,
142
138
  environment_name: typing.Optional[str] = None,
143
139
  create_if_missing: bool = False,
@@ -155,7 +151,7 @@ class Volume(modal.object.Object):
155
151
  class __lookup_spec(typing_extensions.Protocol):
156
152
  def __call__(
157
153
  self,
158
- label: str,
154
+ name: str,
159
155
  namespace=1,
160
156
  client: typing.Optional[modal.client.Client] = None,
161
157
  environment_name: typing.Optional[str] = None,
@@ -164,7 +160,7 @@ class Volume(modal.object.Object):
164
160
  ) -> Volume: ...
165
161
  async def aio(
166
162
  self,
167
- label: str,
163
+ name: str,
168
164
  namespace=1,
169
165
  client: typing.Optional[modal.client.Client] = None,
170
166
  environment_name: typing.Optional[str] = None,
@@ -263,13 +259,13 @@ class Volume(modal.object.Object):
263
259
  class __delete_spec(typing_extensions.Protocol):
264
260
  def __call__(
265
261
  self,
266
- label: str,
262
+ name: str,
267
263
  client: typing.Optional[modal.client.Client] = None,
268
264
  environment_name: typing.Optional[str] = None,
269
265
  ): ...
270
266
  async def aio(
271
267
  self,
272
- label: str,
268
+ name: str,
273
269
  client: typing.Optional[modal.client.Client] = None,
274
270
  environment_name: typing.Optional[str] = None,
275
271
  ): ...
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modal
3
- Version: 0.68.24
3
+ Version: 0.68.42
4
4
  Summary: Python client library for Modal
5
5
  Author: Modal Labs
6
6
  Author-email: support@modal.com
@@ -21,7 +21,7 @@ Requires-Dist: fastapi
21
21
  Requires-Dist: grpclib (==0.4.7)
22
22
  Requires-Dist: protobuf (!=4.24.0,<6.0,>=3.19)
23
23
  Requires-Dist: rich (>=12.0.0)
24
- Requires-Dist: synchronicity (~=0.9.6)
24
+ Requires-Dist: synchronicity (~=0.9.7)
25
25
  Requires-Dist: toml
26
26
  Requires-Dist: typer (>=0.9)
27
27
  Requires-Dist: types-certifi
@@ -11,71 +11,71 @@ modal/_pty.py,sha256=JZfPDDpzqICZqtyPI_oMJf_9w-p_lLNuzHhwhodUXio,1329
11
11
  modal/_resolver.py,sha256=TtowKu2LdZ7NpiYkSXs058BZ4ivY8KVYdchqLfREkiA,6775
12
12
  modal/_resources.py,sha256=5qmcirXUI8dSH926nwkUaeX9H25mqYu9mXD_KuT79-o,1733
13
13
  modal/_serialization.py,sha256=qPLH6OUEBas1CT-a6i5pOP1hPGt5AfKr9q7RMUTFOMc,18722
14
- modal/_traceback.py,sha256=orZ7rsCk9ekV7ZoFjZTH_H00azCypwRKaLh0MZb1dR8,4898
14
+ modal/_traceback.py,sha256=IZQzB3fVlUfMHOSyKUgw0H6qv4yHnpyq-XVCNZKfUdA,5023
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=JWefPs4yB70BKQwSZejB_4_muhxn63cC9UmnNvpQ9XY,45526
19
+ modal/app.pyi,sha256=FYPCEJNhof4YF6HIuNP_2yG6s2PgZnKW9tO1hFE6sfA,25194
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=4DWFNIb933Dy-UuKJ37mbZWeoMUoSewFTsbVnd5HJKs,7280
23
23
  modal/cloud_bucket_mount.py,sha256=G7T7jWLD0QkmrfKR75mSTwdUZ2xNfj7pkVqb4ipmxmI,5735
24
24
  modal/cloud_bucket_mount.pyi,sha256=CEi7vrH3kDUF4LAy4qP6tfImy2UJuFRcRbsgRNM1wo8,1403
25
- modal/cls.py,sha256=ONnrfZ2vPcaY2JuKypPiBA9eTiyg8Qfg-Ull40nn9zs,30956
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
25
+ modal/cls.py,sha256=3hjb0JcoPjxKZNeK22f5rR43bZRBjoRI7_EMZXY7YrE,31172
26
+ modal/cls.pyi,sha256=ooDU2IaGgD5VQ3jDX2KCrqb3a91-AdKv8yKYSkjnW8Y,8230
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
31
- modal/dict.pyi,sha256=2cYgOqBxYZih4BYgMV0c3rNPuxYR6-cB1GBXzFkHA5c,7265
32
- modal/environments.py,sha256=5cgA-zbm6ngKLsRA19zSOgtgo9-BarJK3FJK0BiF2Lo,6505
33
- modal/environments.pyi,sha256=XalNpiPkAtHWAvOU2Cotq0ozmtl-Jv0FDsR8h9mr27Q,3521
34
- modal/exception.py,sha256=dRK789TD1HaB63kHhu1yZuvS2vP_Vua3iLMBtA6dgqk,7128
30
+ modal/dict.py,sha256=ei9jsA5iTj4UFGPJxTAed6vjd49W47ezDtj0koUmVts,12497
31
+ modal/dict.pyi,sha256=VmbzxltA2vFlIHZCxpNGtd-ieXwcUwdw3iyy3WCweqU,7115
32
+ modal/environments.py,sha256=wbv9ttFCbzATGfwcmvYiG608PfHovx0AQmawsg-jmic,6660
33
+ modal/environments.pyi,sha256=rF7oaaELoSNuoD6qImGnIbuGPtgWwR5SlcExyYJ61hQ,3515
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=-PHjDWuGBfoHYDiZc8eJtD2W9ka-c4jla2vHvA0z1fI,67821
40
+ modal/functions.pyi,sha256=snttn47K81lKhmrCLWNVZelZTDhNsbxtw4l1DlLDR74,25317
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=sv45bYaF5Jlmk8mQE3EDADYyXLi14hOe2CUM0Zb8Xao,82243
43
+ modal/image.pyi,sha256=VY_4HnDBhW8u_Zd3n-YBZ1H9idbTorWGwzsAzY7-B70,24213
44
44
  modal/io_streams.py,sha256=QkQiizKRzd5bnbKQsap31LJgBYlAnj4-XkV_50xPYX0,15079
45
45
  modal/io_streams.pyi,sha256=bCCVSxkMcosYd8O3PQDDwJw7TQ8JEcnYonLJ5t27TQs,4804
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=kwwQLCJVO086FTiAWSF_jz9BkqijZLpSbEYXpFvS0Ik,14600
49
- modal/network_file_system.pyi,sha256=8mHKXuRkxHPazF6ljIW7g4M5aVqLSl6eKUPLgDCug5c,7901
46
+ modal/mount.py,sha256=tlHjosr7aY52wtOvnZxiVXmBOBSC2JeAxqwSJCutQx0,29175
47
+ modal/mount.pyi,sha256=7dKl_JeVka3g4oKw7D-FFRU-Zpadt9LJEcfNUnhj540,10491
48
+ modal/network_file_system.py,sha256=INj1TfN_Fsmabmlte7anvey1epodjbMmjBW_TIJSST4,14406
49
+ modal/network_file_system.pyi,sha256=61M-sdWrtaRjmuNVsvusI6kf1Qw-jUOVXvEAeOkM8Aw,7751
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=pDDNR6KTaIIPpuKQaoO1vgP83_LTwxMhtOn6sVRrmC8,27862
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
61
- modal/queue.pyi,sha256=di3ownBw4jc6d4X7ygXtbpjlUMOK69qyaD3lVsJbpoM,9900
60
+ modal/queue.py,sha256=zMUQtdAyqZzBg-2iAo3c3G54HLP7TEWfVhiQXLjewb4,18556
61
+ modal/queue.pyi,sha256=gGV97pWelSSYqMV9Bl4ys3mSP7q82fS71oqSWeAwyDE,9818
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=c-Qli3QJPN7bBQzsTk4iS51zurNlq--InZ2eRR-B6No,28106
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
- modal/secret.py,sha256=Y1WgybQIkfkxdzH9CQ1h-Wd1DJJpzipigMhyyvSxTww,10007
71
- modal/secret.pyi,sha256=B_9QWiLvTwSopLsAHre-qSB2VS74cqfhtbA4GS8faQY,2957
72
- modal/serving.py,sha256=5JMDpcbf0ETse884R-hgXG3kCbhpQb5gqH0oQpqad34,4455
70
+ modal/secret.py,sha256=lebVTZi4fC9PXQpLVmsvgQLzy-2Kzxv1WBD0Jr2wsxQ,10117
71
+ modal/secret.pyi,sha256=0SyCyiYamr97htTmMjPZKvp5AQZKFF9GO_Ia2VcgrtA,2952
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
78
- modal/volume.pyi,sha256=St0mDiaojfep6Bs4sBbkRJmeacYHF6lh6FKOWGmheHA,11182
77
+ modal/volume.py,sha256=T-pLxCYqmqRO6OolpAXlPxomMu0RWjti2e4kUpaj2cQ,29229
78
+ modal/volume.pyi,sha256=eekb2dnAAwFK_NO9ciAOOTthl8NP1iAmMFrCGgjDA2k,11100
79
79
  modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
80
80
  modal/_runtime/asgi.py,sha256=H68KAN8bz8Zp7EcRl2c_ite1Y3kP1MHvjQAf-uUpCx8,21691
81
81
  modal/_runtime/container_io_manager.py,sha256=ctgyNFiHjq1brCrabXmlurkAXjnrCeWPRvTVa735vRw,44215
@@ -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=dycySRBxyZf3ITzEqPNM6MxXTk9-0VVLA8oCPQ5j_Os,3426
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,22 +107,22 @@ 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
- modal/cli/dict.py,sha256=gwX4ZBsrr0dpWf_B5_5GN_ealcVzpcGyvY24dEY4y3Y,4455
113
+ modal/cli/dict.py,sha256=HaEcjfll7i3Uj3Fg56aj4407if5UljsYfr6fIq-D2W8,4589
113
114
  modal/cli/entry_point.py,sha256=aaNxFAqZcmtSjwzkYIA_Ba9CkL4cL4_i2gy5VjoXxkM,4228
114
115
  modal/cli/environment.py,sha256=Ayddkiq9jdj3XYDJ8ZmUqFpPPH8xajYlbexRkzGtUcg,4334
115
116
  modal/cli/import_refs.py,sha256=wnqE5AMeyAN3IZmQvJCp54KRnJh8Nq_5fMqB6u6GEL8,9147
116
117
  modal/cli/launch.py,sha256=uyI-ouGvYRjHLGxGQ2lYBZq32BiRT1i0L8ksz5iy7K8,2935
117
- modal/cli/network_file_system.py,sha256=3QbAxKEoRc6RCMsYE3OS-GcuiI4GMkz_wAKsIBbN1qg,8186
118
+ modal/cli/network_file_system.py,sha256=o6VLTgN4xn5XUiNPBfxYec-5uWCgYrDmfFFLM1ZW_eE,8180
118
119
  modal/cli/profile.py,sha256=rLXfjJObfPNjaZvNfHGIKqs7y9bGYyGe-K7V0w-Ni0M,3110
119
120
  modal/cli/queues.py,sha256=MIh2OsliNE2QeL1erubfsRsNuG4fxqcqWA2vgIfQ4Mg,4494
120
- modal/cli/run.py,sha256=W9isFpIQTNCxKafVfI_PUjxNrDMl5V8N9y15F3wtPXk,17831
121
+ modal/cli/run.py,sha256=9SvPmBzB8ZZRaqUJc9LmL2tfT5OMiR4Ow0dLANVwuB8,17870
121
122
  modal/cli/secret.py,sha256=uQpwYrMY98iMCWeZOQTcktOYhPTZ8IHnyealDc2CZqo,4206
122
123
  modal/cli/token.py,sha256=mxSgOWakXG6N71hQb1ko61XAR9ZGkTMZD-Txn7gmTac,1924
123
124
  modal/cli/utils.py,sha256=hZmjyzcPjDnQSkLvycZD2LhGdcsfdZshs_rOU78EpvI,3717
124
- modal/cli/volume.py,sha256=ngbnX4nhURMaCOqDGO4HmTvAbRBZBjRnPvk5TumnbVw,10004
125
+ modal/cli/volume.py,sha256=Oxc8WGP8wm2a_S87bp-P4OnPwoT1wIYQhbgkCvvFIdI,9998
125
126
  modal/cli/programs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
126
127
  modal/cli/programs/run_jupyter.py,sha256=RRr07CqZrStMbLdBM3PpzU6KM8t9FtLbdIPthg2-Mpw,2755
127
128
  modal/cli/programs/vscode.py,sha256=acKvTUNA2uIGITKWYS9mkb_W8WUuNmvOSOvf1KBtUco,2479
@@ -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=a0PljflDY_DkAkO-G7eB-EomkggfZAf1AqEjBk9y6hY,149
168
+ modal-0.68.42.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
169
+ modal-0.68.42.dist-info/METADATA,sha256=3I3X8d0raDyeijHD8jRNhpSDTbLe-VXo-Cp3-sMnSM0,2329
170
+ modal-0.68.42.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
171
+ modal-0.68.42.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
172
+ modal-0.68.42.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
173
+ modal-0.68.42.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
  }