modal 0.72.5__py3-none-any.whl → 0.72.48__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 (73) hide show
  1. modal/_container_entrypoint.py +5 -10
  2. modal/_object.py +297 -0
  3. modal/_resolver.py +7 -5
  4. modal/_runtime/container_io_manager.py +0 -11
  5. modal/_runtime/user_code_imports.py +7 -7
  6. modal/_serialization.py +4 -3
  7. modal/_tunnel.py +1 -1
  8. modal/app.py +14 -61
  9. modal/app.pyi +25 -25
  10. modal/cli/app.py +3 -2
  11. modal/cli/container.py +1 -1
  12. modal/cli/import_refs.py +185 -113
  13. modal/cli/launch.py +10 -5
  14. modal/cli/programs/run_jupyter.py +2 -2
  15. modal/cli/programs/vscode.py +3 -3
  16. modal/cli/run.py +134 -68
  17. modal/client.py +1 -0
  18. modal/client.pyi +18 -14
  19. modal/cloud_bucket_mount.py +4 -0
  20. modal/cloud_bucket_mount.pyi +4 -0
  21. modal/cls.py +33 -5
  22. modal/cls.pyi +20 -5
  23. modal/container_process.pyi +8 -6
  24. modal/dict.py +1 -1
  25. modal/dict.pyi +32 -29
  26. modal/environments.py +1 -1
  27. modal/environments.pyi +2 -1
  28. modal/experimental.py +47 -11
  29. modal/experimental.pyi +29 -0
  30. modal/file_io.pyi +30 -28
  31. modal/file_pattern_matcher.py +3 -4
  32. modal/functions.py +31 -23
  33. modal/functions.pyi +57 -50
  34. modal/gpu.py +19 -26
  35. modal/image.py +47 -19
  36. modal/image.pyi +28 -21
  37. modal/io_streams.pyi +14 -12
  38. modal/mount.py +14 -5
  39. modal/mount.pyi +28 -25
  40. modal/network_file_system.py +7 -7
  41. modal/network_file_system.pyi +27 -24
  42. modal/object.py +2 -265
  43. modal/object.pyi +46 -130
  44. modal/parallel_map.py +2 -2
  45. modal/parallel_map.pyi +10 -7
  46. modal/partial_function.py +22 -3
  47. modal/partial_function.pyi +45 -27
  48. modal/proxy.py +1 -1
  49. modal/proxy.pyi +2 -1
  50. modal/queue.py +1 -1
  51. modal/queue.pyi +26 -23
  52. modal/runner.py +14 -3
  53. modal/sandbox.py +11 -7
  54. modal/sandbox.pyi +30 -27
  55. modal/secret.py +1 -1
  56. modal/secret.pyi +2 -1
  57. modal/token_flow.pyi +6 -4
  58. modal/volume.py +1 -1
  59. modal/volume.pyi +36 -33
  60. {modal-0.72.5.dist-info → modal-0.72.48.dist-info}/METADATA +2 -2
  61. {modal-0.72.5.dist-info → modal-0.72.48.dist-info}/RECORD +73 -71
  62. modal_proto/api.proto +151 -4
  63. modal_proto/api_grpc.py +113 -0
  64. modal_proto/api_pb2.py +998 -795
  65. modal_proto/api_pb2.pyi +430 -11
  66. modal_proto/api_pb2_grpc.py +233 -1
  67. modal_proto/api_pb2_grpc.pyi +75 -3
  68. modal_proto/modal_api_grpc.py +7 -0
  69. modal_version/_version_generated.py +1 -1
  70. {modal-0.72.5.dist-info → modal-0.72.48.dist-info}/LICENSE +0 -0
  71. {modal-0.72.5.dist-info → modal-0.72.48.dist-info}/WHEEL +0 -0
  72. {modal-0.72.5.dist-info → modal-0.72.48.dist-info}/entry_points.txt +0 -0
  73. {modal-0.72.5.dist-info → modal-0.72.48.dist-info}/top_level.txt +0 -0
modal/sandbox.pyi CHANGED
@@ -1,6 +1,7 @@
1
1
  import _typeshed
2
2
  import collections.abc
3
3
  import google.protobuf.message
4
+ import modal._object
4
5
  import modal._tunnel
5
6
  import modal.app
6
7
  import modal.client
@@ -23,7 +24,7 @@ import os
23
24
  import typing
24
25
  import typing_extensions
25
26
 
26
- class _Sandbox(modal.object._Object):
27
+ class _Sandbox(modal._object._Object):
27
28
  _result: typing.Optional[modal_proto.api_pb2.GenericResult]
28
29
  _stdout: modal.io_streams._StreamReader[str]
29
30
  _stderr: modal.io_streams._StreamReader[str]
@@ -154,6 +155,8 @@ class _Sandbox(modal.object._Object):
154
155
  client: typing.Optional[modal.client._Client] = None,
155
156
  ) -> collections.abc.AsyncGenerator[_Sandbox, None]: ...
156
157
 
158
+ SUPERSELF = typing.TypeVar("SUPERSELF", covariant=True)
159
+
157
160
  class Sandbox(modal.object.Object):
158
161
  _result: typing.Optional[modal_proto.api_pb2.GenericResult]
159
162
  _stdout: modal.io_streams.StreamReader[str]
@@ -263,49 +266,49 @@ class Sandbox(modal.object.Object):
263
266
 
264
267
  from_id: __from_id_spec
265
268
 
266
- class __set_tags_spec(typing_extensions.Protocol):
269
+ class __set_tags_spec(typing_extensions.Protocol[SUPERSELF]):
267
270
  def __call__(self, tags: dict[str, str], *, client: typing.Optional[modal.client.Client] = None): ...
268
271
  async def aio(self, tags: dict[str, str], *, client: typing.Optional[modal.client.Client] = None): ...
269
272
 
270
- set_tags: __set_tags_spec
273
+ set_tags: __set_tags_spec[typing_extensions.Self]
271
274
 
272
- class __snapshot_filesystem_spec(typing_extensions.Protocol):
275
+ class __snapshot_filesystem_spec(typing_extensions.Protocol[SUPERSELF]):
273
276
  def __call__(self, timeout: int = 55) -> modal.image.Image: ...
274
277
  async def aio(self, timeout: int = 55) -> modal.image.Image: ...
275
278
 
276
- snapshot_filesystem: __snapshot_filesystem_spec
279
+ snapshot_filesystem: __snapshot_filesystem_spec[typing_extensions.Self]
277
280
 
278
- class __wait_spec(typing_extensions.Protocol):
281
+ class __wait_spec(typing_extensions.Protocol[SUPERSELF]):
279
282
  def __call__(self, raise_on_termination: bool = True): ...
280
283
  async def aio(self, raise_on_termination: bool = True): ...
281
284
 
282
- wait: __wait_spec
285
+ wait: __wait_spec[typing_extensions.Self]
283
286
 
284
- class __tunnels_spec(typing_extensions.Protocol):
287
+ class __tunnels_spec(typing_extensions.Protocol[SUPERSELF]):
285
288
  def __call__(self, timeout: int = 50) -> dict[int, modal._tunnel.Tunnel]: ...
286
289
  async def aio(self, timeout: int = 50) -> dict[int, modal._tunnel.Tunnel]: ...
287
290
 
288
- tunnels: __tunnels_spec
291
+ tunnels: __tunnels_spec[typing_extensions.Self]
289
292
 
290
- class __terminate_spec(typing_extensions.Protocol):
293
+ class __terminate_spec(typing_extensions.Protocol[SUPERSELF]):
291
294
  def __call__(self): ...
292
295
  async def aio(self): ...
293
296
 
294
- terminate: __terminate_spec
297
+ terminate: __terminate_spec[typing_extensions.Self]
295
298
 
296
- class __poll_spec(typing_extensions.Protocol):
299
+ class __poll_spec(typing_extensions.Protocol[SUPERSELF]):
297
300
  def __call__(self) -> typing.Optional[int]: ...
298
301
  async def aio(self) -> typing.Optional[int]: ...
299
302
 
300
- poll: __poll_spec
303
+ poll: __poll_spec[typing_extensions.Self]
301
304
 
302
- class ___get_task_id_spec(typing_extensions.Protocol):
305
+ class ___get_task_id_spec(typing_extensions.Protocol[SUPERSELF]):
303
306
  def __call__(self): ...
304
307
  async def aio(self): ...
305
308
 
306
- _get_task_id: ___get_task_id_spec
309
+ _get_task_id: ___get_task_id_spec[typing_extensions.Self]
307
310
 
308
- class __exec_spec(typing_extensions.Protocol):
311
+ class __exec_spec(typing_extensions.Protocol[SUPERSELF]):
309
312
  @typing.overload
310
313
  def __call__(
311
314
  self,
@@ -363,9 +366,9 @@ class Sandbox(modal.object.Object):
363
366
  _pty_info: typing.Optional[modal_proto.api_pb2.PTYInfo] = None,
364
367
  ) -> modal.container_process.ContainerProcess[bytes]: ...
365
368
 
366
- exec: __exec_spec
369
+ exec: __exec_spec[typing_extensions.Self]
367
370
 
368
- class __open_spec(typing_extensions.Protocol):
371
+ class __open_spec(typing_extensions.Protocol[SUPERSELF]):
369
372
  @typing.overload
370
373
  def __call__(self, path: str, mode: _typeshed.OpenTextMode) -> modal.file_io.FileIO[str]: ...
371
374
  @typing.overload
@@ -375,27 +378,27 @@ class Sandbox(modal.object.Object):
375
378
  @typing.overload
376
379
  async def aio(self, path: str, mode: _typeshed.OpenBinaryMode) -> modal.file_io.FileIO[bytes]: ...
377
380
 
378
- open: __open_spec
381
+ open: __open_spec[typing_extensions.Self]
379
382
 
380
- class __ls_spec(typing_extensions.Protocol):
383
+ class __ls_spec(typing_extensions.Protocol[SUPERSELF]):
381
384
  def __call__(self, path: str) -> list[str]: ...
382
385
  async def aio(self, path: str) -> list[str]: ...
383
386
 
384
- ls: __ls_spec
387
+ ls: __ls_spec[typing_extensions.Self]
385
388
 
386
- class __mkdir_spec(typing_extensions.Protocol):
389
+ class __mkdir_spec(typing_extensions.Protocol[SUPERSELF]):
387
390
  def __call__(self, path: str, parents: bool = False) -> None: ...
388
391
  async def aio(self, path: str, parents: bool = False) -> None: ...
389
392
 
390
- mkdir: __mkdir_spec
393
+ mkdir: __mkdir_spec[typing_extensions.Self]
391
394
 
392
- class __rm_spec(typing_extensions.Protocol):
395
+ class __rm_spec(typing_extensions.Protocol[SUPERSELF]):
393
396
  def __call__(self, path: str, recursive: bool = False) -> None: ...
394
397
  async def aio(self, path: str, recursive: bool = False) -> None: ...
395
398
 
396
- rm: __rm_spec
399
+ rm: __rm_spec[typing_extensions.Self]
397
400
 
398
- class __watch_spec(typing_extensions.Protocol):
401
+ class __watch_spec(typing_extensions.Protocol[SUPERSELF]):
399
402
  def __call__(
400
403
  self,
401
404
  path: str,
@@ -411,7 +414,7 @@ class Sandbox(modal.object.Object):
411
414
  timeout: typing.Optional[int] = None,
412
415
  ) -> typing.AsyncIterator[modal.file_io.FileWatchEvent]: ...
413
416
 
414
- watch: __watch_spec
417
+ watch: __watch_spec[typing_extensions.Self]
415
418
 
416
419
  @property
417
420
  def stdout(self) -> modal.io_streams.StreamReader[str]: ...
modal/secret.py CHANGED
@@ -6,6 +6,7 @@ from grpclib import GRPCError, Status
6
6
 
7
7
  from modal_proto import api_pb2
8
8
 
9
+ from ._object import _get_environment_name, _Object
9
10
  from ._resolver import Resolver
10
11
  from ._runtime.execution_context import is_local
11
12
  from ._utils.async_utils import synchronize_api
@@ -14,7 +15,6 @@ from ._utils.grpc_utils import retry_transient_errors
14
15
  from ._utils.name_utils import check_object_name
15
16
  from .client import _Client
16
17
  from .exception import InvalidError, NotFoundError
17
- from .object import _get_environment_name, _Object
18
18
 
19
19
  ENV_DICT_WRONG_TYPE_ERR = "the env_dict argument to Secret has to be a dict[str, Union[str, None]]"
20
20
 
modal/secret.pyi CHANGED
@@ -1,9 +1,10 @@
1
+ import modal._object
1
2
  import modal.client
2
3
  import modal.object
3
4
  import typing
4
5
  import typing_extensions
5
6
 
6
- class _Secret(modal.object._Object):
7
+ class _Secret(modal._object._Object):
7
8
  @staticmethod
8
9
  def from_dict(env_dict: dict[str, typing.Optional[str]] = {}): ...
9
10
  @staticmethod
modal/token_flow.pyi CHANGED
@@ -13,10 +13,12 @@ class _TokenFlow:
13
13
  self, timeout: float = 40.0, grpc_extra_timeout: float = 5.0
14
14
  ) -> typing.Optional[modal_proto.api_pb2.TokenFlowWaitResponse]: ...
15
15
 
16
+ SUPERSELF = typing.TypeVar("SUPERSELF", covariant=True)
17
+
16
18
  class TokenFlow:
17
19
  def __init__(self, client: modal.client.Client): ...
18
20
 
19
- class __start_spec(typing_extensions.Protocol):
21
+ class __start_spec(typing_extensions.Protocol[SUPERSELF]):
20
22
  def __call__(
21
23
  self, utm_source: typing.Optional[str] = None, next_url: typing.Optional[str] = None
22
24
  ) -> synchronicity.combined_types.AsyncAndBlockingContextManager[tuple[str, str, str]]: ...
@@ -24,9 +26,9 @@ class TokenFlow:
24
26
  self, utm_source: typing.Optional[str] = None, next_url: typing.Optional[str] = None
25
27
  ) -> typing.AsyncContextManager[tuple[str, str, str]]: ...
26
28
 
27
- start: __start_spec
29
+ start: __start_spec[typing_extensions.Self]
28
30
 
29
- class __finish_spec(typing_extensions.Protocol):
31
+ class __finish_spec(typing_extensions.Protocol[SUPERSELF]):
30
32
  def __call__(
31
33
  self, timeout: float = 40.0, grpc_extra_timeout: float = 5.0
32
34
  ) -> typing.Optional[modal_proto.api_pb2.TokenFlowWaitResponse]: ...
@@ -34,7 +36,7 @@ class TokenFlow:
34
36
  self, timeout: float = 40.0, grpc_extra_timeout: float = 5.0
35
37
  ) -> typing.Optional[modal_proto.api_pb2.TokenFlowWaitResponse]: ...
36
38
 
37
- finish: __finish_spec
39
+ finish: __finish_spec[typing_extensions.Self]
38
40
 
39
41
  async def _new_token(
40
42
  *,
modal/volume.py CHANGED
@@ -27,6 +27,7 @@ import modal_proto.api_pb2
27
27
  from modal.exception import VolumeUploadTimeoutError
28
28
  from modal_proto import api_pb2
29
29
 
30
+ from ._object import EPHEMERAL_OBJECT_HEARTBEAT_SLEEP, _get_environment_name, _Object, live_method, live_method_gen
30
31
  from ._resolver import Resolver
31
32
  from ._utils.async_utils import TaskContext, aclosing, async_map, asyncnullcontext, synchronize_api
32
33
  from ._utils.blob_utils import (
@@ -41,7 +42,6 @@ from ._utils.grpc_utils import retry_transient_errors
41
42
  from ._utils.name_utils import check_object_name
42
43
  from .client import _Client
43
44
  from .config import logger
44
- from .object import EPHEMERAL_OBJECT_HEARTBEAT_SLEEP, _get_environment_name, _Object, live_method, live_method_gen
45
45
 
46
46
  # Max duration for uploading to volumes files
47
47
  # As a guide, files >40GiB will take >10 minutes to upload.
modal/volume.pyi CHANGED
@@ -1,6 +1,7 @@
1
1
  import asyncio.locks
2
2
  import collections.abc
3
3
  import enum
4
+ import modal._object
4
5
  import modal._utils.blob_utils
5
6
  import modal.client
6
7
  import modal.object
@@ -33,7 +34,7 @@ class FileEntry:
33
34
  def __delattr__(self, name): ...
34
35
  def __hash__(self): ...
35
36
 
36
- class _Volume(modal.object._Object):
37
+ class _Volume(modal._object._Object):
37
38
  _lock: typing.Optional[asyncio.locks.Lock]
38
39
 
39
40
  async def _get_lock(self): ...
@@ -98,16 +99,16 @@ class _VolumeUploadContextManager:
98
99
  _volume_id: str
99
100
  _client: modal.client._Client
100
101
  _force: bool
101
- progress_cb: typing.Callable[..., typing.Any]
102
+ progress_cb: collections.abc.Callable[..., typing.Any]
102
103
  _upload_generators: list[
103
- collections.abc.Generator[typing.Callable[[], modal._utils.blob_utils.FileUploadSpec], None, None]
104
+ collections.abc.Generator[collections.abc.Callable[[], modal._utils.blob_utils.FileUploadSpec], None, None]
104
105
  ]
105
106
 
106
107
  def __init__(
107
108
  self,
108
109
  volume_id: str,
109
110
  client: modal.client._Client,
110
- progress_cb: typing.Optional[typing.Callable[..., typing.Any]] = None,
111
+ progress_cb: typing.Optional[collections.abc.Callable[..., typing.Any]] = None,
111
112
  force: bool = False,
112
113
  ): ...
113
114
  async def __aenter__(self): ...
@@ -128,16 +129,18 @@ class _VolumeUploadContextManager:
128
129
  self, file_spec: modal._utils.blob_utils.FileUploadSpec
129
130
  ) -> modal_proto.api_pb2.MountFile: ...
130
131
 
132
+ SUPERSELF = typing.TypeVar("SUPERSELF", covariant=True)
133
+
131
134
  class Volume(modal.object.Object):
132
135
  _lock: typing.Optional[asyncio.locks.Lock]
133
136
 
134
137
  def __init__(self, *args, **kwargs): ...
135
138
 
136
- class ___get_lock_spec(typing_extensions.Protocol):
139
+ class ___get_lock_spec(typing_extensions.Protocol[SUPERSELF]):
137
140
  def __call__(self): ...
138
141
  async def aio(self): ...
139
142
 
140
- _get_lock: ___get_lock_spec
143
+ _get_lock: ___get_lock_spec[typing_extensions.Self]
141
144
 
142
145
  @staticmethod
143
146
  def from_name(
@@ -198,71 +201,71 @@ class Volume(modal.object.Object):
198
201
 
199
202
  create_deployed: __create_deployed_spec
200
203
 
201
- class ___do_reload_spec(typing_extensions.Protocol):
204
+ class ___do_reload_spec(typing_extensions.Protocol[SUPERSELF]):
202
205
  def __call__(self, lock=True): ...
203
206
  async def aio(self, lock=True): ...
204
207
 
205
- _do_reload: ___do_reload_spec
208
+ _do_reload: ___do_reload_spec[typing_extensions.Self]
206
209
 
207
- class __commit_spec(typing_extensions.Protocol):
210
+ class __commit_spec(typing_extensions.Protocol[SUPERSELF]):
208
211
  def __call__(self): ...
209
212
  async def aio(self): ...
210
213
 
211
- commit: __commit_spec
214
+ commit: __commit_spec[typing_extensions.Self]
212
215
 
213
- class __reload_spec(typing_extensions.Protocol):
216
+ class __reload_spec(typing_extensions.Protocol[SUPERSELF]):
214
217
  def __call__(self): ...
215
218
  async def aio(self): ...
216
219
 
217
- reload: __reload_spec
220
+ reload: __reload_spec[typing_extensions.Self]
218
221
 
219
- class __iterdir_spec(typing_extensions.Protocol):
222
+ class __iterdir_spec(typing_extensions.Protocol[SUPERSELF]):
220
223
  def __call__(self, path: str, *, recursive: bool = True) -> typing.Iterator[FileEntry]: ...
221
224
  def aio(self, path: str, *, recursive: bool = True) -> collections.abc.AsyncIterator[FileEntry]: ...
222
225
 
223
- iterdir: __iterdir_spec
226
+ iterdir: __iterdir_spec[typing_extensions.Self]
224
227
 
225
- class __listdir_spec(typing_extensions.Protocol):
228
+ class __listdir_spec(typing_extensions.Protocol[SUPERSELF]):
226
229
  def __call__(self, path: str, *, recursive: bool = False) -> list[FileEntry]: ...
227
230
  async def aio(self, path: str, *, recursive: bool = False) -> list[FileEntry]: ...
228
231
 
229
- listdir: __listdir_spec
232
+ listdir: __listdir_spec[typing_extensions.Self]
230
233
 
231
- class __read_file_spec(typing_extensions.Protocol):
234
+ class __read_file_spec(typing_extensions.Protocol[SUPERSELF]):
232
235
  def __call__(self, path: str) -> typing.Iterator[bytes]: ...
233
236
  def aio(self, path: str) -> collections.abc.AsyncIterator[bytes]: ...
234
237
 
235
- read_file: __read_file_spec
238
+ read_file: __read_file_spec[typing_extensions.Self]
236
239
 
237
- class __read_file_into_fileobj_spec(typing_extensions.Protocol):
240
+ class __read_file_into_fileobj_spec(typing_extensions.Protocol[SUPERSELF]):
238
241
  def __call__(self, path: str, fileobj: typing.IO[bytes]) -> int: ...
239
242
  async def aio(self, path: str, fileobj: typing.IO[bytes]) -> int: ...
240
243
 
241
- read_file_into_fileobj: __read_file_into_fileobj_spec
244
+ read_file_into_fileobj: __read_file_into_fileobj_spec[typing_extensions.Self]
242
245
 
243
- class __remove_file_spec(typing_extensions.Protocol):
246
+ class __remove_file_spec(typing_extensions.Protocol[SUPERSELF]):
244
247
  def __call__(self, path: str, recursive: bool = False) -> None: ...
245
248
  async def aio(self, path: str, recursive: bool = False) -> None: ...
246
249
 
247
- remove_file: __remove_file_spec
250
+ remove_file: __remove_file_spec[typing_extensions.Self]
248
251
 
249
- class __copy_files_spec(typing_extensions.Protocol):
252
+ class __copy_files_spec(typing_extensions.Protocol[SUPERSELF]):
250
253
  def __call__(self, src_paths: collections.abc.Sequence[str], dst_path: str) -> None: ...
251
254
  async def aio(self, src_paths: collections.abc.Sequence[str], dst_path: str) -> None: ...
252
255
 
253
- copy_files: __copy_files_spec
256
+ copy_files: __copy_files_spec[typing_extensions.Self]
254
257
 
255
- class __batch_upload_spec(typing_extensions.Protocol):
258
+ class __batch_upload_spec(typing_extensions.Protocol[SUPERSELF]):
256
259
  def __call__(self, force: bool = False) -> VolumeUploadContextManager: ...
257
260
  async def aio(self, force: bool = False) -> VolumeUploadContextManager: ...
258
261
 
259
- batch_upload: __batch_upload_spec
262
+ batch_upload: __batch_upload_spec[typing_extensions.Self]
260
263
 
261
- class ___instance_delete_spec(typing_extensions.Protocol):
264
+ class ___instance_delete_spec(typing_extensions.Protocol[SUPERSELF]):
262
265
  def __call__(self): ...
263
266
  async def aio(self): ...
264
267
 
265
- _instance_delete: ___instance_delete_spec
268
+ _instance_delete: ___instance_delete_spec[typing_extensions.Self]
266
269
 
267
270
  class __delete_spec(typing_extensions.Protocol):
268
271
  def __call__(
@@ -304,16 +307,16 @@ class VolumeUploadContextManager:
304
307
  _volume_id: str
305
308
  _client: modal.client.Client
306
309
  _force: bool
307
- progress_cb: typing.Callable[..., typing.Any]
310
+ progress_cb: collections.abc.Callable[..., typing.Any]
308
311
  _upload_generators: list[
309
- collections.abc.Generator[typing.Callable[[], modal._utils.blob_utils.FileUploadSpec], None, None]
312
+ collections.abc.Generator[collections.abc.Callable[[], modal._utils.blob_utils.FileUploadSpec], None, None]
310
313
  ]
311
314
 
312
315
  def __init__(
313
316
  self,
314
317
  volume_id: str,
315
318
  client: modal.client.Client,
316
- progress_cb: typing.Optional[typing.Callable[..., typing.Any]] = None,
319
+ progress_cb: typing.Optional[collections.abc.Callable[..., typing.Any]] = None,
317
320
  force: bool = False,
318
321
  ): ...
319
322
  def __enter__(self): ...
@@ -333,10 +336,10 @@ class VolumeUploadContextManager:
333
336
  recursive: bool = True,
334
337
  ): ...
335
338
 
336
- class ___upload_file_spec(typing_extensions.Protocol):
339
+ class ___upload_file_spec(typing_extensions.Protocol[SUPERSELF]):
337
340
  def __call__(self, file_spec: modal._utils.blob_utils.FileUploadSpec) -> modal_proto.api_pb2.MountFile: ...
338
341
  async def aio(self, file_spec: modal._utils.blob_utils.FileUploadSpec) -> modal_proto.api_pb2.MountFile: ...
339
342
 
340
- _upload_file: ___upload_file_spec
343
+ _upload_file: ___upload_file_spec[typing_extensions.Self]
341
344
 
342
345
  def _open_files_error_annotation(mount_path: str) -> typing.Optional[str]: ...
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modal
3
- Version: 0.72.5
3
+ Version: 0.72.48
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.8)
24
+ Requires-Dist: synchronicity (~=0.9.9)
25
25
  Requires-Dist: toml
26
26
  Requires-Dist: typer (>=0.9)
27
27
  Requires-Dist: types-certifi
@@ -2,86 +2,88 @@ 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
- modal/_container_entrypoint.py,sha256=U1ZU-Sa0LC646YPh0AWSGVBHmzfTxYUiGu2viKzW-Zs,29643
5
+ modal/_container_entrypoint.py,sha256=iHSNqLCTK4uXzcmhF5ou5AqOYovk4hMfV3BZYYDrFKc,29554
6
6
  modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
7
7
  modal/_location.py,sha256=S3lSxIU3h9HkWpkJ3Pwo0pqjIOSB1fjeSgUsY3x7eec,1202
8
+ modal/_object.py,sha256=ItQcsMNkz9Y3kdTsvfNarbW-paJ2qabDyQ7njaqY0XI,11359
8
9
  modal/_output.py,sha256=0fWX_KQwhER--U81ys16CL-pA5A-LN20C0EZjElKGJQ,25410
9
10
  modal/_proxy_tunnel.py,sha256=gnKyCfmVB7x2d1A6c-JDysNIP3kEFxmXzhcXhPrzPn0,1906
10
11
  modal/_pty.py,sha256=JZfPDDpzqICZqtyPI_oMJf_9w-p_lLNuzHhwhodUXio,1329
11
- modal/_resolver.py,sha256=TtowKu2LdZ7NpiYkSXs058BZ4ivY8KVYdchqLfREkiA,6775
12
+ modal/_resolver.py,sha256=D9IAdZKNqRPwgPDaB-XMKGtO8G0GwtBzG6xdgiXKdCk,6945
12
13
  modal/_resources.py,sha256=5qmcirXUI8dSH926nwkUaeX9H25mqYu9mXD_KuT79-o,1733
13
- modal/_serialization.py,sha256=qPLH6OUEBas1CT-a6i5pOP1hPGt5AfKr9q7RMUTFOMc,18722
14
+ modal/_serialization.py,sha256=x0uArKNXg89SfmKMUaLup_moHodax9weZItkChKeQ64,18745
14
15
  modal/_traceback.py,sha256=IZQzB3fVlUfMHOSyKUgw0H6qv4yHnpyq-XVCNZKfUdA,5023
15
- modal/_tunnel.py,sha256=o-jJhS4vQ6-XswDhHcJWGMZZmD03SC0e9i8fEu1JTjo,6310
16
+ modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
16
17
  modal/_tunnel.pyi,sha256=JmmDYAy9F1FpgJ_hWx0xkom2nTOFQjn4mTPYlU3PFo4,1245
17
18
  modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
18
- modal/app.py,sha256=1h8v96KuIg_SAdWDK9gNWVOYYFciBIerhldRPjvDgxs,45511
19
- modal/app.pyi,sha256=Gx7gxjfQ70sxhbwfpx1VjvzEON-ZEMTJ_Vy8qt0oQvo,25302
19
+ modal/app.py,sha256=KNfzLlkI2dJPl9LY8AgW76whZpwIvYKi2E2p9u4F3N4,43659
20
+ modal/app.pyi,sha256=vnQhENaQBhJO6el-ieOcw3NEeYQ314SFXRDtjij4DM8,25324
20
21
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
21
- modal/client.py,sha256=JAnd4-GCN093BwkvOFAK5a6iy5ycxofjpUncMxlrIMw,15253
22
- modal/client.pyi,sha256=aGMg6G-KZvllpIhVe9lKCjGRODL2eG7ur3StgGlwOGI,7278
23
- modal/cloud_bucket_mount.py,sha256=G7T7jWLD0QkmrfKR75mSTwdUZ2xNfj7pkVqb4ipmxmI,5735
24
- modal/cloud_bucket_mount.pyi,sha256=CEi7vrH3kDUF4LAy4qP6tfImy2UJuFRcRbsgRNM1wo8,1403
25
- modal/cls.py,sha256=3hjb0JcoPjxKZNeK22f5rR43bZRBjoRI7_EMZXY7YrE,31172
26
- modal/cls.pyi,sha256=ooDU2IaGgD5VQ3jDX2KCrqb3a91-AdKv8yKYSkjnW8Y,8230
22
+ modal/client.py,sha256=8SQawr7P1PNUCq1UmJMUQXG2jIo4Nmdcs311XqrNLRE,15276
23
+ modal/client.pyi,sha256=kzowbosjZXwpmAYhsd464XDVygnDt1nDYFxJNSNIjNg,7593
24
+ modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
25
+ modal/cloud_bucket_mount.pyi,sha256=30T3K1a89l6wzmEJ_J9iWv9SknoGqaZDx59Xs-ZQcmk,1607
26
+ modal/cls.py,sha256=7Czu5ff8Sezzl4ayHyI9nMgB0el3401_uHvyZU4vbhc,32206
27
+ modal/cls.pyi,sha256=LrX2YVbcRqSKioOtXIMT9NShe4gaVYpDKt16SDZHh5s,8966
27
28
  modal/config.py,sha256=BzhZYUUwOmvVwf6x5kf0ywMC257s648dmuhsnB6g3gk,11041
28
29
  modal/container_process.py,sha256=WTqLn01dJPVkPpwR_0w_JH96ceN5mV4TGtiu1ZR2RRA,6108
29
- modal/container_process.pyi,sha256=dqtqBmyRpXXpRrDooESL6WBVU_1Rh6OG-66P2Hk9E5U,2666
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
30
+ modal/container_process.pyi,sha256=Hf0J5JyDdCCXBJSKx6gvkPOo0XrztCm78xzxamtzUjQ,2828
31
+ modal/dict.py,sha256=lKxvBcbcFZRARiqfolyRUW08x3RcozWL3MZuW2-Eu4U,12498
32
+ modal/dict.pyi,sha256=kKb0Kc6RUabtQ5Hwslg_vwL_OIrwIAJ2NXrJTepTtp4,7684
33
+ modal/environments.py,sha256=20doFhRnm1fae30LMOp8hSYbIfR7yFZTtbLdo5PrSj4,6661
34
+ modal/environments.pyi,sha256=RXE3slyEr9tWpfS84Fj7iUzNJy-SujlqWOQTE8A4Qaw,3537
34
35
  modal/exception.py,sha256=4JyO-SACaLNDe2QC48EjsK8GMkZ8AgEurZ8j1YdRu8E,5263
35
- modal/experimental.py,sha256=npfKbyMpI41uZZs9HW_QiB3E4ykWfDXZbACXXbw6qeA,2385
36
+ modal/experimental.py,sha256=H9FXT3kshbjPLovshT10DicyOkGFrPqILy-qdTX-P7s,4015
37
+ modal/experimental.pyi,sha256=24tIYu_w9RLwFrz1cIsgYuqmDCtV8eg6-bQNz3zjhDo,939
36
38
  modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
37
- modal/file_io.pyi,sha256=NrIoB0YjIqZ8MDMe826xAnybT0ww_kxQM3iPLo82REU,8898
38
- modal/file_pattern_matcher.py,sha256=2ozXoalgCByA-aVk81Jv9W4_DWqLgBZAix_NADwPOrs,6527
39
- modal/functions.py,sha256=3uJPbrEAWhpFfLfUnoRjGmvEUC-_wVh-8yNJBx8eVeM,68249
40
- modal/functions.pyi,sha256=LiSDgH-X7jcZ56pAoLMwo3x9Dzdp_3Sd7W5MVAJPoCg,25407
41
- modal/gpu.py,sha256=MTxj6ql8EpgfBg8YmZ5a1cLznyuZFssX1qXbEX4LKVM,7503
42
- modal/image.py,sha256=_ALAfk8YEiWnv_pHSnixBPoR88RGSDstsAUvlJa1nKc,89802
43
- modal/image.pyi,sha256=NfZyLkl4rmxpc5fokaO4mmEeGFOwGn0AndV1vKwBdbs,26027
39
+ modal/file_io.pyi,sha256=NTRft1tbPSWf9TlWVeZmTlgB5AZ_Zhu2srWIrWr7brk,9445
40
+ modal/file_pattern_matcher.py,sha256=dSo7BMQGZBAuoBFOX-e_72HxmF3FLzjQlEtnGtJiaD4,6506
41
+ modal/functions.py,sha256=BrqbgeKpuoiA3-waNfdmUJfAGF7BsbQHvlTfAS1eHNQ,69046
42
+ modal/functions.pyi,sha256=m2a2ZnjqZFC6REG1_uhA5LM0O1etkFbQH3KnsLSXUKs,26533
43
+ modal/gpu.py,sha256=2qZMNnoMrjU-5Bu7fx68pANUAKTtZq0EWEEeBA9OUVQ,7426
44
+ modal/image.py,sha256=leeY7fLfFjS0IqTi3D4cRxIDOb80BPtb3jsQfqvVJ8c,90912
45
+ modal/image.pyi,sha256=QMKS6E3CsZr5DoyNqGpcJPBYJTJZSvtAQIsAhPVd_E4,26347
44
46
  modal/io_streams.py,sha256=QkQiizKRzd5bnbKQsap31LJgBYlAnj4-XkV_50xPYX0,15079
45
- modal/io_streams.pyi,sha256=bCCVSxkMcosYd8O3PQDDwJw7TQ8JEcnYonLJ5t27TQs,4804
46
- modal/mount.py,sha256=nGimxizRzCpyZu9cpTdKQRgU9uqMnl3xBrTRR_rD6fE,31480
47
- modal/mount.pyi,sha256=mcKMYwt8dX3oO8OzzKqCdh7K2EhMhWIHEPoJwzi1rl8,12194
48
- modal/network_file_system.py,sha256=INj1TfN_Fsmabmlte7anvey1epodjbMmjBW_TIJSST4,14406
49
- modal/network_file_system.pyi,sha256=61M-sdWrtaRjmuNVsvusI6kf1Qw-jUOVXvEAeOkM8Aw,7751
50
- modal/object.py,sha256=HZs3N59C6JxlMuPQWJYvrWV1FEEkH9txUovVDorVUbs,9763
51
- modal/object.pyi,sha256=MO78H9yFSE5i1gExPEwyyQzLdlshkcGHN1aQ0ylyvq0,8802
47
+ modal/io_streams.pyi,sha256=bJ7ZLmSmJ0nKoa6r4FJpbqvzdUVa0lEe0Fa-MMpMezU,5071
48
+ modal/mount.py,sha256=JuZZ2IJuypv1_9qK8R_LepX5oEWFTALdjIVA7_9HNC0,31802
49
+ modal/mount.pyi,sha256=dvdr4joSpW7oKnKyg9eDD0obFfekwZtW65j4NEomivQ,12523
50
+ modal/network_file_system.py,sha256=Jcr5Whar0MgA2YItJLJWmzHDnkkDlcOzO63TRkA64zA,14407
51
+ modal/network_file_system.pyi,sha256=4N3eqMbTSlqmS8VV_aJK-uvrgJC8xnf_YtW5FHfRfc8,8156
52
+ modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
53
+ modal/object.pyi,sha256=kyJkRQcVv3ct7zSAxvvXcuhBVeH914v80uSlqeS7cA4,5632
52
54
  modal/output.py,sha256=N0xf4qeudEaYrslzdAl35VKV8rapstgIM2e9wO8_iy0,1967
53
- modal/parallel_map.py,sha256=4aoMXIrlG3wl5Ifk2YDNOQkXsGRsm6Xbfm6WtJ2t3WY,16002
54
- modal/parallel_map.pyi,sha256=pOhT0P3DDYlwLx0fR3PTsecA7DI8uOdXC1N8i-ZkyOY,2328
55
- modal/partial_function.py,sha256=KSpHhu7Gsbe4h-5mcJjxnE4328biKOB7yVouHZbObA8,27798
56
- modal/partial_function.pyi,sha256=pO6kf8i5HVsZ7CF0z_KkzLk4Aeq7NJhFJ_VNIycRXaU,9260
57
- modal/proxy.py,sha256=ZrOsuQP7dSZFq1OrIxalNnt0Zvsnp1h86Th679sSL40,1417
58
- modal/proxy.pyi,sha256=UvygdOYneLTuoDY6hVaMNCyZ947Tmx93IdLjErUqkvM,368
55
+ modal/parallel_map.py,sha256=POBTyiWabe2e4qBNlsjjksiu1AAPEsNqI-mM8cgNFco,16042
56
+ modal/parallel_map.pyi,sha256=0ltjcIpPUqPGGOWmHqzCfBu5y3ISjRZDrqOJhiNhfYk,2522
57
+ modal/partial_function.py,sha256=4_hGVCCX-dYdjs_86Metfsuih8YyypiVMrExcwRGDS8,28711
58
+ modal/partial_function.pyi,sha256=Dj4WDxbGkXjxAbucSBSqr2_vrNbEWEAwdXnMzh2d80Y,9905
59
+ modal/proxy.py,sha256=NrOevrWxG3G7-zlyRzG6BcIvop7AWLeyahZxitbBaOk,1418
60
+ modal/proxy.pyi,sha256=1OEKIVUyC-xb7fHMzngakQso0nTsK60TVhXtlcMj6Wk,390
59
61
  modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- modal/queue.py,sha256=zMUQtdAyqZzBg-2iAo3c3G54HLP7TEWfVhiQXLjewb4,18556
61
- modal/queue.pyi,sha256=gGV97pWelSSYqMV9Bl4ys3mSP7q82fS71oqSWeAwyDE,9818
62
+ modal/queue.py,sha256=HPnyJuX-THDEl2ak-xqf2lxYJMiQw4e37y4vHz6FRCg,18557
63
+ modal/queue.pyi,sha256=sgvELCK4bJXMZIZw7gllooGFZNipGjI3BT4rmUuyD9M,10282
62
64
  modal/retries.py,sha256=HKR2Q9aNPWkMjQ5nwobqYTuZaSuw0a8lI2zrtY5IW98,5230
63
- modal/runner.py,sha256=mhqgRdjD5cUDpBQIokiX7OCfVblpGV6aWmZ-WvWJgGg,24114
65
+ modal/runner.py,sha256=0SCMgKO8lZ9W1C7le1EcgViKERMXpi_-QBd6PF_MH0Q,24450
64
66
  modal/runner.pyi,sha256=YmP4EOCNjjkwSIPi2Gl6hF_ji_ytkxz9dw3iB9KXaOI,5275
65
67
  modal/running_app.py,sha256=v61mapYNV1-O-Uaho5EfJlryMLvIT9We0amUOSvSGx8,1188
66
- modal/sandbox.py,sha256=H63K3MTcgdb9KkKc79sMKe6UzFMGBNI7HB2TUwBbE_U,28609
67
- modal/sandbox.pyi,sha256=lceWDeXqzdeRc1iIuM5YmpoZlBJcVBpQO1Jc3AT1AQI,20809
68
+ modal/sandbox.py,sha256=h5bgvt98iFmQs4aBu_d2aR6qP5UM5QVdP3wgm_P7RgE,29014
69
+ modal/sandbox.pyi,sha256=XtiDHYa4HOooyuEPmKFwEqO58AJBJVTceO_1HQyDwII,21343
68
70
  modal/schedule.py,sha256=0ZFpKs1bOxeo5n3HZjoL7OE2ktsb-_oGtq-WJEPO4tY,2615
69
71
  modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
70
- modal/secret.py,sha256=lebVTZi4fC9PXQpLVmsvgQLzy-2Kzxv1WBD0Jr2wsxQ,10117
71
- modal/secret.pyi,sha256=0SyCyiYamr97htTmMjPZKvp5AQZKFF9GO_Ia2VcgrtA,2952
72
+ modal/secret.py,sha256=XTqrpR4rnkuUb-bth3qM_xxPqqEWorSoN9qDwjWRcXo,10118
73
+ modal/secret.pyi,sha256=W4g_BOSxafYm-K9PvFc7-li3a-rsCFNkYgHTZXr1AFA,2974
72
74
  modal/serving.py,sha256=MnVuTsimN05LfNPxuJZ4sr5s1_BPUkIsOP_VC-bkp78,4464
73
75
  modal/serving.pyi,sha256=ncV-9jY_vZYFnGs5ZnMb3ffrX8LmcLdIMHBC56xRbtE,1711
74
76
  modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
75
77
  modal/token_flow.py,sha256=LcgSce_MSQ2p7j55DPwpVRpiAtCDe8GRSEwzO7muNR8,6774
76
- modal/token_flow.pyi,sha256=gOYtYujrWt_JFZeiI8EmfahXPx5GCR5Na-VaPQcWgEY,1937
77
- modal/volume.py,sha256=NoqdOTrjSUEBkUj-Of_oi7I_yCuNmaLqr3TIsTWOddM,29674
78
- modal/volume.pyi,sha256=GfyVeLyM7DMiBlg0I5N6OtJl0Bzv0-rNQXkWVO0j5c0,11903
78
+ modal/token_flow.pyi,sha256=0XV3d-9CGQL3qjPdw3RgwIFVqqxo8Z-u044_mkgAM3o,2064
79
+ modal/volume.py,sha256=DdM9NhqNkqrk4BbAZdAgzI1jZws7NN2tYANO4OuM8hQ,29675
80
+ modal/volume.pyi,sha256=kTsXarphjZILXci84LQy7EyC84eXUs5-7D62IM5q3eE,12491
79
81
  modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
80
82
  modal/_runtime/asgi.py,sha256=c4hmaMW1pLo-cm7ouriJjieuFm4ZF6D2LMy0638sfOs,22139
81
- modal/_runtime/container_io_manager.py,sha256=HgDLjE78yy1P7WZTmsEVDf89YnFFWG63Ddes8uYLVDY,43764
83
+ modal/_runtime/container_io_manager.py,sha256=drb-cY78h8P9Krzmmjex7uZlSSocniEF5cIXmUcvGnY,43145
82
84
  modal/_runtime/execution_context.py,sha256=E6ofm6j1POXGPxS841X3V7JU6NheVb8OkQc7JpLq4Kg,2712
83
85
  modal/_runtime/telemetry.py,sha256=T1RoAGyjBDr1swiM6pPsGRSITm7LI5FDK18oNXxY08U,5163
84
- modal/_runtime/user_code_imports.py,sha256=n4CQOojzSdf0jwSKSy6MEnVX3IWl3t3Dq54-x9VS2Ds,14663
86
+ modal/_runtime/user_code_imports.py,sha256=c06azC0MtYHHCGWWRGxsVY0uMAjQKe1QEj-i0oXqbWM,14699
85
87
  modal/_utils/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
86
88
  modal/_utils/app_utils.py,sha256=88BT4TPLWfYAQwKTHcyzNQRHg8n9B-QE2UyJs96iV-0,108
87
89
  modal/_utils/async_utils.py,sha256=9ubwMkwiDB4gzOYG2jL9j7Fs-5dxHjcifZe3r7JRg-k,25091
@@ -108,25 +110,25 @@ modal/_vendor/tblib.py,sha256=g1O7QUDd3sDoLd8YPFltkXkih7r_fyZOjgmGuligv3s,9722
108
110
  modal/cli/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
109
111
  modal/cli/_download.py,sha256=t6BXZwjTd9MgznDvbsV8rp0FZWggdzC-lUAGZU4xx1g,3984
110
112
  modal/cli/_traceback.py,sha256=QlLa_iw3fAOA-mqCqjS8qAxvNT48J3YY3errtVVc2cw,7316
111
- modal/cli/app.py,sha256=HkwI38FZxx66jxiur4o_DRN3uwyO3L8hqgyo8oXKZxc,7726
113
+ modal/cli/app.py,sha256=TmUiFKAE1yc6ll8pfl-wZ2lh9crC31Fu_8_YKCX8NJc,7818
112
114
  modal/cli/config.py,sha256=pXPLmX0bIoV57rQNqIPK7V-yllj-GPRY4jiBO_EklGg,1667
113
- modal/cli/container.py,sha256=nCySVD10VJPzmX3ghTsGmpxdYeVYYMW6ofjsyt2gQcM,3667
115
+ modal/cli/container.py,sha256=FYwEgjf93j4NMorAjGbSV98i1wpebqdAeNU1wfrFp1k,3668
114
116
  modal/cli/dict.py,sha256=HaEcjfll7i3Uj3Fg56aj4407if5UljsYfr6fIq-D2W8,4589
115
117
  modal/cli/entry_point.py,sha256=aaNxFAqZcmtSjwzkYIA_Ba9CkL4cL4_i2gy5VjoXxkM,4228
116
118
  modal/cli/environment.py,sha256=Ayddkiq9jdj3XYDJ8ZmUqFpPPH8xajYlbexRkzGtUcg,4334
117
- modal/cli/import_refs.py,sha256=wnqE5AMeyAN3IZmQvJCp54KRnJh8Nq_5fMqB6u6GEL8,9147
118
- modal/cli/launch.py,sha256=t1XsExzTWip4n9Cqa-Jhzj65P6bVHO0je2d76JQRi_w,2990
119
+ modal/cli/import_refs.py,sha256=vp4r28FGnag3hKRbR_haiuCIGmOTthrhcGhAqSwwc7Q,11753
120
+ modal/cli/launch.py,sha256=pzQt2QlcrbIUU0MVzWWPAvMQ6MCyqsHZ0X9JcV-sY04,3242
119
121
  modal/cli/network_file_system.py,sha256=o6VLTgN4xn5XUiNPBfxYec-5uWCgYrDmfFFLM1ZW_eE,8180
120
122
  modal/cli/profile.py,sha256=rLXfjJObfPNjaZvNfHGIKqs7y9bGYyGe-K7V0w-Ni0M,3110
121
123
  modal/cli/queues.py,sha256=MIh2OsliNE2QeL1erubfsRsNuG4fxqcqWA2vgIfQ4Mg,4494
122
- modal/cli/run.py,sha256=QMs3BVSkq8jve76BqgstGt4C6jilbDD9gpCCRPuHUy0,17879
124
+ modal/cli/run.py,sha256=1rIfCRuCJb5fJQPW2j9huHh9h72u45g708IXf3QXKB8,20051
123
125
  modal/cli/secret.py,sha256=uQpwYrMY98iMCWeZOQTcktOYhPTZ8IHnyealDc2CZqo,4206
124
126
  modal/cli/token.py,sha256=mxSgOWakXG6N71hQb1ko61XAR9ZGkTMZD-Txn7gmTac,1924
125
127
  modal/cli/utils.py,sha256=hZmjyzcPjDnQSkLvycZD2LhGdcsfdZshs_rOU78EpvI,3717
126
128
  modal/cli/volume.py,sha256=Jrm-1R9u92JbbUM62bkB9RzAM_jO8wi7T2-i6Cb2XG0,10568
127
129
  modal/cli/programs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
128
- modal/cli/programs/run_jupyter.py,sha256=KNaxG4LixbBJdLOzwKZB5IMA6tO1CSjHMKY6SpaIXd0,2685
129
- modal/cli/programs/vscode.py,sha256=0k65NdAvRL3WGtngEYt-3w_kn9x2y3PqzA-dqdaVHtw,3383
130
+ modal/cli/programs/run_jupyter.py,sha256=1X8eQ3gB_IqkJn11Q4dQ9KdIqFVwQQlwkrrSqlFWfPQ,2685
131
+ modal/cli/programs/vscode.py,sha256=c5jKk1ruuC03X1D-hNc2jtTQqofCBweEZH_qxHjkHGo,3383
130
132
  modal/extensions/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
131
133
  modal/extensions/ipython.py,sha256=Xvzy-A7cvwMSDa9p4c4CEMLOX2_Xsg9DkM1J9uyu7jc,983
132
134
  modal/requirements/2023.12.312.txt,sha256=zWWUVgVQ92GXBKNYYr2-5vn9rlnXcmkqlwlX5u1eTYw,400
@@ -148,13 +150,13 @@ modal_global_objects/mounts/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0
148
150
  modal_global_objects/mounts/modal_client_package.py,sha256=W0E_yShsRojPzWm6LtIQqNVolapdnrZkm2hVEQuZK_4,767
149
151
  modal_global_objects/mounts/python_standalone.py,sha256=pEML5GaV2_0ahci_1vpfc_FnySpsfi2fhYmFF5I7IiQ,1837
150
152
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
151
- modal_proto/api.proto,sha256=1hO6_dn7DwgFra9TQSAXBt1NV4ETiiURPHe09bodinc,80368
152
- modal_proto/api_grpc.py,sha256=VakjV_Ge3fgZDRJN6EeG2yY_LMkZvn6yVXr5SnFKIDA,103542
153
- modal_proto/api_pb2.py,sha256=77arFb-gAsuI-7Rbr65FxAB13i-mPoJEHYvs7z5Uo1s,295839
154
- modal_proto/api_pb2.pyi,sha256=iGrfDlLXPg8oC9QdWOFlCrNoJqB0FompkpVa-EskYOg,394251
155
- modal_proto/api_pb2_grpc.py,sha256=OAvrG7OCPKmF-6eawqc4X5iLN0WFBQ_AvufuWnHm3Es,224030
156
- modal_proto/api_pb2_grpc.pyi,sha256=-bE8AO-IJsg0WMwSzEEe_jnmeirta3tqj5IwTVIrF6c,52169
157
- modal_proto/modal_api_grpc.py,sha256=kOABHGzB81bAhxqKwj79DKqdK2HlcC4U0MkFETkQwfQ,13826
153
+ modal_proto/api.proto,sha256=6Rt3GfhD5PWxmkAerWPFQZQ4TL7u0-s7PBcvajuKl5A,85069
154
+ modal_proto/api_grpc.py,sha256=_YeTxy_4EyqC4jp9eBsJWnziGRafK5c61kcvdWpJXRY,109089
155
+ modal_proto/api_pb2.py,sha256=uds7csRod6-2Hq3PehpeKJ82agfcfZc-fmKrQ4-01m0,310738
156
+ modal_proto/api_pb2.pyi,sha256=FBNlLVTt75Nq6G1JwnB_1nLz5WsK9XCOYoqNafXKSaA,413655
157
+ modal_proto/api_pb2_grpc.py,sha256=LlW5e2YKWPJS3lPYoJDyKjf1AxJSCCHi0DhupX05YyQ,235804
158
+ modal_proto/api_pb2_grpc.pyi,sha256=BM4068ohQqF1VUxvYdAYEVLgUebJVQvyrii-aXcel74,54910
159
+ modal_proto/modal_api_grpc.py,sha256=fYh-4oxTB8fB1NWrYm8S9-8umvKvAxJ58eNZ_e4B0WA,14556
158
160
  modal_proto/modal_options_grpc.py,sha256=qJ1cuwA54oRqrdTyPTbvfhFZYd9HhJKK5UCwt523r3Y,120
159
161
  modal_proto/options.proto,sha256=a-siq4swVbZPfaFRXAipRZzGP2bq8OsdUvjlyzAeodQ,488
160
162
  modal_proto/options_grpc.py,sha256=M18X3d-8F_cNYSVM3I25dUTO5rZ0rd-vCCfynfh13Nc,125
@@ -165,10 +167,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
165
167
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
168
  modal_version/__init__.py,sha256=kGya2ZlItX2zB7oHORs-wvP4PG8lg_mtbi1QIK3G6SQ,470
167
169
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
168
- modal_version/_version_generated.py,sha256=YZkNwzq3yMtpJ2OS9vVQTjRRZGXPKR1UDV1uxVuO4WI,148
169
- modal-0.72.5.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
170
- modal-0.72.5.dist-info/METADATA,sha256=hYo1a_nRmFW_lrtVpvKcvxu6-OO1mZu1pj5YosbGk1U,2328
171
- modal-0.72.5.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
172
- modal-0.72.5.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
173
- modal-0.72.5.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
174
- modal-0.72.5.dist-info/RECORD,,
170
+ modal_version/_version_generated.py,sha256=Xs3RAy5-mYPVyOua-HPWlZv1-X6TY-gJwtgPIlQYUUk,149
171
+ modal-0.72.48.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
172
+ modal-0.72.48.dist-info/METADATA,sha256=S1s3imUuaXBcrEehulLXvb7XNrPF6uYx7EGuoTcI1Pg,2329
173
+ modal-0.72.48.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
174
+ modal-0.72.48.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
175
+ modal-0.72.48.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
176
+ modal-0.72.48.dist-info/RECORD,,