modal 0.73.67__tar.gz → 0.73.69__tar.gz

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 (182) hide show
  1. {modal-0.73.67 → modal-0.73.69}/PKG-INFO +1 -1
  2. {modal-0.73.67 → modal-0.73.69}/modal/_functions.py +26 -17
  3. {modal-0.73.67 → modal-0.73.69}/modal/cli/run.py +4 -1
  4. {modal-0.73.67 → modal-0.73.69}/modal/client.pyi +2 -2
  5. {modal-0.73.67 → modal-0.73.69}/modal/functions.pyi +14 -12
  6. {modal-0.73.67 → modal-0.73.69}/modal.egg-info/PKG-INFO +1 -1
  7. {modal-0.73.67 → modal-0.73.69}/modal_version/_version_generated.py +1 -1
  8. {modal-0.73.67 → modal-0.73.69}/LICENSE +0 -0
  9. {modal-0.73.67 → modal-0.73.69}/README.md +0 -0
  10. {modal-0.73.67 → modal-0.73.69}/modal/__init__.py +0 -0
  11. {modal-0.73.67 → modal-0.73.69}/modal/__main__.py +0 -0
  12. {modal-0.73.67 → modal-0.73.69}/modal/_clustered_functions.py +0 -0
  13. {modal-0.73.67 → modal-0.73.69}/modal/_clustered_functions.pyi +0 -0
  14. {modal-0.73.67 → modal-0.73.69}/modal/_container_entrypoint.py +0 -0
  15. {modal-0.73.67 → modal-0.73.69}/modal/_ipython.py +0 -0
  16. {modal-0.73.67 → modal-0.73.69}/modal/_location.py +0 -0
  17. {modal-0.73.67 → modal-0.73.69}/modal/_object.py +0 -0
  18. {modal-0.73.67 → modal-0.73.69}/modal/_output.py +0 -0
  19. {modal-0.73.67 → modal-0.73.69}/modal/_partial_function.py +0 -0
  20. {modal-0.73.67 → modal-0.73.69}/modal/_proxy_tunnel.py +0 -0
  21. {modal-0.73.67 → modal-0.73.69}/modal/_pty.py +0 -0
  22. {modal-0.73.67 → modal-0.73.69}/modal/_resolver.py +0 -0
  23. {modal-0.73.67 → modal-0.73.69}/modal/_resources.py +0 -0
  24. {modal-0.73.67 → modal-0.73.69}/modal/_runtime/__init__.py +0 -0
  25. {modal-0.73.67 → modal-0.73.69}/modal/_runtime/asgi.py +0 -0
  26. {modal-0.73.67 → modal-0.73.69}/modal/_runtime/container_io_manager.py +0 -0
  27. {modal-0.73.67 → modal-0.73.69}/modal/_runtime/container_io_manager.pyi +0 -0
  28. {modal-0.73.67 → modal-0.73.69}/modal/_runtime/execution_context.py +0 -0
  29. {modal-0.73.67 → modal-0.73.69}/modal/_runtime/execution_context.pyi +0 -0
  30. {modal-0.73.67 → modal-0.73.69}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  31. {modal-0.73.67 → modal-0.73.69}/modal/_runtime/telemetry.py +0 -0
  32. {modal-0.73.67 → modal-0.73.69}/modal/_runtime/user_code_imports.py +0 -0
  33. {modal-0.73.67 → modal-0.73.69}/modal/_serialization.py +0 -0
  34. {modal-0.73.67 → modal-0.73.69}/modal/_traceback.py +0 -0
  35. {modal-0.73.67 → modal-0.73.69}/modal/_tunnel.py +0 -0
  36. {modal-0.73.67 → modal-0.73.69}/modal/_tunnel.pyi +0 -0
  37. {modal-0.73.67 → modal-0.73.69}/modal/_utils/__init__.py +0 -0
  38. {modal-0.73.67 → modal-0.73.69}/modal/_utils/app_utils.py +0 -0
  39. {modal-0.73.67 → modal-0.73.69}/modal/_utils/async_utils.py +0 -0
  40. {modal-0.73.67 → modal-0.73.69}/modal/_utils/blob_utils.py +0 -0
  41. {modal-0.73.67 → modal-0.73.69}/modal/_utils/bytes_io_segment_payload.py +0 -0
  42. {modal-0.73.67 → modal-0.73.69}/modal/_utils/deprecation.py +0 -0
  43. {modal-0.73.67 → modal-0.73.69}/modal/_utils/docker_utils.py +0 -0
  44. {modal-0.73.67 → modal-0.73.69}/modal/_utils/function_utils.py +0 -0
  45. {modal-0.73.67 → modal-0.73.69}/modal/_utils/grpc_testing.py +0 -0
  46. {modal-0.73.67 → modal-0.73.69}/modal/_utils/grpc_utils.py +0 -0
  47. {modal-0.73.67 → modal-0.73.69}/modal/_utils/hash_utils.py +0 -0
  48. {modal-0.73.67 → modal-0.73.69}/modal/_utils/http_utils.py +0 -0
  49. {modal-0.73.67 → modal-0.73.69}/modal/_utils/logger.py +0 -0
  50. {modal-0.73.67 → modal-0.73.69}/modal/_utils/mount_utils.py +0 -0
  51. {modal-0.73.67 → modal-0.73.69}/modal/_utils/name_utils.py +0 -0
  52. {modal-0.73.67 → modal-0.73.69}/modal/_utils/package_utils.py +0 -0
  53. {modal-0.73.67 → modal-0.73.69}/modal/_utils/pattern_utils.py +0 -0
  54. {modal-0.73.67 → modal-0.73.69}/modal/_utils/rand_pb_testing.py +0 -0
  55. {modal-0.73.67 → modal-0.73.69}/modal/_utils/shell_utils.py +0 -0
  56. {modal-0.73.67 → modal-0.73.69}/modal/_vendor/__init__.py +0 -0
  57. {modal-0.73.67 → modal-0.73.69}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  58. {modal-0.73.67 → modal-0.73.69}/modal/_vendor/cloudpickle.py +0 -0
  59. {modal-0.73.67 → modal-0.73.69}/modal/_vendor/tblib.py +0 -0
  60. {modal-0.73.67 → modal-0.73.69}/modal/_watcher.py +0 -0
  61. {modal-0.73.67 → modal-0.73.69}/modal/app.py +0 -0
  62. {modal-0.73.67 → modal-0.73.69}/modal/app.pyi +0 -0
  63. {modal-0.73.67 → modal-0.73.69}/modal/call_graph.py +0 -0
  64. {modal-0.73.67 → modal-0.73.69}/modal/cli/__init__.py +0 -0
  65. {modal-0.73.67 → modal-0.73.69}/modal/cli/_download.py +0 -0
  66. {modal-0.73.67 → modal-0.73.69}/modal/cli/_traceback.py +0 -0
  67. {modal-0.73.67 → modal-0.73.69}/modal/cli/app.py +0 -0
  68. {modal-0.73.67 → modal-0.73.69}/modal/cli/config.py +0 -0
  69. {modal-0.73.67 → modal-0.73.69}/modal/cli/container.py +0 -0
  70. {modal-0.73.67 → modal-0.73.69}/modal/cli/dict.py +0 -0
  71. {modal-0.73.67 → modal-0.73.69}/modal/cli/entry_point.py +0 -0
  72. {modal-0.73.67 → modal-0.73.69}/modal/cli/environment.py +0 -0
  73. {modal-0.73.67 → modal-0.73.69}/modal/cli/import_refs.py +0 -0
  74. {modal-0.73.67 → modal-0.73.69}/modal/cli/launch.py +0 -0
  75. {modal-0.73.67 → modal-0.73.69}/modal/cli/network_file_system.py +0 -0
  76. {modal-0.73.67 → modal-0.73.69}/modal/cli/profile.py +0 -0
  77. {modal-0.73.67 → modal-0.73.69}/modal/cli/programs/__init__.py +0 -0
  78. {modal-0.73.67 → modal-0.73.69}/modal/cli/programs/run_jupyter.py +0 -0
  79. {modal-0.73.67 → modal-0.73.69}/modal/cli/programs/vscode.py +0 -0
  80. {modal-0.73.67 → modal-0.73.69}/modal/cli/queues.py +0 -0
  81. {modal-0.73.67 → modal-0.73.69}/modal/cli/secret.py +0 -0
  82. {modal-0.73.67 → modal-0.73.69}/modal/cli/token.py +0 -0
  83. {modal-0.73.67 → modal-0.73.69}/modal/cli/utils.py +0 -0
  84. {modal-0.73.67 → modal-0.73.69}/modal/cli/volume.py +0 -0
  85. {modal-0.73.67 → modal-0.73.69}/modal/client.py +0 -0
  86. {modal-0.73.67 → modal-0.73.69}/modal/cloud_bucket_mount.py +0 -0
  87. {modal-0.73.67 → modal-0.73.69}/modal/cloud_bucket_mount.pyi +0 -0
  88. {modal-0.73.67 → modal-0.73.69}/modal/cls.py +0 -0
  89. {modal-0.73.67 → modal-0.73.69}/modal/cls.pyi +0 -0
  90. {modal-0.73.67 → modal-0.73.69}/modal/config.py +0 -0
  91. {modal-0.73.67 → modal-0.73.69}/modal/container_process.py +0 -0
  92. {modal-0.73.67 → modal-0.73.69}/modal/container_process.pyi +0 -0
  93. {modal-0.73.67 → modal-0.73.69}/modal/dict.py +0 -0
  94. {modal-0.73.67 → modal-0.73.69}/modal/dict.pyi +0 -0
  95. {modal-0.73.67 → modal-0.73.69}/modal/environments.py +0 -0
  96. {modal-0.73.67 → modal-0.73.69}/modal/environments.pyi +0 -0
  97. {modal-0.73.67 → modal-0.73.69}/modal/exception.py +0 -0
  98. {modal-0.73.67 → modal-0.73.69}/modal/experimental.py +0 -0
  99. {modal-0.73.67 → modal-0.73.69}/modal/experimental.pyi +0 -0
  100. {modal-0.73.67 → modal-0.73.69}/modal/extensions/__init__.py +0 -0
  101. {modal-0.73.67 → modal-0.73.69}/modal/extensions/ipython.py +0 -0
  102. {modal-0.73.67 → modal-0.73.69}/modal/file_io.py +0 -0
  103. {modal-0.73.67 → modal-0.73.69}/modal/file_io.pyi +0 -0
  104. {modal-0.73.67 → modal-0.73.69}/modal/file_pattern_matcher.py +0 -0
  105. {modal-0.73.67 → modal-0.73.69}/modal/functions.py +0 -0
  106. {modal-0.73.67 → modal-0.73.69}/modal/gpu.py +0 -0
  107. {modal-0.73.67 → modal-0.73.69}/modal/image.py +0 -0
  108. {modal-0.73.67 → modal-0.73.69}/modal/image.pyi +0 -0
  109. {modal-0.73.67 → modal-0.73.69}/modal/io_streams.py +0 -0
  110. {modal-0.73.67 → modal-0.73.69}/modal/io_streams.pyi +0 -0
  111. {modal-0.73.67 → modal-0.73.69}/modal/mount.py +0 -0
  112. {modal-0.73.67 → modal-0.73.69}/modal/mount.pyi +0 -0
  113. {modal-0.73.67 → modal-0.73.69}/modal/network_file_system.py +0 -0
  114. {modal-0.73.67 → modal-0.73.69}/modal/network_file_system.pyi +0 -0
  115. {modal-0.73.67 → modal-0.73.69}/modal/object.py +0 -0
  116. {modal-0.73.67 → modal-0.73.69}/modal/object.pyi +0 -0
  117. {modal-0.73.67 → modal-0.73.69}/modal/output.py +0 -0
  118. {modal-0.73.67 → modal-0.73.69}/modal/parallel_map.py +0 -0
  119. {modal-0.73.67 → modal-0.73.69}/modal/parallel_map.pyi +0 -0
  120. {modal-0.73.67 → modal-0.73.69}/modal/partial_function.py +0 -0
  121. {modal-0.73.67 → modal-0.73.69}/modal/partial_function.pyi +0 -0
  122. {modal-0.73.67 → modal-0.73.69}/modal/proxy.py +0 -0
  123. {modal-0.73.67 → modal-0.73.69}/modal/proxy.pyi +0 -0
  124. {modal-0.73.67 → modal-0.73.69}/modal/py.typed +0 -0
  125. {modal-0.73.67 → modal-0.73.69}/modal/queue.py +0 -0
  126. {modal-0.73.67 → modal-0.73.69}/modal/queue.pyi +0 -0
  127. {modal-0.73.67 → modal-0.73.69}/modal/requirements/2023.12.312.txt +0 -0
  128. {modal-0.73.67 → modal-0.73.69}/modal/requirements/2023.12.txt +0 -0
  129. {modal-0.73.67 → modal-0.73.69}/modal/requirements/2024.04.txt +0 -0
  130. {modal-0.73.67 → modal-0.73.69}/modal/requirements/2024.10.txt +0 -0
  131. {modal-0.73.67 → modal-0.73.69}/modal/requirements/README.md +0 -0
  132. {modal-0.73.67 → modal-0.73.69}/modal/requirements/base-images.json +0 -0
  133. {modal-0.73.67 → modal-0.73.69}/modal/retries.py +0 -0
  134. {modal-0.73.67 → modal-0.73.69}/modal/runner.py +0 -0
  135. {modal-0.73.67 → modal-0.73.69}/modal/runner.pyi +0 -0
  136. {modal-0.73.67 → modal-0.73.69}/modal/running_app.py +0 -0
  137. {modal-0.73.67 → modal-0.73.69}/modal/sandbox.py +0 -0
  138. {modal-0.73.67 → modal-0.73.69}/modal/sandbox.pyi +0 -0
  139. {modal-0.73.67 → modal-0.73.69}/modal/schedule.py +0 -0
  140. {modal-0.73.67 → modal-0.73.69}/modal/scheduler_placement.py +0 -0
  141. {modal-0.73.67 → modal-0.73.69}/modal/secret.py +0 -0
  142. {modal-0.73.67 → modal-0.73.69}/modal/secret.pyi +0 -0
  143. {modal-0.73.67 → modal-0.73.69}/modal/serving.py +0 -0
  144. {modal-0.73.67 → modal-0.73.69}/modal/serving.pyi +0 -0
  145. {modal-0.73.67 → modal-0.73.69}/modal/snapshot.py +0 -0
  146. {modal-0.73.67 → modal-0.73.69}/modal/snapshot.pyi +0 -0
  147. {modal-0.73.67 → modal-0.73.69}/modal/stream_type.py +0 -0
  148. {modal-0.73.67 → modal-0.73.69}/modal/token_flow.py +0 -0
  149. {modal-0.73.67 → modal-0.73.69}/modal/token_flow.pyi +0 -0
  150. {modal-0.73.67 → modal-0.73.69}/modal/volume.py +0 -0
  151. {modal-0.73.67 → modal-0.73.69}/modal/volume.pyi +0 -0
  152. {modal-0.73.67 → modal-0.73.69}/modal.egg-info/SOURCES.txt +0 -0
  153. {modal-0.73.67 → modal-0.73.69}/modal.egg-info/dependency_links.txt +0 -0
  154. {modal-0.73.67 → modal-0.73.69}/modal.egg-info/entry_points.txt +0 -0
  155. {modal-0.73.67 → modal-0.73.69}/modal.egg-info/requires.txt +0 -0
  156. {modal-0.73.67 → modal-0.73.69}/modal.egg-info/top_level.txt +0 -0
  157. {modal-0.73.67 → modal-0.73.69}/modal_docs/__init__.py +0 -0
  158. {modal-0.73.67 → modal-0.73.69}/modal_docs/gen_cli_docs.py +0 -0
  159. {modal-0.73.67 → modal-0.73.69}/modal_docs/gen_reference_docs.py +0 -0
  160. {modal-0.73.67 → modal-0.73.69}/modal_docs/mdmd/__init__.py +0 -0
  161. {modal-0.73.67 → modal-0.73.69}/modal_docs/mdmd/mdmd.py +0 -0
  162. {modal-0.73.67 → modal-0.73.69}/modal_docs/mdmd/signatures.py +0 -0
  163. {modal-0.73.67 → modal-0.73.69}/modal_proto/__init__.py +0 -0
  164. {modal-0.73.67 → modal-0.73.69}/modal_proto/api.proto +0 -0
  165. {modal-0.73.67 → modal-0.73.69}/modal_proto/api_grpc.py +0 -0
  166. {modal-0.73.67 → modal-0.73.69}/modal_proto/api_pb2.py +0 -0
  167. {modal-0.73.67 → modal-0.73.69}/modal_proto/api_pb2.pyi +0 -0
  168. {modal-0.73.67 → modal-0.73.69}/modal_proto/api_pb2_grpc.py +0 -0
  169. {modal-0.73.67 → modal-0.73.69}/modal_proto/api_pb2_grpc.pyi +0 -0
  170. {modal-0.73.67 → modal-0.73.69}/modal_proto/modal_api_grpc.py +0 -0
  171. {modal-0.73.67 → modal-0.73.69}/modal_proto/modal_options_grpc.py +0 -0
  172. {modal-0.73.67 → modal-0.73.69}/modal_proto/options.proto +0 -0
  173. {modal-0.73.67 → modal-0.73.69}/modal_proto/options_grpc.py +0 -0
  174. {modal-0.73.67 → modal-0.73.69}/modal_proto/options_pb2.py +0 -0
  175. {modal-0.73.67 → modal-0.73.69}/modal_proto/options_pb2.pyi +0 -0
  176. {modal-0.73.67 → modal-0.73.69}/modal_proto/options_pb2_grpc.py +0 -0
  177. {modal-0.73.67 → modal-0.73.69}/modal_proto/options_pb2_grpc.pyi +0 -0
  178. {modal-0.73.67 → modal-0.73.69}/modal_proto/py.typed +0 -0
  179. {modal-0.73.67 → modal-0.73.69}/modal_version/__init__.py +0 -0
  180. {modal-0.73.67 → modal-0.73.69}/modal_version/__main__.py +0 -0
  181. {modal-0.73.67 → modal-0.73.69}/pyproject.toml +0 -0
  182. {modal-0.73.67 → modal-0.73.69}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: modal
3
- Version: 0.73.67
3
+ Version: 0.73.69
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -1597,26 +1597,35 @@ class _FunctionCall(typing.Generic[ReturnType], _Object, type_prefix="fc"):
1597
1597
  fc._is_generator = is_generator
1598
1598
  return fc
1599
1599
 
1600
+ @staticmethod
1601
+ async def gather(*function_calls: "_FunctionCall[Any]") -> list[Any]:
1602
+ """Wait until all Modal FunctionCall objects have results before returning.
1600
1603
 
1601
- async def _gather(*function_calls: _FunctionCall[ReturnType]) -> typing.Sequence[ReturnType]:
1602
- """Wait until all Modal function calls have results before returning
1604
+ Accepts a variable number of `FunctionCall` objects, as returned by `Function.spawn()`.
1603
1605
 
1604
- Accepts a variable number of FunctionCall objects as returned by `Function.spawn()`.
1606
+ Returns a list of results from each FunctionCall, or raises an exception
1607
+ from the first failing function call.
1605
1608
 
1606
- Returns a list of results from each function call, or raises an exception
1607
- of the first failing function call.
1609
+ Examples:
1610
+
1611
+ ```python notest
1612
+ fc1 = slow_func_1.spawn()
1613
+ fc2 = slow_func_2.spawn()
1608
1614
 
1609
- E.g.
1615
+ result_1, result_2 = modal.FunctionCall.gather(fc1, fc2)
1616
+ ```
1617
+ """
1618
+ try:
1619
+ return await TaskContext.gather(*[fc.get() for fc in function_calls])
1620
+ except Exception as exc:
1621
+ # TODO: kill all running function calls
1622
+ raise exc
1610
1623
 
1611
- ```python notest
1612
- function_call_1 = slow_func_1.spawn()
1613
- function_call_2 = slow_func_2.spawn()
1614
1624
 
1615
- result_1, result_2 = gather(function_call_1, function_call_2)
1616
- ```
1617
- """
1618
- try:
1619
- return await TaskContext.gather(*[fc.get() for fc in function_calls])
1620
- except Exception as exc:
1621
- # TODO: kill all running function calls
1622
- raise exc
1625
+ async def _gather(*function_calls: _FunctionCall[ReturnType]) -> typing.Sequence[ReturnType]:
1626
+ """Deprecated: Please use `modal.FunctionCall.gather()` instead."""
1627
+ deprecation_warning(
1628
+ (2025, 2, 24),
1629
+ "`modal.functions.gather()` is deprecated; please use `modal.FunctionCall.gather()` instead.",
1630
+ )
1631
+ return await _FunctionCall.gather(*function_calls)
@@ -526,6 +526,9 @@ def shell(
526
526
  ),
527
527
  ),
528
528
  pty: Optional[bool] = typer.Option(default=None, help="Run the command using a PTY."),
529
+ use_module_mode: bool = typer.Option(
530
+ False, "-m", help="Interpret argument as a Python module path instead of a file/script path"
531
+ ),
529
532
  ):
530
533
  """Run a command or interactive shell inside a Modal container.
531
534
 
@@ -584,7 +587,7 @@ def shell(
584
587
  exec(container_id=container_or_function, command=shlex.split(cmd), pty=pty)
585
588
  return
586
589
 
587
- import_ref = parse_import_ref(container_or_function)
590
+ import_ref = parse_import_ref(container_or_function, use_module_mode=use_module_mode)
588
591
  runnable, all_usable_commands = import_and_filter(
589
592
  import_ref, base_cmd="modal shell", accept_local_entrypoint=False, accept_webhook=True
590
593
  )
@@ -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.67"
30
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.69"
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.67"
88
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.69"
89
89
  ): ...
90
90
  def is_closed(self) -> bool: ...
91
91
  @property
@@ -198,11 +198,11 @@ class Function(
198
198
 
199
199
  _call_generator_nowait: ___call_generator_nowait_spec[typing_extensions.Self]
200
200
 
201
- class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
201
+ class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
202
202
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
203
203
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
204
204
 
205
- remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
205
+ remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
206
206
 
207
207
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
208
208
  def __call__(self, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
@@ -217,19 +217,19 @@ class Function(
217
217
  self, *args: modal._functions.P.args, **kwargs: modal._functions.P.kwargs
218
218
  ) -> modal._functions.OriginalReturnType: ...
219
219
 
220
- class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
220
+ class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
221
221
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
222
222
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
223
223
 
224
224
  _experimental_spawn: ___experimental_spawn_spec[
225
- modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
225
+ modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
226
226
  ]
227
227
 
228
- class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
228
+ class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
229
229
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
230
230
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
231
231
 
232
- spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
232
+ spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
233
233
 
234
234
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
235
235
 
@@ -319,12 +319,14 @@ class FunctionCall(typing.Generic[modal._functions.ReturnType], modal.object.Obj
319
319
 
320
320
  from_id: __from_id_spec
321
321
 
322
+ class __gather_spec(typing_extensions.Protocol):
323
+ def __call__(self, *function_calls: FunctionCall[typing.Any]) -> list[typing.Any]: ...
324
+ async def aio(self, *function_calls: FunctionCall[typing.Any]) -> list[typing.Any]: ...
325
+
326
+ gather: __gather_spec
327
+
322
328
  class __gather_spec(typing_extensions.Protocol):
323
- def __call__(
324
- self, *function_calls: FunctionCall[modal._functions.ReturnType]
325
- ) -> typing.Sequence[modal._functions.ReturnType]: ...
326
- async def aio(
327
- self, *function_calls: FunctionCall[modal._functions.ReturnType]
328
- ) -> typing.Sequence[modal._functions.ReturnType]: ...
329
+ def __call__(self, *function_calls) -> typing.Sequence[modal._functions.ReturnType]: ...
330
+ async def aio(self, *function_calls) -> typing.Sequence[modal._functions.ReturnType]: ...
329
331
 
330
332
  gather: __gather_spec
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: modal
3
- Version: 0.73.67
3
+ Version: 0.73.69
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -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 = 67 # git: 54fbd18
4
+ build_number = 69 # git: f83977d
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes