modal 1.0.0.dev12__py3-none-any.whl → 1.0.0.dev14__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/client.pyi CHANGED
@@ -31,7 +31,7 @@ class _Client:
31
31
  server_url: str,
32
32
  client_type: int,
33
33
  credentials: typing.Optional[tuple[str, str]],
34
- version: str = "1.0.0.dev12",
34
+ version: str = "1.0.0.dev14",
35
35
  ): ...
36
36
  def is_closed(self) -> bool: ...
37
37
  @property
@@ -94,7 +94,7 @@ class Client:
94
94
  server_url: str,
95
95
  client_type: int,
96
96
  credentials: typing.Optional[tuple[str, str]],
97
- version: str = "1.0.0.dev12",
97
+ version: str = "1.0.0.dev14",
98
98
  ): ...
99
99
  def is_closed(self) -> bool: ...
100
100
  @property
modal/mount.py CHANGED
@@ -5,9 +5,6 @@ import concurrent.futures
5
5
  import dataclasses
6
6
  import os
7
7
  import re
8
- import site
9
- import sys
10
- import sysconfig
11
8
  import time
12
9
  import typing
13
10
  import warnings
@@ -32,7 +29,7 @@ from ._utils.name_utils import check_object_name
32
29
  from ._utils.package_utils import get_module_mount_info
33
30
  from .client import _Client
34
31
  from .config import config, logger
35
- from .exception import ExecutionError, InvalidError, ModuleNotMountable
32
+ from .exception import ExecutionError, InvalidError
36
33
  from .file_pattern_matcher import FilePatternMatcher
37
34
 
38
35
  ROOT_DIR: PurePosixPath = PurePosixPath("/root")
@@ -800,22 +797,6 @@ def _get_client_mount():
800
797
  return _Mount.from_name(client_mount_name(), namespace=api_pb2.DEPLOYMENT_NAMESPACE_GLOBAL)
801
798
 
802
799
 
803
- SYS_PREFIXES = {
804
- Path(p)
805
- for p in (
806
- sys.prefix,
807
- sys.base_prefix,
808
- sys.exec_prefix,
809
- sys.base_exec_prefix,
810
- *sysconfig.get_paths().values(),
811
- *site.getsitepackages(),
812
- site.getusersitepackages(),
813
- )
814
- }
815
-
816
-
817
- SYS_PREFIXES |= {p.resolve() for p in SYS_PREFIXES}
818
-
819
800
  MODAL_PACKAGES = ["modal", "modal_proto", "modal_version"]
820
801
 
821
802
 
@@ -829,45 +810,3 @@ def _is_modal_path(remote_path: PurePosixPath):
829
810
  if is_modal_path:
830
811
  return True
831
812
  return False
832
-
833
-
834
- def get_sys_modules_mounts() -> dict[str, _Mount]:
835
- """mdmd:hidden
836
-
837
- Auto-mount local modules that have been imported in global scope.
838
- This may or may not include the "entrypoint" of the function as well, depending on how modal is invoked
839
- Note: sys.modules may change during the iteration
840
- """
841
- auto_mounts = {}
842
- top_level_modules = []
843
- skip_prefixes = set()
844
- for name, module in sorted(sys.modules.items(), key=lambda kv: len(kv[0])):
845
- parent = name.rsplit(".")[0]
846
- if parent and parent in skip_prefixes:
847
- skip_prefixes.add(name)
848
- continue
849
- skip_prefixes.add(name)
850
- top_level_modules.append((name, module))
851
-
852
- for module_name, module in top_level_modules:
853
- if module_name.startswith("__"):
854
- # skip "built in" modules like __main__ and __mp_main__
855
- # the running function's main file should be included anyway
856
- continue
857
-
858
- try:
859
- # at this point we don't know if the sys.modules module should be mounted or not
860
- potential_mount = _Mount._from_local_python_packages(module_name)
861
- mount_paths = potential_mount._top_level_paths()
862
- except ModuleNotMountable:
863
- # this typically happens if the module is a built-in, has binary components or doesn't exist
864
- continue
865
-
866
- for local_path, remote_path in mount_paths:
867
- if any(local_path.is_relative_to(p) for p in SYS_PREFIXES) or _is_modal_path(remote_path):
868
- # skip any module that has paths in SYS_PREFIXES, or would overwrite the modal Package in the container
869
- break
870
- else:
871
- auto_mounts[module_name] = potential_mount
872
-
873
- return auto_mounts
modal/mount.pyi CHANGED
@@ -308,7 +308,6 @@ def _create_client_mount(): ...
308
308
  def create_client_mount(): ...
309
309
  def _get_client_mount(): ...
310
310
  def _is_modal_path(remote_path: pathlib.PurePosixPath): ...
311
- def get_sys_modules_mounts() -> dict[str, _Mount]: ...
312
311
 
313
312
  ROOT_DIR: pathlib.PurePosixPath
314
313
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.0.0.dev12
3
+ Version: 1.0.0.dev14
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -22,7 +22,7 @@ modal/app.py,sha256=HuZu6c3CExccRcBfA7Geh-c_ajWGHB2w0xlVyDIVXlg,48146
22
22
  modal/app.pyi,sha256=JT6UkaK3bq9TTYLtxHmjApmuEPHM6XZvLCSaCEAIm0E,24219
23
23
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
24
24
  modal/client.py,sha256=o-aQThHpvDHUzg_kUafyhWzACViUBhY2WLZ2EitnSHA,16787
25
- modal/client.pyi,sha256=VEwMNhcD6iXZa2jqFHpmpQTUsiVp4KF74nFl3aeFIvI,8459
25
+ modal/client.pyi,sha256=C19wDiRmUfMS0NWjgxkzpqe8iVa83xyu6DapDexDmuE,8459
26
26
  modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
27
27
  modal/cloud_bucket_mount.pyi,sha256=30T3K1a89l6wzmEJ_J9iWv9SknoGqaZDx59Xs-ZQcmk,1607
28
28
  modal/cls.py,sha256=dBbeARwOWftlKd1cwtM0cHFtQWSWkwVXwVmOV4w0SyI,37907
@@ -45,8 +45,8 @@ modal/image.py,sha256=glnu6LDf3iFq71CGVstHx40CKVN4rw8tukPLAy5JgTQ,92464
45
45
  modal/image.pyi,sha256=NbegOjy6QX_SL-eTxtJm1_4gOJHW04Ja449QHZIdKgU,25586
46
46
  modal/io_streams.py,sha256=YDZVQSDv05DeXg5TwcucC9Rj5hQBx2GXdluan9rIUpw,15467
47
47
  modal/io_streams.pyi,sha256=1UK6kWLREASQfq-wL9wSp5iqjLU0egRZPDn4LXs1PZY,5136
48
- modal/mount.py,sha256=djtfIt9N5t2zujLU9VtVQaYyNazgjGCM9wKv5NxhLf4,32844
49
- modal/mount.pyi,sha256=PHs-N9LGSDfYWw70UrhvGZW_6uWwyx-1GAieROzCNNs,12583
48
+ modal/mount.py,sha256=HbpGQbqqT5pTP4dh8j6USWXb2Fr1ro3V1uHIardkya4,30726
49
+ modal/mount.pyi,sha256=_qDhjR8Xg0ArdCw0JCivhhLCQO-Q-n_RlG5Ct4yJBQ0,12528
50
50
  modal/network_file_system.py,sha256=lgtmHYjzA5gDMx0tysH0-WJB2Ao9JD2W15NyYK2A7_w,14612
51
51
  modal/network_file_system.pyi,sha256=58DiUqHGlARmI3cz-Yo7IFObKKFIiGh5UIU5JxGNFfc,8333
52
52
  modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
@@ -146,7 +146,7 @@ modal/requirements/2024.10.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddR
146
146
  modal/requirements/PREVIEW.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddRo,296
147
147
  modal/requirements/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
148
148
  modal/requirements/base-images.json,sha256=57vMSqzMbLBxw5tFWSaMiIkkVEps4JfX5PAtXGnkS4U,740
149
- modal-1.0.0.dev12.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
149
+ modal-1.0.0.dev14.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
150
150
  modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
151
151
  modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
152
152
  modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
@@ -154,13 +154,13 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
154
154
  modal_docs/mdmd/mdmd.py,sha256=Irx49MCCTlBOP4FBdLR--JrpA3-WhsVeriq0LGgsRic,6232
155
155
  modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
156
156
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
157
- modal_proto/api.proto,sha256=FsDsaAnxXchuynObvATVN_DK08L_n1ORfBgLGcvUtNA,95331
158
- modal_proto/api_grpc.py,sha256=C0nQFKPCQN3lBeke1Xd7x4Jzd5m8RxnuFEoUxjIQIwA,115918
159
- modal_proto/api_pb2.py,sha256=cuBgM8HFj2sRk1Irh7BI2J3gUqlntKFJnn3Btn9Xyz0,335440
160
- modal_proto/api_pb2.pyi,sha256=xCmXaSAZ8woXRcsMebETr-giLcqN6c_BYuUhVXW8IuM,458857
161
- modal_proto/api_pb2_grpc.py,sha256=dlQcjQVsUJN6cTG9JX6fxaB2iXUFyfhEF9VtQIh-yZE,250736
162
- modal_proto/api_pb2_grpc.pyi,sha256=5j_xfVcvGDXmr9vpUQofD6aLpaI2ZfIdefB9jBHtqnE,58657
163
- modal_proto/modal_api_grpc.py,sha256=kmpUqh6tc-mgqsZdH7JeFGrA4HULZggCSI2nDz65JvA,17532
157
+ modal_proto/api.proto,sha256=Qp0gpXAw0H8X8oPrU2Aa-_kewoI53-bUf0LWe_DO4hM,95862
158
+ modal_proto/api_grpc.py,sha256=iY5o_Tm4VDP-Wa1JgA_NpQa_Y-4FYB_RN9wdSUExjwI,117469
159
+ modal_proto/api_pb2.py,sha256=Jvq4X0FG5xQaiNVr7XlOZQWfmm_9b2JmN8LNT2hJJdU,337902
160
+ modal_proto/api_pb2.pyi,sha256=KNcKpRgynsi3y6bVGen_y6FrHnXXUMOyREqbJExqb6Y,461341
161
+ modal_proto/api_pb2_grpc.py,sha256=NL5prOS_hh_pA1hVvQP_ZRE1w49N-PR8iNPRZ65i6nA,254089
162
+ modal_proto/api_pb2_grpc.pyi,sha256=Xxgdcnv1mBnu5_AQxJ6fo0yz7GnqVU0HVObNfZWHVfM,59440
163
+ modal_proto/modal_api_grpc.py,sha256=0ir2lnwT3-IgPcAWw98yWMAiqZPkjvNro9UBk4u8hnk,17763
164
164
  modal_proto/modal_options_grpc.py,sha256=qJ1cuwA54oRqrdTyPTbvfhFZYd9HhJKK5UCwt523r3Y,120
165
165
  modal_proto/options.proto,sha256=zp9h5r61ivsp0XwEWwNBsVqNTbRA1VSY_UtN7sEcHtE,549
166
166
  modal_proto/options_grpc.py,sha256=M18X3d-8F_cNYSVM3I25dUTO5rZ0rd-vCCfynfh13Nc,125
@@ -169,10 +169,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
169
169
  modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
170
170
  modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
171
171
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
- modal_version/__init__.py,sha256=dXFOMp_84VL3XvjRUaCxSaVjkW3Z3UfAwaVrsX4B1uQ,121
172
+ modal_version/__init__.py,sha256=QmxfDN_Pb98otTMAjgLVfOaVZb6eomqwBOF8uqbmvrI,121
173
173
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
174
- modal-1.0.0.dev12.dist-info/METADATA,sha256=i_ibjGDttvlb51N0oZpOTTI1PRl2f6KICf3WMAlIZWQ,2455
175
- modal-1.0.0.dev12.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
176
- modal-1.0.0.dev12.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
177
- modal-1.0.0.dev12.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
178
- modal-1.0.0.dev12.dist-info/RECORD,,
174
+ modal-1.0.0.dev14.dist-info/METADATA,sha256=vXEUlkRYPfpijnZrkjhIxCaWF0pENgYw9l4E0aXKLtI,2455
175
+ modal-1.0.0.dev14.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
176
+ modal-1.0.0.dev14.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
177
+ modal-1.0.0.dev14.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
178
+ modal-1.0.0.dev14.dist-info/RECORD,,
modal_proto/api.proto CHANGED
@@ -2972,6 +2972,17 @@ message VolumeHeartbeatRequest {
2972
2972
  string volume_id = 1;
2973
2973
  }
2974
2974
 
2975
+ message VolumeListFiles2Request {
2976
+ string volume_id = 1;
2977
+ string path = 2;
2978
+ bool recursive = 4;
2979
+ optional uint32 max_entries = 3;
2980
+ }
2981
+
2982
+ message VolumeListFiles2Response {
2983
+ repeated FileEntry entries = 1;
2984
+ }
2985
+
2975
2986
  message VolumeListFilesRequest {
2976
2987
  string volume_id = 1;
2977
2988
  string path = 2;
@@ -3090,6 +3101,12 @@ message VolumeReloadRequest {
3090
3101
  string volume_id = 1;
3091
3102
  }
3092
3103
 
3104
+ message VolumeRemoveFile2Request {
3105
+ string volume_id = 1 [ (modal.options.audit_target_attr) = true ];
3106
+ string path = 2;
3107
+ bool recursive = 3;
3108
+ }
3109
+
3093
3110
  message VolumeRemoveFileRequest {
3094
3111
  string volume_id = 1 [ (modal.options.audit_target_attr) = true ];
3095
3112
  string path = 2;
@@ -3329,10 +3346,12 @@ service ModalClient {
3329
3346
  rpc VolumeHeartbeat(VolumeHeartbeatRequest) returns (google.protobuf.Empty);
3330
3347
  rpc VolumeList(VolumeListRequest) returns (VolumeListResponse);
3331
3348
  rpc VolumeListFiles(VolumeListFilesRequest) returns (stream VolumeListFilesResponse);
3349
+ rpc VolumeListFiles2(VolumeListFiles2Request) returns (stream VolumeListFiles2Response);
3332
3350
  rpc VolumePutFiles(VolumePutFilesRequest) returns (google.protobuf.Empty);
3333
3351
  rpc VolumePutFiles2(VolumePutFiles2Request) returns (VolumePutFiles2Response);
3334
3352
  rpc VolumeReload(VolumeReloadRequest) returns (google.protobuf.Empty);
3335
3353
  rpc VolumeRemoveFile(VolumeRemoveFileRequest) returns (google.protobuf.Empty);
3354
+ rpc VolumeRemoveFile2(VolumeRemoveFile2Request) returns (google.protobuf.Empty);
3336
3355
  rpc VolumeRename(VolumeRenameRequest) returns (google.protobuf.Empty);
3337
3356
 
3338
3357
  // Workspaces
modal_proto/api_grpc.py CHANGED
@@ -598,6 +598,10 @@ class ModalClientBase(abc.ABC):
598
598
  async def VolumeListFiles(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.VolumeListFilesRequest, modal_proto.api_pb2.VolumeListFilesResponse]') -> None:
599
599
  pass
600
600
 
601
+ @abc.abstractmethod
602
+ async def VolumeListFiles2(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.VolumeListFiles2Request, modal_proto.api_pb2.VolumeListFiles2Response]') -> None:
603
+ pass
604
+
601
605
  @abc.abstractmethod
602
606
  async def VolumePutFiles(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.VolumePutFilesRequest, google.protobuf.empty_pb2.Empty]') -> None:
603
607
  pass
@@ -614,6 +618,10 @@ class ModalClientBase(abc.ABC):
614
618
  async def VolumeRemoveFile(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.VolumeRemoveFileRequest, google.protobuf.empty_pb2.Empty]') -> None:
615
619
  pass
616
620
 
621
+ @abc.abstractmethod
622
+ async def VolumeRemoveFile2(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.VolumeRemoveFile2Request, google.protobuf.empty_pb2.Empty]') -> None:
623
+ pass
624
+
617
625
  @abc.abstractmethod
618
626
  async def VolumeRename(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.VolumeRenameRequest, google.protobuf.empty_pb2.Empty]') -> None:
619
627
  pass
@@ -1494,6 +1502,12 @@ class ModalClientBase(abc.ABC):
1494
1502
  modal_proto.api_pb2.VolumeListFilesRequest,
1495
1503
  modal_proto.api_pb2.VolumeListFilesResponse,
1496
1504
  ),
1505
+ '/modal.client.ModalClient/VolumeListFiles2': grpclib.const.Handler(
1506
+ self.VolumeListFiles2,
1507
+ grpclib.const.Cardinality.UNARY_STREAM,
1508
+ modal_proto.api_pb2.VolumeListFiles2Request,
1509
+ modal_proto.api_pb2.VolumeListFiles2Response,
1510
+ ),
1497
1511
  '/modal.client.ModalClient/VolumePutFiles': grpclib.const.Handler(
1498
1512
  self.VolumePutFiles,
1499
1513
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1518,6 +1532,12 @@ class ModalClientBase(abc.ABC):
1518
1532
  modal_proto.api_pb2.VolumeRemoveFileRequest,
1519
1533
  google.protobuf.empty_pb2.Empty,
1520
1534
  ),
1535
+ '/modal.client.ModalClient/VolumeRemoveFile2': grpclib.const.Handler(
1536
+ self.VolumeRemoveFile2,
1537
+ grpclib.const.Cardinality.UNARY_UNARY,
1538
+ modal_proto.api_pb2.VolumeRemoveFile2Request,
1539
+ google.protobuf.empty_pb2.Empty,
1540
+ ),
1521
1541
  '/modal.client.ModalClient/VolumeRename': grpclib.const.Handler(
1522
1542
  self.VolumeRename,
1523
1543
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -2406,6 +2426,12 @@ class ModalClientStub:
2406
2426
  modal_proto.api_pb2.VolumeListFilesRequest,
2407
2427
  modal_proto.api_pb2.VolumeListFilesResponse,
2408
2428
  )
2429
+ self.VolumeListFiles2 = grpclib.client.UnaryStreamMethod(
2430
+ channel,
2431
+ '/modal.client.ModalClient/VolumeListFiles2',
2432
+ modal_proto.api_pb2.VolumeListFiles2Request,
2433
+ modal_proto.api_pb2.VolumeListFiles2Response,
2434
+ )
2409
2435
  self.VolumePutFiles = grpclib.client.UnaryUnaryMethod(
2410
2436
  channel,
2411
2437
  '/modal.client.ModalClient/VolumePutFiles',
@@ -2430,6 +2456,12 @@ class ModalClientStub:
2430
2456
  modal_proto.api_pb2.VolumeRemoveFileRequest,
2431
2457
  google.protobuf.empty_pb2.Empty,
2432
2458
  )
2459
+ self.VolumeRemoveFile2 = grpclib.client.UnaryUnaryMethod(
2460
+ channel,
2461
+ '/modal.client.ModalClient/VolumeRemoveFile2',
2462
+ modal_proto.api_pb2.VolumeRemoveFile2Request,
2463
+ google.protobuf.empty_pb2.Empty,
2464
+ )
2433
2465
  self.VolumeRename = grpclib.client.UnaryUnaryMethod(
2434
2466
  channel,
2435
2467
  '/modal.client.ModalClient/VolumeRename',