modal 1.0.3.dev1__py3-none-any.whl → 1.0.3.dev4__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/cli/volume.py CHANGED
@@ -154,6 +154,10 @@ async def ls(
154
154
  filetype = "dir"
155
155
  elif entry.type == api_pb2.FileEntry.FileType.SYMLINK:
156
156
  filetype = "link"
157
+ elif entry.type == api_pb2.FileEntry.FileType.FIFO:
158
+ filetype = "fifo"
159
+ elif entry.type == api_pb2.FileEntry.FileType.SOCKET:
160
+ filetype = "socket"
157
161
  else:
158
162
  filetype = "file"
159
163
  rows.append(
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.3.dev1",
34
+ version: str = "1.0.3.dev4",
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.3.dev1",
97
+ version: str = "1.0.3.dev4",
98
98
  ): ...
99
99
  def is_closed(self) -> bool: ...
100
100
  @property
modal/functions.pyi CHANGED
@@ -227,11 +227,11 @@ class Function(
227
227
 
228
228
  _call_generator: ___call_generator_spec[typing_extensions.Self]
229
229
 
230
- class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
230
+ class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
231
231
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
232
232
  async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
233
233
 
234
- remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
234
+ remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
235
235
 
236
236
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
237
237
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
@@ -246,12 +246,12 @@ class Function(
246
246
  self, *args: modal._functions.P.args, **kwargs: modal._functions.P.kwargs
247
247
  ) -> modal._functions.OriginalReturnType: ...
248
248
 
249
- class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
249
+ class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
250
250
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
251
251
  async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
252
252
 
253
253
  _experimental_spawn: ___experimental_spawn_spec[
254
- modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
254
+ modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
255
255
  ]
256
256
 
257
257
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
@@ -260,11 +260,11 @@ class Function(
260
260
 
261
261
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
262
262
 
263
- class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
263
+ class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
264
264
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
265
265
  async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
266
266
 
267
- spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
267
+ spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
268
268
 
269
269
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
270
270
 
modal/image.py CHANGED
@@ -647,7 +647,13 @@ class _Image(_Object, type_prefix="im"):
647
647
  metadata = resp.metadata
648
648
 
649
649
  if result.status == api_pb2.GenericResult.GENERIC_STATUS_FAILURE:
650
- raise RemoteError(f"Image build for {image_id} failed with the exception:\n{result.exception}")
650
+ if result.exception:
651
+ raise RemoteError(f"Image build for {image_id} failed with the exception:\n{result.exception}")
652
+ else:
653
+ msg = f"Image build for {image_id} failed. See build logs for more details."
654
+ if not _get_output_manager():
655
+ msg += " (Hint: Use `modal.enable_output()` to see logs from the process building the Image.)"
656
+ raise RemoteError(msg)
651
657
  elif result.status == api_pb2.GenericResult.GENERIC_STATUS_TERMINATED:
652
658
  raise RemoteError(f"Image build for {image_id} terminated due to external shut-down. Please try again.")
653
659
  elif result.status == api_pb2.GenericResult.GENERIC_STATUS_TIMEOUT:
@@ -1522,12 +1528,14 @@ class _Image(_Object, type_prefix="im"):
1522
1528
  modal_requirements_commands = []
1523
1529
  if builder_version <= "2024.10":
1524
1530
  # past 2024.10, client dependencies are mounted at runtime
1525
- modal_requirements_commands.extend([
1526
- f"COPY {CONTAINER_REQUIREMENTS_PATH} {CONTAINER_REQUIREMENTS_PATH}",
1527
- f"RUN python -m pip install --upgrade {_base_image_config('package_tools', builder_version)}",
1528
- f"RUN {requirements_prefix}{_get_modal_requirements_command(builder_version)}",
1529
- ])
1530
- if "2024.10" >= builder_version > "2023.12":
1531
+ modal_requirements_commands.extend(
1532
+ [
1533
+ f"COPY {CONTAINER_REQUIREMENTS_PATH} {CONTAINER_REQUIREMENTS_PATH}",
1534
+ f"RUN python -m pip install --upgrade {_base_image_config('package_tools', builder_version)}",
1535
+ f"RUN {requirements_prefix}{_get_modal_requirements_command(builder_version)}",
1536
+ ]
1537
+ )
1538
+ if "2024.10" >= builder_version > "2023.12":
1531
1539
  modal_requirements_commands.append(f"RUN rm {CONTAINER_REQUIREMENTS_PATH}")
1532
1540
 
1533
1541
  return [
@@ -1830,23 +1838,31 @@ class _Image(_Object, type_prefix="im"):
1830
1838
  f"FROM python:{full_python_version}-slim-{debian_codename}",
1831
1839
  ]
1832
1840
  if version <= "2024.10":
1833
- commands.extend([
1834
- f"COPY {CONTAINER_REQUIREMENTS_PATH} {CONTAINER_REQUIREMENTS_PATH}",
1835
- ])
1836
- commands.extend([
1837
- "RUN apt-get update",
1838
- "RUN apt-get install -y gcc gfortran build-essential",
1839
- f"RUN pip install --upgrade {_base_image_config('package_tools', version)}",
1840
- ])
1841
+ commands.extend(
1842
+ [
1843
+ f"COPY {CONTAINER_REQUIREMENTS_PATH} {CONTAINER_REQUIREMENTS_PATH}",
1844
+ ]
1845
+ )
1846
+ commands.extend(
1847
+ [
1848
+ "RUN apt-get update",
1849
+ "RUN apt-get install -y gcc gfortran build-essential",
1850
+ f"RUN pip install --upgrade {_base_image_config('package_tools', version)}",
1851
+ ]
1852
+ )
1841
1853
  if version <= "2024.10":
1842
1854
  # after 2024.10, modal requirements are mounted at runtime
1843
- commands.extend([
1844
- f"RUN {_get_modal_requirements_command(version)}",
1845
- ])
1846
- commands.extend([
1847
- # Set debian front-end to non-interactive to avoid users getting stuck with input prompts.
1848
- "RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections",
1849
- ])
1855
+ commands.extend(
1856
+ [
1857
+ f"RUN {_get_modal_requirements_command(version)}",
1858
+ ]
1859
+ )
1860
+ commands.extend(
1861
+ [
1862
+ # Set debian front-end to non-interactive to avoid users getting stuck with input prompts.
1863
+ "RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections",
1864
+ ]
1865
+ )
1850
1866
  if "2024.10" >= version > "2023.12":
1851
1867
  commands.append(f"RUN rm {CONTAINER_REQUIREMENTS_PATH}")
1852
1868
  if version > "2024.10":
modal/volume.py CHANGED
@@ -69,6 +69,8 @@ class FileEntryType(enum.IntEnum):
69
69
  FILE = 1
70
70
  DIRECTORY = 2
71
71
  SYMLINK = 3
72
+ FIFO = 4
73
+ SOCKET = 5
72
74
 
73
75
 
74
76
  @dataclass(frozen=True)
modal/volume.pyi CHANGED
@@ -20,6 +20,8 @@ class FileEntryType(enum.IntEnum):
20
20
  FILE = 1
21
21
  DIRECTORY = 2
22
22
  SYMLINK = 3
23
+ FIFO = 4
24
+ SOCKET = 5
23
25
 
24
26
  class FileEntry:
25
27
  path: str
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.0.3.dev1
3
+ Version: 1.0.3.dev4
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=NZ_rJ9TuMfiNiLg8-gOFgufD5flGtXWPHOZI0gdD3hE,46585
22
22
  modal/app.pyi,sha256=4-b_vbe3lNAqQPcMRpQCEDsE1zsVkQRJGUql9B7HvbM,22659
23
23
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
24
24
  modal/client.py,sha256=OwISJvkgMb-rHm9Gc4i-7YcDgGiZgwJ7F_PzwZH7a6Q,16847
25
- modal/client.pyi,sha256=iv4ItfqPD-p4vLR2Z0qt8UKnfmM_trZzim8JZzZrZxo,8457
25
+ modal/client.pyi,sha256=O7LWOJJCKHLp3Ho6jja5rBYV66K7C9w8Eb_daZpYu7E,8457
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
@@ -39,9 +39,9 @@ modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
39
39
  modal/file_io.pyi,sha256=oB7x-rKq7bmm8cA7Z7W9C9yeko7KK9m9i5GidFnkGK4,9569
40
40
  modal/file_pattern_matcher.py,sha256=wov-otB5M1oTdrYDtR2_VgacYin2srdtAP4McA1Cqzw,6516
41
41
  modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
42
- modal/functions.pyi,sha256=iqdp5ixtOOlm8bF-QYbD_G8VKqSRt_AVLT7AWjpn6pQ,16236
42
+ modal/functions.pyi,sha256=5T58OucdNU4I-LqhBdwsWSAGka-Wa8nP2GcZ5K1bOL0,16236
43
43
  modal/gpu.py,sha256=Kbhs_u49FaC2Zi0TjCdrpstpRtT5eZgecynmQi5IZVE,6752
44
- modal/image.py,sha256=-ia4ELkIh4sxOSqdYETAPV8EEb58Nue6DLdAxhM2C_Y,92687
44
+ modal/image.py,sha256=yrI9DCw7GAck3d788GCHJom-_yU55zNu7reNapBhlgE,93284
45
45
  modal/image.pyi,sha256=2xjB6XOZDtm_chDdd90UoIj8pnDt5hCg6bOmu5fNaA4,25625
46
46
  modal/io_streams.py,sha256=YDZVQSDv05DeXg5TwcucC9Rj5hQBx2GXdluan9rIUpw,15467
47
47
  modal/io_streams.pyi,sha256=1UK6kWLREASQfq-wL9wSp5iqjLU0egRZPDn4LXs1PZY,5136
@@ -78,8 +78,8 @@ modal/snapshot.pyi,sha256=dIEBdTPb7O3VwkQ8TMPjfyU17RLuS9i0DnACxxHy8X4,676
78
78
  modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
79
79
  modal/token_flow.py,sha256=0_4KabXKsuE4OXTJ1OuLOtA-b1sesShztMZkkRFK7tA,7605
80
80
  modal/token_flow.pyi,sha256=ILbRv6JsZq-jK8jcJM7eB74e0PsbzwBm7hyPcV9lBlQ,2121
81
- modal/volume.py,sha256=LO8hYt2y0BOXsWzjMUUfOhSxBs7eILgTP5Lvi0IRjxM,44092
82
- modal/volume.pyi,sha256=fM1RRKz521eIzM3Cd7osAhQ3UQEboQEjXWLQKerjSzY,21117
81
+ modal/volume.py,sha256=XtOxzvdTJ3H7BEldl5Puj6vvXucev0i6KWI5tgkXe7I,44120
82
+ modal/volume.pyi,sha256=YZqC3-z4bfiTgb1-uO7XylrONvIsHQUZd9pqW_Wxd48,21145
83
83
  modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
84
84
  modal/_runtime/asgi.py,sha256=_2xSTsDD27Cit7xnMs4lzkJA2wzer2_N4Oa3BkXFzVA,22521
85
85
  modal/_runtime/container_io_manager.py,sha256=6j0jO2-s9ShckM4SK45OapoQxWW9HQwQjFaBkXPJPwU,44763
@@ -134,7 +134,7 @@ modal/cli/run.py,sha256=DPa-yQ9o7vjqwvs_TAOvVJxS51yVn__ZGCnbkORL37g,23972
134
134
  modal/cli/secret.py,sha256=oLFEPZoyyeMUKPaJZ9JKKl5mfkQU80DGF9p0atotqig,5002
135
135
  modal/cli/token.py,sha256=mxSgOWakXG6N71hQb1ko61XAR9ZGkTMZD-Txn7gmTac,1924
136
136
  modal/cli/utils.py,sha256=9Q7DIUX78-c19zBQNA7EtkgqIFatvHWUVGHwUIeBX_0,3366
137
- modal/cli/volume.py,sha256=_QYbB52LLD3Q8eKHFn7bW3Xu0il5A4UkwjjU63hKjEQ,10534
137
+ modal/cli/volume.py,sha256=h0Lk4CWe37L8X1kOpCj_KXfGGCEZf799fkX6Tbd6BPg,10734
138
138
  modal/cli/programs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
139
139
  modal/cli/programs/run_jupyter.py,sha256=44Lpvqk2l3hH-uOkmAOzw60NEsfB5uaRDWDKVshvQhs,2682
140
140
  modal/cli/programs/vscode.py,sha256=KbTAaIXyQBVCDXxXjmBHmKpgXkUw0q4R4KkJvUjCYgk,3380
@@ -147,7 +147,7 @@ modal/requirements/2024.10.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddR
147
147
  modal/requirements/PREVIEW.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddRo,296
148
148
  modal/requirements/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
149
149
  modal/requirements/base-images.json,sha256=57vMSqzMbLBxw5tFWSaMiIkkVEps4JfX5PAtXGnkS4U,740
150
- modal-1.0.3.dev1.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
150
+ modal-1.0.3.dev4.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
151
151
  modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
152
152
  modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
153
153
  modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
@@ -155,10 +155,10 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
155
155
  modal_docs/mdmd/mdmd.py,sha256=Irx49MCCTlBOP4FBdLR--JrpA3-WhsVeriq0LGgsRic,6232
156
156
  modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
157
157
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
158
- modal_proto/api.proto,sha256=TZU4O7rl6_3p0kPhwtCFpUzF2ev7nogfT_dJia1q0YA,95957
158
+ modal_proto/api.proto,sha256=FyLGiHa2x4nfhp__RIQoLNCC9YiEkGwAD4L_1_L_c74,95987
159
159
  modal_proto/api_grpc.py,sha256=iY5o_Tm4VDP-Wa1JgA_NpQa_Y-4FYB_RN9wdSUExjwI,117469
160
- modal_proto/api_pb2.py,sha256=05O5ZucslpXNOq5JMbC8HkqYl4YNJt_h6fqHQuK9yXw,338105
161
- modal_proto/api_pb2.pyi,sha256=u-YdDR8e6cjSSID-wRuCUeOiEZuhVP9XNY_pTlrC820,462457
160
+ modal_proto/api_pb2.py,sha256=gfIbmTvW35YuF2XbBlkeAd5kJCuPmW6Y599WXPYMhDA,338160
161
+ modal_proto/api_pb2.pyi,sha256=GMzMDQ2xzwO8OO39lUYMZs9TKwJGTg8re5qT29j4x1o,462647
162
162
  modal_proto/api_pb2_grpc.py,sha256=NL5prOS_hh_pA1hVvQP_ZRE1w49N-PR8iNPRZ65i6nA,254089
163
163
  modal_proto/api_pb2_grpc.pyi,sha256=Xxgdcnv1mBnu5_AQxJ6fo0yz7GnqVU0HVObNfZWHVfM,59440
164
164
  modal_proto/modal_api_grpc.py,sha256=0ir2lnwT3-IgPcAWw98yWMAiqZPkjvNro9UBk4u8hnk,17763
@@ -170,10 +170,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
170
170
  modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
171
171
  modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
172
172
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
- modal_version/__init__.py,sha256=-hKMo-FD_l2eMd31PqxjXyxP0vhUZAJH-NoFqCjuMyU,120
173
+ modal_version/__init__.py,sha256=uMhqtiyIc6QkUQY3HgLvwocgsoPeWZCufzxM46vCWOU,120
174
174
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
175
- modal-1.0.3.dev1.dist-info/METADATA,sha256=RkvyYAet_IIc_aj4AyINWE5EDRIOX8nspvziQhbpwdg,2454
176
- modal-1.0.3.dev1.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
177
- modal-1.0.3.dev1.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
178
- modal-1.0.3.dev1.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
179
- modal-1.0.3.dev1.dist-info/RECORD,,
175
+ modal-1.0.3.dev4.dist-info/METADATA,sha256=lxYOA3CezF1MYQe7df4R92W7M1WmrAFwHNyJui75odc,2454
176
+ modal-1.0.3.dev4.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
177
+ modal-1.0.3.dev4.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
178
+ modal-1.0.3.dev4.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
179
+ modal-1.0.3.dev4.dist-info/RECORD,,
modal_proto/api.proto CHANGED
@@ -1216,6 +1216,8 @@ message FileEntry {
1216
1216
  FILE = 1;
1217
1217
  DIRECTORY = 2;
1218
1218
  SYMLINK = 3;
1219
+ FIFO = 4;
1220
+ SOCKET = 5;
1219
1221
  }
1220
1222
  string path = 1;
1221
1223
  FileType type = 2;