modal 0.73.28__py3-none-any.whl → 0.73.29__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/__main__.py CHANGED
@@ -66,7 +66,7 @@ def main():
66
66
  title = "Error"
67
67
  content = str(exc)
68
68
  if notes := getattr(exc, "__notes__", []):
69
- content = f"{content}\n\nNote: {' ' .join(notes)}"
69
+ content = f"{content}\n\nNote: {' '.join(notes)}"
70
70
 
71
71
  console = Console(stderr=True)
72
72
  panel = Panel(Text(content), title=title, title_align="left", border_style="red")
modal/_functions.py CHANGED
@@ -398,9 +398,9 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
398
398
  _use_method_name: str = ""
399
399
 
400
400
  _class_parameter_info: Optional["api_pb2.ClassParameterInfo"] = None
401
- _method_handle_metadata: Optional[
402
- dict[str, "api_pb2.FunctionHandleMetadata"]
403
- ] = None # set for 0.67+ class service functions
401
+ _method_handle_metadata: Optional[dict[str, "api_pb2.FunctionHandleMetadata"]] = (
402
+ None # set for 0.67+ class service functions
403
+ )
404
404
 
405
405
  def _bind_method(
406
406
  self,
@@ -176,23 +176,19 @@ class _MethodDecoratorType:
176
176
  def __call__(
177
177
  self,
178
178
  func: "modal.partial_function.PartialFunction[typing_extensions.Concatenate[Any, P], ReturnType, OriginalReturnType]", # noqa
179
- ) -> "modal.partial_function.PartialFunction[P, ReturnType, OriginalReturnType]":
180
- ...
179
+ ) -> "modal.partial_function.PartialFunction[P, ReturnType, OriginalReturnType]": ...
181
180
 
182
181
  @typing.overload
183
182
  def __call__(
184
183
  self, func: "Callable[typing_extensions.Concatenate[Any, P], Coroutine[Any, Any, ReturnType]]"
185
- ) -> "modal.partial_function.PartialFunction[P, ReturnType, Coroutine[Any, Any, ReturnType]]":
186
- ...
184
+ ) -> "modal.partial_function.PartialFunction[P, ReturnType, Coroutine[Any, Any, ReturnType]]": ...
187
185
 
188
186
  @typing.overload
189
187
  def __call__(
190
188
  self, func: "Callable[typing_extensions.Concatenate[Any, P], ReturnType]"
191
- ) -> "modal.partial_function.PartialFunction[P, ReturnType, ReturnType]":
192
- ...
189
+ ) -> "modal.partial_function.PartialFunction[P, ReturnType, ReturnType]": ...
193
190
 
194
- def __call__(self, func):
195
- ...
191
+ def __call__(self, func): ...
196
192
 
197
193
 
198
194
  # TODO(elias): fix support for coroutine type unwrapping for methods (static typing)
modal/_resolver.py CHANGED
@@ -142,8 +142,7 @@ class Resolver:
142
142
  and obj.object_id != existing_object_id
143
143
  ):
144
144
  raise Exception(
145
- f"Tried creating an object using existing id {existing_object_id}"
146
- f" but it has id {obj.object_id}"
145
+ f"Tried creating an object using existing id {existing_object_id} but it has id {obj.object_id}"
147
146
  )
148
147
 
149
148
  return obj
@@ -896,7 +896,7 @@ class _ContainerIOManager:
896
896
  gpu_process_state = gpu_memory_snapshot.get_state()
897
897
  if gpu_process_state != gpu_memory_snapshot.CudaCheckpointState.RUNNING:
898
898
  raise ValueError(
899
- "Cannot snapshot GPU state if it isn't running. " f"Current GPU state: {gpu_process_state}"
899
+ f"Cannot snapshot GPU state if it isn't running. Current GPU state: {gpu_process_state}"
900
900
  )
901
901
 
902
902
  gpu_memory_snapshot.toggle()
@@ -46,8 +46,7 @@ class Service(metaclass=ABCMeta):
46
46
  @abstractmethod
47
47
  def get_finalized_functions(
48
48
  self, fun_def: api_pb2.Function, container_io_manager: "modal._runtime.container_io_manager.ContainerIOManager"
49
- ) -> dict[str, "FinalizedFunction"]:
50
- ...
49
+ ) -> dict[str, "FinalizedFunction"]: ...
51
50
 
52
51
 
53
52
  def construct_webhook_callable(
@@ -505,13 +505,11 @@ async def sync_or_async_iter(iter: Union[Iterable[T], AsyncIterable[T]]) -> Asyn
505
505
 
506
506
 
507
507
  @typing.overload
508
- def async_zip(g1: AsyncGenerator[T, None], g2: AsyncGenerator[V, None], /) -> AsyncGenerator[tuple[T, V], None]:
509
- ...
508
+ def async_zip(g1: AsyncGenerator[T, None], g2: AsyncGenerator[V, None], /) -> AsyncGenerator[tuple[T, V], None]: ...
510
509
 
511
510
 
512
511
  @typing.overload
513
- def async_zip(*generators: AsyncGenerator[T, None]) -> AsyncGenerator[tuple[T, ...], None]:
514
- ...
512
+ def async_zip(*generators: AsyncGenerator[T, None]) -> AsyncGenerator[tuple[T, ...], None]: ...
515
513
 
516
514
 
517
515
  async def async_zip(*generators):
@@ -561,8 +559,7 @@ class ExceptionWrapper:
561
559
  value: Exception
562
560
 
563
561
 
564
- class StopSentinelType:
565
- ...
562
+ class StopSentinelType: ...
566
563
 
567
564
 
568
565
  STOP_SENTINEL = StopSentinelType()
@@ -227,7 +227,7 @@ async def blob_upload(payload: bytes, stub: ModalClientModal) -> str:
227
227
  blob_id = await _blob_upload(upload_hashes, payload, stub)
228
228
  dur_s = max(time.time() - t0, 0.001) # avoid division by zero
229
229
  throughput_mib_s = (size_mib) / dur_s
230
- logger.debug(f"Uploaded large blob of size {size_mib:.2f} MiB ({throughput_mib_s:.2f} MiB/s)." f" {blob_id}")
230
+ logger.debug(f"Uploaded large blob of size {size_mib:.2f} MiB ({throughput_mib_s:.2f} MiB/s). {blob_id}")
231
231
  return blob_id
232
232
 
233
233
 
@@ -246,7 +246,6 @@ class FunctionInfo:
246
246
 
247
247
  def get_cls_var_attrs(self) -> dict[str, Any]:
248
248
  import dis
249
-
250
249
  import opcode
251
250
 
252
251
  LOAD_ATTR = opcode.opmap["LOAD_ATTR"]
@@ -603,7 +602,7 @@ class FunctionCreationStatus:
603
602
  for custom_domain in self.response.function.custom_domain_info:
604
603
  custom_domain_status_row = self.resolver.add_status_row()
605
604
  custom_domain_status_row.finish(
606
- f"Custom domain for {self.tag} => [magenta underline]" f"{custom_domain.url}[/magenta underline]"
605
+ f"Custom domain for {self.tag} => [magenta underline]{custom_domain.url}[/magenta underline]"
607
606
  )
608
607
  else:
609
608
  self.status_row.finish(f"Created function {self.tag}.")
modal/app.py CHANGED
@@ -102,21 +102,19 @@ class _FunctionDecoratorType:
102
102
  @overload
103
103
  def __call__(
104
104
  self, func: PartialFunction[P, ReturnType, OriginalReturnType]
105
- ) -> Function[P, ReturnType, OriginalReturnType]:
106
- ... # already wrapped by a modal decorator, e.g. web_endpoint
105
+ ) -> Function[P, ReturnType, OriginalReturnType]: ... # already wrapped by a modal decorator, e.g. web_endpoint
107
106
 
108
107
  @overload
109
108
  def __call__(
110
109
  self, func: Callable[P, Coroutine[Any, Any, ReturnType]]
111
- ) -> Function[P, ReturnType, Coroutine[Any, Any, ReturnType]]:
112
- ... # decorated async function
110
+ ) -> Function[P, ReturnType, Coroutine[Any, Any, ReturnType]]: ... # decorated async function
113
111
 
114
112
  @overload
115
- def __call__(self, func: Callable[P, ReturnType]) -> Function[P, ReturnType, ReturnType]:
116
- ... # decorated non-async function
113
+ def __call__(
114
+ self, func: Callable[P, ReturnType]
115
+ ) -> Function[P, ReturnType, ReturnType]: ... # decorated non-async function
117
116
 
118
- def __call__(self, func):
119
- ...
117
+ def __call__(self, func): ...
120
118
 
121
119
 
122
120
  class _App:
modal/cli/entry_point.py CHANGED
@@ -69,7 +69,7 @@ def check_path():
69
69
  "[red]The `[white]modal[/white]` command is not executable!\n"
70
70
  "You may need to give it permissions or use `[white]python -m modal[/white]` as a workaround.[/red]\n"
71
71
  )
72
- text += "See more information here:\n\n" f"[link={url}]{url}[/link]\n"
72
+ text += f"See more information here:\n\n[link={url}]{url}[/link]\n"
73
73
  console = Console()
74
74
  console.print(text)
75
75
  console.print(Rule(style="white"))
modal/cli/run.py CHANGED
@@ -230,8 +230,7 @@ def _get_click_command_for_cls(app: App, method_ref: MethodReference):
230
230
  method_name = method_names[0]
231
231
  else:
232
232
  raise click.UsageError(
233
- f"Please specify a specific method of {cls._get_name()} to run, "
234
- f"e.g. `modal run foo.py::MyClass.bar`" # noqa: E501
233
+ f"Please specify a specific method of {cls._get_name()} to run, e.g. `modal run foo.py::MyClass.bar`" # noqa: E501
235
234
  )
236
235
 
237
236
  partial_function = partial_functions[method_name]
@@ -493,7 +492,7 @@ def shell(
493
492
  cloud: Optional[str] = typer.Option(
494
493
  default=None,
495
494
  help=(
496
- "Cloud provider to run the shell on. " "Possible values are `aws`, `gcp`, `oci`, `auto` (if not using REF)."
495
+ "Cloud provider to run the shell on. Possible values are `aws`, `gcp`, `oci`, `auto` (if not using REF)."
497
496
  ),
498
497
  ),
499
498
  region: Optional[str] = typer.Option(
modal/cli/secret.py CHANGED
@@ -85,7 +85,7 @@ def some_function():
85
85
  """
86
86
  plural_s = "s" if len(env_dict) > 1 else ""
87
87
  console.print(
88
- f"""Created a new secret '{secret_name}' with the key{plural_s} {', '.join(repr(k) for k in env_dict.keys())}"""
88
+ f"""Created a new secret '{secret_name}' with the key{plural_s} {", ".join(repr(k) for k in env_dict.keys())}"""
89
89
  )
90
90
  console.print("\nUse it in to your Modal app using:\n")
91
91
  console.print(Syntax(example_code, "python"))
modal/cli/volume.py CHANGED
@@ -297,8 +297,7 @@ async def rename(
297
297
  ):
298
298
  if not yes:
299
299
  typer.confirm(
300
- f"Are you sure you want rename the modal.Volume '{old_name}'?"
301
- " This may break any Apps currently using it.",
300
+ f"Are you sure you want rename the modal.Volume '{old_name}'? This may break any Apps currently using it.",
302
301
  default=False,
303
302
  abort=True,
304
303
  )
modal/client.pyi CHANGED
@@ -27,7 +27,7 @@ class _Client:
27
27
  _snapshotted: bool
28
28
 
29
29
  def __init__(
30
- self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.28"
30
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.29"
31
31
  ): ...
32
32
  def is_closed(self) -> bool: ...
33
33
  @property
@@ -85,7 +85,7 @@ class Client:
85
85
  _snapshotted: bool
86
86
 
87
87
  def __init__(
88
- self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.28"
88
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.29"
89
89
  ): ...
90
90
  def is_closed(self) -> bool: ...
91
91
  @property
modal/environments.py CHANGED
@@ -29,9 +29,7 @@ class _Environment(_Object, type_prefix="en"):
29
29
 
30
30
  def __init__(self):
31
31
  """mdmd:hidden"""
32
- raise RuntimeError(
33
- "`Environment(...)` constructor is not allowed." " Please use `Environment.from_name` instead."
34
- )
32
+ raise RuntimeError("`Environment(...)` constructor is not allowed. Please use `Environment.from_name` instead.")
35
33
 
36
34
  # TODO(michael) Keeping this private for now until we decide what else should be in it
37
35
  # And what the rules should be about updates / mutability
@@ -47,8 +47,7 @@ class _AbstractPatternMatcher:
47
47
  return super().__repr__()
48
48
 
49
49
  @abstractmethod
50
- def __call__(self, path: Path) -> bool:
51
- ...
50
+ def __call__(self, path: Path) -> bool: ...
52
51
 
53
52
 
54
53
  class _CustomPatternMatcher(_AbstractPatternMatcher):
modal/mount.py CHANGED
@@ -78,20 +78,16 @@ def python_standalone_mount_name(version: str) -> str:
78
78
 
79
79
  class _MountEntry(metaclass=abc.ABCMeta):
80
80
  @abc.abstractmethod
81
- def description(self) -> str:
82
- ...
81
+ def description(self) -> str: ...
83
82
 
84
83
  @abc.abstractmethod
85
- def get_files_to_upload(self) -> typing.Iterator[tuple[Path, str]]:
86
- ...
84
+ def get_files_to_upload(self) -> typing.Iterator[tuple[Path, str]]: ...
87
85
 
88
86
  @abc.abstractmethod
89
- def watch_entry(self) -> tuple[Path, Path]:
90
- ...
87
+ def watch_entry(self) -> tuple[Path, Path]: ...
91
88
 
92
89
  @abc.abstractmethod
93
- def top_level_paths(self) -> list[tuple[Path, PurePosixPath]]:
94
- ...
90
+ def top_level_paths(self) -> list[tuple[Path, PurePosixPath]]: ...
95
91
 
96
92
 
97
93
  def _select_files(entries: list[_MountEntry]) -> list[tuple[Path, PurePosixPath]]:
modal/output.py CHANGED
@@ -6,6 +6,7 @@ transitively importing Rich, as we do in global scope in _output.py. This allows
6
6
  us to avoid importing Rich for client code that runs in the container environment.
7
7
 
8
8
  """
9
+
9
10
  import contextlib
10
11
  from collections.abc import Generator
11
12
  from typing import TYPE_CHECKING, Optional
modal/sandbox.py CHANGED
@@ -468,8 +468,7 @@ class _Sandbox(_Object, type_prefix="sb"):
468
468
  text: Literal[True] = True,
469
469
  bufsize: Literal[-1, 1] = -1,
470
470
  _pty_info: Optional[api_pb2.PTYInfo] = None,
471
- ) -> _ContainerProcess[str]:
472
- ...
471
+ ) -> _ContainerProcess[str]: ...
473
472
 
474
473
  @overload
475
474
  async def exec(
@@ -484,8 +483,7 @@ class _Sandbox(_Object, type_prefix="sb"):
484
483
  text: Literal[False] = False,
485
484
  bufsize: Literal[-1, 1] = -1,
486
485
  _pty_info: Optional[api_pb2.PTYInfo] = None,
487
- ) -> _ContainerProcess[bytes]:
488
- ...
486
+ ) -> _ContainerProcess[bytes]: ...
489
487
 
490
488
  async def exec(
491
489
  self,
@@ -597,16 +595,14 @@ class _Sandbox(_Object, type_prefix="sb"):
597
595
  self,
598
596
  path: str,
599
597
  mode: "_typeshed.OpenTextMode",
600
- ) -> _FileIO[str]:
601
- ...
598
+ ) -> _FileIO[str]: ...
602
599
 
603
600
  @overload
604
601
  async def open(
605
602
  self,
606
603
  path: str,
607
604
  mode: "_typeshed.OpenBinaryMode",
608
- ) -> _FileIO[bytes]:
609
- ...
605
+ ) -> _FileIO[bytes]: ...
610
606
 
611
607
  async def open(
612
608
  self,
modal/token_flow.py CHANGED
@@ -104,7 +104,7 @@ async def _new_token(
104
104
  result = await token_flow.finish()
105
105
  if result is not None:
106
106
  break
107
- status.update(f"Waiting for token flow to complete... (attempt {attempt+2})")
107
+ status.update(f"Waiting for token flow to complete... (attempt {attempt + 2})")
108
108
 
109
109
  console.print("[green]Web authentication finished successfully![/green]")
110
110
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modal
3
- Version: 0.73.28
3
+ Version: 0.73.29
4
4
  Summary: Python client library for Modal
5
5
  Author: Modal Labs
6
6
  Author-email: support@modal.com
@@ -1,28 +1,28 @@
1
1
  modal/__init__.py,sha256=df6aKAigSPFXnmIohWySf_1zZ9Gzgrb7-oprSbopD4w,2299
2
- modal/__main__.py,sha256=scYhGFqh8OJcVDo-VOxIT6CCwxOgzgflYWMnIZiMRqE,2871
2
+ modal/__main__.py,sha256=CgIjP8m1xJjjd4AXc-delmR6LdBCZclw2A_V38CFIio,2870
3
3
  modal/_clustered_functions.py,sha256=kTf-9YBXY88NutC1akI-gCbvf01RhMPCw-zoOI_YIUE,2700
4
4
  modal/_clustered_functions.pyi,sha256=vllkegc99A0jrUOWa8mdlSbdp6uz36TsHhGxysAOpaQ,771
5
5
  modal/_container_entrypoint.py,sha256=YtfJ852XUDtAWBD-yVs99zy933-VBEKQyIngEj36Qcw,29286
6
- modal/_functions.py,sha256=W0gU1MV0105oadLGjuXQErEKh1f0J7_5vX3nYmuQf9k,72021
6
+ modal/_functions.py,sha256=dxZjGMsocphkxTxI2bjoI8yuA1Z4hUl1b5alS7v3QCI,72023
7
7
  modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
8
8
  modal/_location.py,sha256=S3lSxIU3h9HkWpkJ3Pwo0pqjIOSB1fjeSgUsY3x7eec,1202
9
9
  modal/_object.py,sha256=ItQcsMNkz9Y3kdTsvfNarbW-paJ2qabDyQ7njaqY0XI,11359
10
10
  modal/_output.py,sha256=Z0nngPh2mKHMQc4MQ92YjVPc3ewOLa3I4dFBlL9nvQY,25656
11
- modal/_partial_function.py,sha256=qE4c7vxnvLvFCnvrtS7ARnr-SMQPFPg-bDklN_S-2TM,29110
11
+ modal/_partial_function.py,sha256=KGv4hWXBboiWFxC733jfOHKdvShTPjF75lVv866Lgyc,29078
12
12
  modal/_proxy_tunnel.py,sha256=gnKyCfmVB7x2d1A6c-JDysNIP3kEFxmXzhcXhPrzPn0,1906
13
13
  modal/_pty.py,sha256=JZfPDDpzqICZqtyPI_oMJf_9w-p_lLNuzHhwhodUXio,1329
14
- modal/_resolver.py,sha256=D9IAdZKNqRPwgPDaB-XMKGtO8G0GwtBzG6xdgiXKdCk,6945
14
+ modal/_resolver.py,sha256=RtoXoYzSllPlFu0D1vel_FWiEmDO7RyToiC2bxeN8ZY,6917
15
15
  modal/_resources.py,sha256=5qmcirXUI8dSH926nwkUaeX9H25mqYu9mXD_KuT79-o,1733
16
16
  modal/_serialization.py,sha256=NYSjM9FnbLXULuzpboVvPcFFHRyh3hn_AcSFXQCGPYc,19741
17
17
  modal/_traceback.py,sha256=IZQzB3fVlUfMHOSyKUgw0H6qv4yHnpyq-XVCNZKfUdA,5023
18
18
  modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
19
19
  modal/_tunnel.pyi,sha256=JmmDYAy9F1FpgJ_hWx0xkom2nTOFQjn4mTPYlU3PFo4,1245
20
20
  modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
21
- modal/app.py,sha256=ILnkDzTWe4tKCDaKgh30MLMuK6zUDhvW-nCWMjuO8uI,44654
21
+ modal/app.py,sha256=rCOPD51gVyow8muyaqMuV65qfTnAZKf_w1OCZdSF_6o,44636
22
22
  modal/app.pyi,sha256=lxiuWzE_OLb3WHg-H7Pek9DGBuCUzZ55P594VhJL5LA,26113
23
23
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
24
24
  modal/client.py,sha256=8SQawr7P1PNUCq1UmJMUQXG2jIo4Nmdcs311XqrNLRE,15276
25
- modal/client.pyi,sha256=5VmgE3-kvEbZ_vVd91WZnDv4OVzpi5oSX5BJRtw8dOo,7593
25
+ modal/client.pyi,sha256=MQimgW9ZEfR0nnv55oQC23DXgUqLx5jVtcvRnjkL5y0,7593
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=5Er9L9tGpLGIrbiHOI7c9266gPG6nhxoJ_BX8op96nU,31096
@@ -32,14 +32,14 @@ modal/container_process.py,sha256=WTqLn01dJPVkPpwR_0w_JH96ceN5mV4TGtiu1ZR2RRA,61
32
32
  modal/container_process.pyi,sha256=Hf0J5JyDdCCXBJSKx6gvkPOo0XrztCm78xzxamtzUjQ,2828
33
33
  modal/dict.py,sha256=vc5lQVqzeDUCb4fRjnOlqYK2GmBb0fIhZmvB0xIBG0U,12921
34
34
  modal/dict.pyi,sha256=kKb0Kc6RUabtQ5Hwslg_vwL_OIrwIAJ2NXrJTepTtp4,7684
35
- modal/environments.py,sha256=Q1MpUt4SmBUaLFPzrYxCgGkMaqNBLxRDSLzNxK_Abe4,6949
35
+ modal/environments.py,sha256=mrOaS9hiIQijGWJYIgVKQnwC-kONhWHm1GqoK_9G75E,6924
36
36
  modal/environments.pyi,sha256=JvSroVOIXDIILL40Z5G4HyY16bmih2YMWMvWL-SFTwo,3373
37
37
  modal/exception.py,sha256=4JyO-SACaLNDe2QC48EjsK8GMkZ8AgEurZ8j1YdRu8E,5263
38
38
  modal/experimental.py,sha256=e625Ekpo2HtYkk6ZltM_XYcI9xhLxic8_7Na91PbdUg,4017
39
39
  modal/experimental.pyi,sha256=24tIYu_w9RLwFrz1cIsgYuqmDCtV8eg6-bQNz3zjhDo,939
40
40
  modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
41
41
  modal/file_io.pyi,sha256=NTRft1tbPSWf9TlWVeZmTlgB5AZ_Zhu2srWIrWr7brk,9445
42
- modal/file_pattern_matcher.py,sha256=1cZ4V2wSLiaXqAqStETSwp3bzDD6QZOt6pmmjk3Okz4,6505
42
+ modal/file_pattern_matcher.py,sha256=trosX-Bp7dOubudN1bLLhRAoidWy1TcoaR4Pv8CedWw,6497
43
43
  modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
44
44
  modal/functions.pyi,sha256=YflJx4BhzmJLJzpVWbuAMv0Qv63Mgb3r9qZqrgBEr1w,14289
45
45
  modal/gpu.py,sha256=uDluoK3hXyj2YRxGhVDFOifOBCsXFTo5hVueGoJPb8w,6001
@@ -47,13 +47,13 @@ modal/image.py,sha256=KYc6bg-m9A6wiLF38dWcFBMrEATyR2KOF0sp-6O9uC0,91508
47
47
  modal/image.pyi,sha256=kdJzy1eaxNPZeCpE0TMYYLhJ6UWmkfRDeb_vzngJUoQ,26462
48
48
  modal/io_streams.py,sha256=QkQiizKRzd5bnbKQsap31LJgBYlAnj4-XkV_50xPYX0,15079
49
49
  modal/io_streams.pyi,sha256=bJ7ZLmSmJ0nKoa6r4FJpbqvzdUVa0lEe0Fa-MMpMezU,5071
50
- modal/mount.py,sha256=aUa_KTsUzpbRso5XfVw2UuKl9j1KdWEIpNCl9pF1_YI,32156
50
+ modal/mount.py,sha256=hNoy7J-E2C-CkSmbKldfL_zg8db8nP8cVzRj_35Rsp0,32124
51
51
  modal/mount.pyi,sha256=CmHa7zKSxHA_7-vMQLnGfw_ZXvAvHlafvUEVJcQ1LQA,12535
52
52
  modal/network_file_system.py,sha256=WXdyL7du_fvjvuG6hSAREyJ83sSEP2xSLAIAhBsisdI,14869
53
53
  modal/network_file_system.pyi,sha256=4N3eqMbTSlqmS8VV_aJK-uvrgJC8xnf_YtW5FHfRfc8,8156
54
54
  modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
55
55
  modal/object.pyi,sha256=kyJkRQcVv3ct7zSAxvvXcuhBVeH914v80uSlqeS7cA4,5632
56
- modal/output.py,sha256=N0xf4qeudEaYrslzdAl35VKV8rapstgIM2e9wO8_iy0,1967
56
+ modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
57
57
  modal/parallel_map.py,sha256=POBTyiWabe2e4qBNlsjjksiu1AAPEsNqI-mM8cgNFco,16042
58
58
  modal/parallel_map.pyi,sha256=-YKY_bVuQv8B4gtFrHnXtuNV0_JpmU9vqMJzR7beeCU,2524
59
59
  modal/partial_function.py,sha256=KkATL56zEe_Kzp4hDX0c0e6BrXeO8V8mZBjfIs_ldqI,1016
@@ -67,7 +67,7 @@ modal/retries.py,sha256=HKR2Q9aNPWkMjQ5nwobqYTuZaSuw0a8lI2zrtY5IW98,5230
67
67
  modal/runner.py,sha256=fdUyDGN-bWu_aZBvxBO_MIgEuucsA0PgDKDHBn5k8J0,24451
68
68
  modal/runner.pyi,sha256=RYEYsnofrvVroYefWLhWAy8I_uwXV9fRNuJaVgcNzrg,5278
69
69
  modal/running_app.py,sha256=v61mapYNV1-O-Uaho5EfJlryMLvIT9We0amUOSvSGx8,1188
70
- modal/sandbox.py,sha256=fMvBs3KZV08kT9jo8roT7yNS78ENGef2xHIAuuXeuK4,31809
70
+ modal/sandbox.py,sha256=fPStBypgDjclm388u5v3q26gAub0mP4c1pZYLlrJcUY,31777
71
71
  modal/sandbox.pyi,sha256=qncEvzK76h_ehrs03vlroQyLThWiMsjKhD0DnCNc6zI,22663
72
72
  modal/schedule.py,sha256=0ZFpKs1bOxeo5n3HZjoL7OE2ktsb-_oGtq-WJEPO4tY,2615
73
73
  modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
@@ -78,25 +78,25 @@ modal/serving.pyi,sha256=ncV-9jY_vZYFnGs5ZnMb3ffrX8LmcLdIMHBC56xRbtE,1711
78
78
  modal/snapshot.py,sha256=6rQvDP3iX9hdiAudKTy0-m0JESt4kk0q2gusXbaRA-8,1279
79
79
  modal/snapshot.pyi,sha256=Ypd4NKsjOTnnnqXyTGGLKq5lkocRrUURYjY5Pi67_qA,670
80
80
  modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
81
- modal/token_flow.py,sha256=LcgSce_MSQ2p7j55DPwpVRpiAtCDe8GRSEwzO7muNR8,6774
81
+ modal/token_flow.py,sha256=APNPQhuqy2avu6IY26U6OiN7erRhpo03Ztt1V60_wts,6776
82
82
  modal/token_flow.pyi,sha256=0XV3d-9CGQL3qjPdw3RgwIFVqqxo8Z-u044_mkgAM3o,2064
83
83
  modal/volume.py,sha256=JAWeDvoAG95tMBv-fYIERyHsJPS_X_xGpxRRmYtb6j0,30096
84
84
  modal/volume.pyi,sha256=kTsXarphjZILXci84LQy7EyC84eXUs5-7D62IM5q3eE,12491
85
85
  modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
86
86
  modal/_runtime/asgi.py,sha256=vIxpGrCZhdeThwazQckmrqoNKgDQYOyv8emzBHr8CiU,22154
87
- modal/_runtime/container_io_manager.py,sha256=EHjdCky8RiM2kDpkwDhBqs2kCqC-ixc-TNS4X2eL8pg,43596
87
+ modal/_runtime/container_io_manager.py,sha256=3VPj0RWtSdvVZD96l5ZpO8MjhLRjAi_P_ZtpNK3nGn0,43593
88
88
  modal/_runtime/execution_context.py,sha256=E6ofm6j1POXGPxS841X3V7JU6NheVb8OkQc7JpLq4Kg,2712
89
89
  modal/_runtime/gpu_memory_snapshot.py,sha256=tA3m1d1cwnmHpvpCeN_WijDd6n8byn7LWlpicbIxiOI,3144
90
90
  modal/_runtime/telemetry.py,sha256=T1RoAGyjBDr1swiM6pPsGRSITm7LI5FDK18oNXxY08U,5163
91
- modal/_runtime/user_code_imports.py,sha256=iQCl2TtsmouuNb2Y3-Rpu8CYlqhAJWHJ7zrSdFrFyBQ,14748
91
+ modal/_runtime/user_code_imports.py,sha256=qDasIvffN3SJjUeT1DHcpN35lWNepnbomS0Z8yD65mA,14740
92
92
  modal/_utils/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
93
93
  modal/_utils/app_utils.py,sha256=88BT4TPLWfYAQwKTHcyzNQRHg8n9B-QE2UyJs96iV-0,108
94
- modal/_utils/async_utils.py,sha256=9ubwMkwiDB4gzOYG2jL9j7Fs-5dxHjcifZe3r7JRg-k,25091
95
- modal/_utils/blob_utils.py,sha256=N66LtZI8PpCkZ7maA7GLW5CAmYUoNJdG-GjaAUR4_NQ,14509
94
+ modal/_utils/async_utils.py,sha256=5PdDuI1aSwPOI4a3dIvW0DkPqGw6KZN6RtWE18Dzv1E,25079
95
+ modal/_utils/blob_utils.py,sha256=RB1G6T7eC1Poe-O45qYLaxwCr2jkM-Q6Nexk1J3wk_w,14505
96
96
  modal/_utils/bytes_io_segment_payload.py,sha256=uunxVJS4PE1LojF_UpURMzVK9GuvmYWRqQo_bxEj5TU,3385
97
97
  modal/_utils/deprecation.py,sha256=dycySRBxyZf3ITzEqPNM6MxXTk9-0VVLA8oCPQ5j_Os,3426
98
98
  modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,3722
99
- modal/_utils/function_utils.py,sha256=fc5RKK59SxV7Vg4JyURVB2CCLUNKQVcBG60_dUxviRM,27307
99
+ modal/_utils/function_utils.py,sha256=Rmz8GJDie-RW_q2RcTwholEWixS2IQDPBsRBJ3f3ZvU,27302
100
100
  modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
101
101
  modal/_utils/grpc_utils.py,sha256=PPB5ay-vXencXNIWPVw5modr3EH7gfq2QPcO5YJ1lMU,7737
102
102
  modal/_utils/hash_utils.py,sha256=zg3J6OGxTFGSFri1qQ12giDz90lWk8bzaxCTUCRtiX4,3034
@@ -119,18 +119,18 @@ modal/cli/app.py,sha256=TmUiFKAE1yc6ll8pfl-wZ2lh9crC31Fu_8_YKCX8NJc,7818
119
119
  modal/cli/config.py,sha256=QvFsqO4eUOtI7d_pQAOAyfq_ZitjhPtav3C6GIDQcZM,1680
120
120
  modal/cli/container.py,sha256=FYwEgjf93j4NMorAjGbSV98i1wpebqdAeNU1wfrFp1k,3668
121
121
  modal/cli/dict.py,sha256=8Wq3w-UDaywk8EVNdj-ECCNV9TYHqh4kzhUqhhulatM,4593
122
- modal/cli/entry_point.py,sha256=aaNxFAqZcmtSjwzkYIA_Ba9CkL4cL4_i2gy5VjoXxkM,4228
122
+ modal/cli/entry_point.py,sha256=DzFr75smEi1OSJdGXx1ZaAl-3-4b08QCDUP3tzvApKo,4225
123
123
  modal/cli/environment.py,sha256=Ayddkiq9jdj3XYDJ8ZmUqFpPPH8xajYlbexRkzGtUcg,4334
124
124
  modal/cli/import_refs.py,sha256=YYseLJ6cU_wln7DjVWfKPgEhv77hxfA0klWAkTK_1HA,12672
125
125
  modal/cli/launch.py,sha256=pzQt2QlcrbIUU0MVzWWPAvMQ6MCyqsHZ0X9JcV-sY04,3242
126
126
  modal/cli/network_file_system.py,sha256=eq3JnwjbfFNsJodIyANHL06ByYc3BSavzdmu8C96cHA,7948
127
127
  modal/cli/profile.py,sha256=rLXfjJObfPNjaZvNfHGIKqs7y9bGYyGe-K7V0w-Ni0M,3110
128
128
  modal/cli/queues.py,sha256=6gTu76dzBtPN5eQVsLrvQpuru5jI9ZCWK5Eh8J8XhaM,4498
129
- modal/cli/run.py,sha256=hXCvqQM6w7dXz0254q5Sr0UNR5JC6cEA6fBdrcshCcg,21784
130
- modal/cli/secret.py,sha256=uQpwYrMY98iMCWeZOQTcktOYhPTZ8IHnyealDc2CZqo,4206
129
+ modal/cli/run.py,sha256=Wu5P4ERjB4iZ_d4J8nP7KB58qIjL595KnFQkw_pWDik,21761
130
+ modal/cli/secret.py,sha256=iDsaFUJBq3333ZBVzKPcqyey68w0j82PNddGhRgP2pA,4206
131
131
  modal/cli/token.py,sha256=mxSgOWakXG6N71hQb1ko61XAR9ZGkTMZD-Txn7gmTac,1924
132
132
  modal/cli/utils.py,sha256=hZmjyzcPjDnQSkLvycZD2LhGdcsfdZshs_rOU78EpvI,3717
133
- modal/cli/volume.py,sha256=zVZTTRSi1iWy9Rnwx7WyoLSq73Jd_n1z8fx-QlDkNIQ,10266
133
+ modal/cli/volume.py,sha256=c2IuVNO2yJVaXmZkRh3xwQmznlRTgFoJr_BIzzqtVv0,10251
134
134
  modal/cli/programs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
135
135
  modal/cli/programs/run_jupyter.py,sha256=1X8eQ3gB_IqkJn11Q4dQ9KdIqFVwQQlwkrrSqlFWfPQ,2685
136
136
  modal/cli/programs/vscode.py,sha256=c5jKk1ruuC03X1D-hNc2jtTQqofCBweEZH_qxHjkHGo,3383
@@ -146,7 +146,7 @@ modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
146
146
  modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
147
147
  modal_docs/gen_reference_docs.py,sha256=aDcUSSDtAAZ4eeFWyroeIg2TOzyRoYcic-d9Zh9TdLY,6656
148
148
  modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
149
- modal_docs/mdmd/mdmd.py,sha256=F6EXKkjwrTbOiG6I7wKtNGVVmmeWLAJ5pnE7DUkDpvM,6231
149
+ modal_docs/mdmd/mdmd.py,sha256=Irx49MCCTlBOP4FBdLR--JrpA3-WhsVeriq0LGgsRic,6232
150
150
  modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
151
151
  modal_global_objects/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
152
152
  modal_global_objects/images/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
@@ -172,10 +172,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
172
172
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
173
  modal_version/__init__.py,sha256=wiJQ53c-OMs0Xf1UeXOxQ7FwlV1VzIjnX6o-pRYZ_Pk,470
174
174
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
175
- modal_version/_version_generated.py,sha256=vx2bfyAfCd_GVBSI6V-sjHBP7rYb49mGeoKWnyqdwPo,149
176
- modal-0.73.28.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
177
- modal-0.73.28.dist-info/METADATA,sha256=SBFv75FYMZLdonBirLUi0SvSrSQ0uThOlhAcg2X5nMY,2330
178
- modal-0.73.28.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
179
- modal-0.73.28.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
180
- modal-0.73.28.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
181
- modal-0.73.28.dist-info/RECORD,,
175
+ modal_version/_version_generated.py,sha256=uXe2sj5cfIxypnLDmDmNLrwhJ8zb9QYVuha29ACAI8o,149
176
+ modal-0.73.29.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
177
+ modal-0.73.29.dist-info/METADATA,sha256=wPPaPbfClS8_-XLC-fQguOHndNExkDCeZuezdll6Fvk,2330
178
+ modal-0.73.29.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
179
+ modal-0.73.29.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
180
+ modal-0.73.29.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
181
+ modal-0.73.29.dist-info/RECORD,,
modal_docs/mdmd/mdmd.py CHANGED
@@ -1,5 +1,6 @@
1
1
  # Copyright Modal Labs 2023
2
2
  """mdmd - MoDal MarkDown"""
3
+
3
4
  import inspect
4
5
  import warnings
5
6
  from enum import Enum, EnumMeta
@@ -1,4 +1,4 @@
1
1
  # Copyright Modal Labs 2025
2
2
 
3
3
  # Note: Reset this value to -1 whenever you make a minor `0.X` release of the client.
4
- build_number = 28 # git: 6a1f081
4
+ build_number = 29 # git: 9634185