modal 0.74.52__tar.gz → 0.74.54__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 (183) hide show
  1. {modal-0.74.52 → modal-0.74.54}/PKG-INFO +1 -1
  2. {modal-0.74.52 → modal-0.74.54}/modal/_functions.py +9 -0
  3. {modal-0.74.52 → modal-0.74.54}/modal/client.pyi +2 -2
  4. {modal-0.74.52 → modal-0.74.54}/modal/config.py +7 -2
  5. {modal-0.74.52 → modal-0.74.54}/modal/functions.pyi +12 -6
  6. {modal-0.74.52 → modal-0.74.54}/modal/parallel_map.py +1 -3
  7. {modal-0.74.52 → modal-0.74.54}/modal/token_flow.py +9 -2
  8. {modal-0.74.52 → modal-0.74.54}/modal/token_flow.pyi +1 -0
  9. {modal-0.74.52 → modal-0.74.54}/modal.egg-info/PKG-INFO +1 -1
  10. {modal-0.74.52 → modal-0.74.54}/modal_version/_version_generated.py +1 -1
  11. {modal-0.74.52 → modal-0.74.54}/LICENSE +0 -0
  12. {modal-0.74.52 → modal-0.74.54}/README.md +0 -0
  13. {modal-0.74.52 → modal-0.74.54}/modal/__init__.py +0 -0
  14. {modal-0.74.52 → modal-0.74.54}/modal/__main__.py +0 -0
  15. {modal-0.74.52 → modal-0.74.54}/modal/_clustered_functions.py +0 -0
  16. {modal-0.74.52 → modal-0.74.54}/modal/_clustered_functions.pyi +0 -0
  17. {modal-0.74.52 → modal-0.74.54}/modal/_container_entrypoint.py +0 -0
  18. {modal-0.74.52 → modal-0.74.54}/modal/_ipython.py +0 -0
  19. {modal-0.74.52 → modal-0.74.54}/modal/_location.py +0 -0
  20. {modal-0.74.52 → modal-0.74.54}/modal/_object.py +0 -0
  21. {modal-0.74.52 → modal-0.74.54}/modal/_output.py +0 -0
  22. {modal-0.74.52 → modal-0.74.54}/modal/_partial_function.py +0 -0
  23. {modal-0.74.52 → modal-0.74.54}/modal/_pty.py +0 -0
  24. {modal-0.74.52 → modal-0.74.54}/modal/_resolver.py +0 -0
  25. {modal-0.74.52 → modal-0.74.54}/modal/_resources.py +0 -0
  26. {modal-0.74.52 → modal-0.74.54}/modal/_runtime/__init__.py +0 -0
  27. {modal-0.74.52 → modal-0.74.54}/modal/_runtime/asgi.py +0 -0
  28. {modal-0.74.52 → modal-0.74.54}/modal/_runtime/container_io_manager.py +0 -0
  29. {modal-0.74.52 → modal-0.74.54}/modal/_runtime/container_io_manager.pyi +0 -0
  30. {modal-0.74.52 → modal-0.74.54}/modal/_runtime/execution_context.py +0 -0
  31. {modal-0.74.52 → modal-0.74.54}/modal/_runtime/execution_context.pyi +0 -0
  32. {modal-0.74.52 → modal-0.74.54}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  33. {modal-0.74.52 → modal-0.74.54}/modal/_runtime/telemetry.py +0 -0
  34. {modal-0.74.52 → modal-0.74.54}/modal/_runtime/user_code_imports.py +0 -0
  35. {modal-0.74.52 → modal-0.74.54}/modal/_serialization.py +0 -0
  36. {modal-0.74.52 → modal-0.74.54}/modal/_traceback.py +0 -0
  37. {modal-0.74.52 → modal-0.74.54}/modal/_tunnel.py +0 -0
  38. {modal-0.74.52 → modal-0.74.54}/modal/_tunnel.pyi +0 -0
  39. {modal-0.74.52 → modal-0.74.54}/modal/_type_manager.py +0 -0
  40. {modal-0.74.52 → modal-0.74.54}/modal/_utils/__init__.py +0 -0
  41. {modal-0.74.52 → modal-0.74.54}/modal/_utils/app_utils.py +0 -0
  42. {modal-0.74.52 → modal-0.74.54}/modal/_utils/async_utils.py +0 -0
  43. {modal-0.74.52 → modal-0.74.54}/modal/_utils/blob_utils.py +0 -0
  44. {modal-0.74.52 → modal-0.74.54}/modal/_utils/bytes_io_segment_payload.py +0 -0
  45. {modal-0.74.52 → modal-0.74.54}/modal/_utils/deprecation.py +0 -0
  46. {modal-0.74.52 → modal-0.74.54}/modal/_utils/docker_utils.py +0 -0
  47. {modal-0.74.52 → modal-0.74.54}/modal/_utils/function_utils.py +0 -0
  48. {modal-0.74.52 → modal-0.74.54}/modal/_utils/git_utils.py +0 -0
  49. {modal-0.74.52 → modal-0.74.54}/modal/_utils/grpc_testing.py +0 -0
  50. {modal-0.74.52 → modal-0.74.54}/modal/_utils/grpc_utils.py +0 -0
  51. {modal-0.74.52 → modal-0.74.54}/modal/_utils/hash_utils.py +0 -0
  52. {modal-0.74.52 → modal-0.74.54}/modal/_utils/http_utils.py +0 -0
  53. {modal-0.74.52 → modal-0.74.54}/modal/_utils/jwt_utils.py +0 -0
  54. {modal-0.74.52 → modal-0.74.54}/modal/_utils/logger.py +0 -0
  55. {modal-0.74.52 → modal-0.74.54}/modal/_utils/mount_utils.py +0 -0
  56. {modal-0.74.52 → modal-0.74.54}/modal/_utils/name_utils.py +0 -0
  57. {modal-0.74.52 → modal-0.74.54}/modal/_utils/package_utils.py +0 -0
  58. {modal-0.74.52 → modal-0.74.54}/modal/_utils/pattern_utils.py +0 -0
  59. {modal-0.74.52 → modal-0.74.54}/modal/_utils/rand_pb_testing.py +0 -0
  60. {modal-0.74.52 → modal-0.74.54}/modal/_utils/shell_utils.py +0 -0
  61. {modal-0.74.52 → modal-0.74.54}/modal/_vendor/__init__.py +0 -0
  62. {modal-0.74.52 → modal-0.74.54}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  63. {modal-0.74.52 → modal-0.74.54}/modal/_vendor/cloudpickle.py +0 -0
  64. {modal-0.74.52 → modal-0.74.54}/modal/_vendor/tblib.py +0 -0
  65. {modal-0.74.52 → modal-0.74.54}/modal/_watcher.py +0 -0
  66. {modal-0.74.52 → modal-0.74.54}/modal/app.py +0 -0
  67. {modal-0.74.52 → modal-0.74.54}/modal/app.pyi +0 -0
  68. {modal-0.74.52 → modal-0.74.54}/modal/call_graph.py +0 -0
  69. {modal-0.74.52 → modal-0.74.54}/modal/cli/__init__.py +0 -0
  70. {modal-0.74.52 → modal-0.74.54}/modal/cli/_download.py +0 -0
  71. {modal-0.74.52 → modal-0.74.54}/modal/cli/_traceback.py +0 -0
  72. {modal-0.74.52 → modal-0.74.54}/modal/cli/app.py +0 -0
  73. {modal-0.74.52 → modal-0.74.54}/modal/cli/config.py +0 -0
  74. {modal-0.74.52 → modal-0.74.54}/modal/cli/container.py +0 -0
  75. {modal-0.74.52 → modal-0.74.54}/modal/cli/dict.py +0 -0
  76. {modal-0.74.52 → modal-0.74.54}/modal/cli/entry_point.py +0 -0
  77. {modal-0.74.52 → modal-0.74.54}/modal/cli/environment.py +0 -0
  78. {modal-0.74.52 → modal-0.74.54}/modal/cli/import_refs.py +0 -0
  79. {modal-0.74.52 → modal-0.74.54}/modal/cli/launch.py +0 -0
  80. {modal-0.74.52 → modal-0.74.54}/modal/cli/network_file_system.py +0 -0
  81. {modal-0.74.52 → modal-0.74.54}/modal/cli/profile.py +0 -0
  82. {modal-0.74.52 → modal-0.74.54}/modal/cli/programs/__init__.py +0 -0
  83. {modal-0.74.52 → modal-0.74.54}/modal/cli/programs/run_jupyter.py +0 -0
  84. {modal-0.74.52 → modal-0.74.54}/modal/cli/programs/vscode.py +0 -0
  85. {modal-0.74.52 → modal-0.74.54}/modal/cli/queues.py +0 -0
  86. {modal-0.74.52 → modal-0.74.54}/modal/cli/run.py +0 -0
  87. {modal-0.74.52 → modal-0.74.54}/modal/cli/secret.py +0 -0
  88. {modal-0.74.52 → modal-0.74.54}/modal/cli/token.py +0 -0
  89. {modal-0.74.52 → modal-0.74.54}/modal/cli/utils.py +0 -0
  90. {modal-0.74.52 → modal-0.74.54}/modal/cli/volume.py +0 -0
  91. {modal-0.74.52 → modal-0.74.54}/modal/client.py +0 -0
  92. {modal-0.74.52 → modal-0.74.54}/modal/cloud_bucket_mount.py +0 -0
  93. {modal-0.74.52 → modal-0.74.54}/modal/cloud_bucket_mount.pyi +0 -0
  94. {modal-0.74.52 → modal-0.74.54}/modal/cls.py +0 -0
  95. {modal-0.74.52 → modal-0.74.54}/modal/cls.pyi +0 -0
  96. {modal-0.74.52 → modal-0.74.54}/modal/container_process.py +0 -0
  97. {modal-0.74.52 → modal-0.74.54}/modal/container_process.pyi +0 -0
  98. {modal-0.74.52 → modal-0.74.54}/modal/dict.py +0 -0
  99. {modal-0.74.52 → modal-0.74.54}/modal/dict.pyi +0 -0
  100. {modal-0.74.52 → modal-0.74.54}/modal/environments.py +0 -0
  101. {modal-0.74.52 → modal-0.74.54}/modal/environments.pyi +0 -0
  102. {modal-0.74.52 → modal-0.74.54}/modal/exception.py +0 -0
  103. {modal-0.74.52 → modal-0.74.54}/modal/experimental/__init__.py +0 -0
  104. {modal-0.74.52 → modal-0.74.54}/modal/experimental/ipython.py +0 -0
  105. {modal-0.74.52 → modal-0.74.54}/modal/file_io.py +0 -0
  106. {modal-0.74.52 → modal-0.74.54}/modal/file_io.pyi +0 -0
  107. {modal-0.74.52 → modal-0.74.54}/modal/file_pattern_matcher.py +0 -0
  108. {modal-0.74.52 → modal-0.74.54}/modal/functions.py +0 -0
  109. {modal-0.74.52 → modal-0.74.54}/modal/gpu.py +0 -0
  110. {modal-0.74.52 → modal-0.74.54}/modal/image.py +0 -0
  111. {modal-0.74.52 → modal-0.74.54}/modal/image.pyi +0 -0
  112. {modal-0.74.52 → modal-0.74.54}/modal/io_streams.py +0 -0
  113. {modal-0.74.52 → modal-0.74.54}/modal/io_streams.pyi +0 -0
  114. {modal-0.74.52 → modal-0.74.54}/modal/mount.py +0 -0
  115. {modal-0.74.52 → modal-0.74.54}/modal/mount.pyi +0 -0
  116. {modal-0.74.52 → modal-0.74.54}/modal/network_file_system.py +0 -0
  117. {modal-0.74.52 → modal-0.74.54}/modal/network_file_system.pyi +0 -0
  118. {modal-0.74.52 → modal-0.74.54}/modal/object.py +0 -0
  119. {modal-0.74.52 → modal-0.74.54}/modal/object.pyi +0 -0
  120. {modal-0.74.52 → modal-0.74.54}/modal/output.py +0 -0
  121. {modal-0.74.52 → modal-0.74.54}/modal/parallel_map.pyi +0 -0
  122. {modal-0.74.52 → modal-0.74.54}/modal/partial_function.py +0 -0
  123. {modal-0.74.52 → modal-0.74.54}/modal/partial_function.pyi +0 -0
  124. {modal-0.74.52 → modal-0.74.54}/modal/proxy.py +0 -0
  125. {modal-0.74.52 → modal-0.74.54}/modal/proxy.pyi +0 -0
  126. {modal-0.74.52 → modal-0.74.54}/modal/py.typed +0 -0
  127. {modal-0.74.52 → modal-0.74.54}/modal/queue.py +0 -0
  128. {modal-0.74.52 → modal-0.74.54}/modal/queue.pyi +0 -0
  129. {modal-0.74.52 → modal-0.74.54}/modal/requirements/2023.12.312.txt +0 -0
  130. {modal-0.74.52 → modal-0.74.54}/modal/requirements/2023.12.txt +0 -0
  131. {modal-0.74.52 → modal-0.74.54}/modal/requirements/2024.04.txt +0 -0
  132. {modal-0.74.52 → modal-0.74.54}/modal/requirements/2024.10.txt +0 -0
  133. {modal-0.74.52 → modal-0.74.54}/modal/requirements/PREVIEW.txt +0 -0
  134. {modal-0.74.52 → modal-0.74.54}/modal/requirements/README.md +0 -0
  135. {modal-0.74.52 → modal-0.74.54}/modal/requirements/base-images.json +0 -0
  136. {modal-0.74.52 → modal-0.74.54}/modal/retries.py +0 -0
  137. {modal-0.74.52 → modal-0.74.54}/modal/runner.py +0 -0
  138. {modal-0.74.52 → modal-0.74.54}/modal/runner.pyi +0 -0
  139. {modal-0.74.52 → modal-0.74.54}/modal/running_app.py +0 -0
  140. {modal-0.74.52 → modal-0.74.54}/modal/sandbox.py +0 -0
  141. {modal-0.74.52 → modal-0.74.54}/modal/sandbox.pyi +0 -0
  142. {modal-0.74.52 → modal-0.74.54}/modal/schedule.py +0 -0
  143. {modal-0.74.52 → modal-0.74.54}/modal/scheduler_placement.py +0 -0
  144. {modal-0.74.52 → modal-0.74.54}/modal/secret.py +0 -0
  145. {modal-0.74.52 → modal-0.74.54}/modal/secret.pyi +0 -0
  146. {modal-0.74.52 → modal-0.74.54}/modal/serving.py +0 -0
  147. {modal-0.74.52 → modal-0.74.54}/modal/serving.pyi +0 -0
  148. {modal-0.74.52 → modal-0.74.54}/modal/snapshot.py +0 -0
  149. {modal-0.74.52 → modal-0.74.54}/modal/snapshot.pyi +0 -0
  150. {modal-0.74.52 → modal-0.74.54}/modal/stream_type.py +0 -0
  151. {modal-0.74.52 → modal-0.74.54}/modal/volume.py +0 -0
  152. {modal-0.74.52 → modal-0.74.54}/modal/volume.pyi +0 -0
  153. {modal-0.74.52 → modal-0.74.54}/modal.egg-info/SOURCES.txt +0 -0
  154. {modal-0.74.52 → modal-0.74.54}/modal.egg-info/dependency_links.txt +0 -0
  155. {modal-0.74.52 → modal-0.74.54}/modal.egg-info/entry_points.txt +0 -0
  156. {modal-0.74.52 → modal-0.74.54}/modal.egg-info/requires.txt +0 -0
  157. {modal-0.74.52 → modal-0.74.54}/modal.egg-info/top_level.txt +0 -0
  158. {modal-0.74.52 → modal-0.74.54}/modal_docs/__init__.py +0 -0
  159. {modal-0.74.52 → modal-0.74.54}/modal_docs/gen_cli_docs.py +0 -0
  160. {modal-0.74.52 → modal-0.74.54}/modal_docs/gen_reference_docs.py +0 -0
  161. {modal-0.74.52 → modal-0.74.54}/modal_docs/mdmd/__init__.py +0 -0
  162. {modal-0.74.52 → modal-0.74.54}/modal_docs/mdmd/mdmd.py +0 -0
  163. {modal-0.74.52 → modal-0.74.54}/modal_docs/mdmd/signatures.py +0 -0
  164. {modal-0.74.52 → modal-0.74.54}/modal_proto/__init__.py +0 -0
  165. {modal-0.74.52 → modal-0.74.54}/modal_proto/api.proto +0 -0
  166. {modal-0.74.52 → modal-0.74.54}/modal_proto/api_grpc.py +0 -0
  167. {modal-0.74.52 → modal-0.74.54}/modal_proto/api_pb2.py +0 -0
  168. {modal-0.74.52 → modal-0.74.54}/modal_proto/api_pb2.pyi +0 -0
  169. {modal-0.74.52 → modal-0.74.54}/modal_proto/api_pb2_grpc.py +0 -0
  170. {modal-0.74.52 → modal-0.74.54}/modal_proto/api_pb2_grpc.pyi +0 -0
  171. {modal-0.74.52 → modal-0.74.54}/modal_proto/modal_api_grpc.py +0 -0
  172. {modal-0.74.52 → modal-0.74.54}/modal_proto/modal_options_grpc.py +0 -0
  173. {modal-0.74.52 → modal-0.74.54}/modal_proto/options.proto +0 -0
  174. {modal-0.74.52 → modal-0.74.54}/modal_proto/options_grpc.py +0 -0
  175. {modal-0.74.52 → modal-0.74.54}/modal_proto/options_pb2.py +0 -0
  176. {modal-0.74.52 → modal-0.74.54}/modal_proto/options_pb2.pyi +0 -0
  177. {modal-0.74.52 → modal-0.74.54}/modal_proto/options_pb2_grpc.py +0 -0
  178. {modal-0.74.52 → modal-0.74.54}/modal_proto/options_pb2_grpc.pyi +0 -0
  179. {modal-0.74.52 → modal-0.74.54}/modal_proto/py.typed +0 -0
  180. {modal-0.74.52 → modal-0.74.54}/modal_version/__init__.py +0 -0
  181. {modal-0.74.52 → modal-0.74.54}/modal_version/__main__.py +0 -0
  182. {modal-0.74.52 → modal-0.74.54}/pyproject.toml +0 -0
  183. {modal-0.74.52 → modal-0.74.54}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 0.74.52
3
+ Version: 0.74.54
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -1583,6 +1583,15 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1583
1583
  fc._is_generator = self._is_generator if self._is_generator else False
1584
1584
  return fc
1585
1585
 
1586
+ @synchronizer.no_input_translation
1587
+ @live_method
1588
+ async def _spawn_map_inner(self, *args: P.args, **kwargs: P.kwargs) -> None:
1589
+ self._check_no_web_url("spawn_map")
1590
+ if self._is_generator:
1591
+ raise Exception("Cannot `spawn_map` over a generator function.")
1592
+
1593
+ await self._call_function_nowait(args, kwargs, api_pb2.FUNCTION_CALL_INVOCATION_TYPE_ASYNC, from_spawn_map=True)
1594
+
1586
1595
  @synchronizer.no_input_translation
1587
1596
  @live_method
1588
1597
  async def spawn(self, *args: P.args, **kwargs: P.kwargs) -> "_FunctionCall[ReturnType]":
@@ -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.74.52"
30
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.54"
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.74.52"
88
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.54"
89
89
  ): ...
90
90
  def is_closed(self) -> bool: ...
91
91
  @property
@@ -102,6 +102,9 @@ from ._utils.deprecation import deprecation_error
102
102
  from ._utils.logger import configure_logger
103
103
  from .exception import InvalidError
104
104
 
105
+ DEFAULT_SERVER_URL = "https://api.modal.com"
106
+
107
+
105
108
  # Locate config file and read it
106
109
 
107
110
  user_config_path: str = os.environ.get("MODAL_CONFIG_PATH") or os.path.expanduser("~/.modal.toml")
@@ -222,7 +225,7 @@ _SETTINGS = {
222
225
  "loglevel": _Setting("WARNING", lambda s: s.upper()),
223
226
  "log_format": _Setting("STRING", lambda s: s.upper()),
224
227
  "log_pattern": _Setting(), # optional override of the formatting pattern
225
- "server_url": _Setting("https://api.modal.com"),
228
+ "server_url": _Setting(DEFAULT_SERVER_URL),
226
229
  "token_id": _Setting(),
227
230
  "token_secret": _Setting(),
228
231
  "task_id": _Setting(),
@@ -316,7 +319,9 @@ configure_logger(logger, config["loglevel"], config["log_format"])
316
319
 
317
320
 
318
321
  def _store_user_config(
319
- new_settings: dict[str, Any], profile: Optional[str] = None, active_profile: Optional[str] = None
322
+ new_settings: dict[str, Any],
323
+ profile: Optional[str] = None,
324
+ active_profile: Optional[str] = None,
320
325
  ):
321
326
  """Internal method, used by the CLI to set tokens."""
322
327
  if profile is None:
@@ -222,11 +222,11 @@ class Function(
222
222
 
223
223
  _call_generator_nowait: ___call_generator_nowait_spec[typing_extensions.Self]
224
224
 
225
- class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
225
+ class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
226
226
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
227
227
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
228
228
 
229
- remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
229
+ remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
230
230
 
231
231
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
232
232
  def __call__(self, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
@@ -241,19 +241,25 @@ class Function(
241
241
  self, *args: modal._functions.P.args, **kwargs: modal._functions.P.kwargs
242
242
  ) -> modal._functions.OriginalReturnType: ...
243
243
 
244
- class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
244
+ class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
245
245
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
246
246
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
247
247
 
248
248
  _experimental_spawn: ___experimental_spawn_spec[
249
- modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
249
+ modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
250
250
  ]
251
251
 
252
- class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
252
+ class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
253
+ def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
254
+ async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
255
+
256
+ _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
257
+
258
+ class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
253
259
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
254
260
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
255
261
 
256
- spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
262
+ spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
257
263
 
258
264
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
259
265
 
@@ -496,9 +496,7 @@ async def _spawn_map_async(self, *input_iterators, kwargs={}) -> None:
496
496
  errors, log a warning that the function call is waiting to be created.
497
497
  """
498
498
 
499
- return self._call_function_nowait.aio(
500
- args, kwargs, api_pb2.FUNCTION_CALL_INVOCATION_TYPE_ASYNC, from_spawn_map=True
501
- )
499
+ return self._spawn_map_inner.aio(args, kwargs, api_pb2.FUNCTION_CALL_INVOCATION_TYPE_ASYNC)
502
500
 
503
501
  input_gen = async_zip(*[sync_or_async_iter(it) for it in input_iterators])
504
502
 
@@ -14,7 +14,7 @@ from modal_proto import api_pb2
14
14
  from ._utils.async_utils import synchronize_api
15
15
  from ._utils.http_utils import run_temporary_http_server
16
16
  from .client import _Client
17
- from .config import _lookup_workspace, _store_user_config, config, config_profiles, user_config_path
17
+ from .config import DEFAULT_SERVER_URL, _lookup_workspace, _store_user_config, config, config_profiles, user_config_path
18
18
  from .exception import AuthError
19
19
 
20
20
 
@@ -108,6 +108,8 @@ async def _new_token(
108
108
 
109
109
  console.print("[green]Web authentication finished successfully![/green]")
110
110
 
111
+ server_url = client.server_url
112
+
111
113
  assert result is not None
112
114
 
113
115
  if result.workspace_username:
@@ -115,7 +117,9 @@ async def _new_token(
115
117
  f"[green]Token is connected to the [magenta]{result.workspace_username}[/magenta] workspace.[/green]"
116
118
  )
117
119
 
118
- await _set_token(result.token_id, result.token_secret, profile=profile, activate=activate, verify=verify)
120
+ await _set_token(
121
+ result.token_id, result.token_secret, profile=profile, activate=activate, verify=verify, server_url=server_url
122
+ )
119
123
 
120
124
 
121
125
  async def _set_token(
@@ -125,6 +129,7 @@ async def _set_token(
125
129
  profile: Optional[str] = None,
126
130
  activate: bool = True,
127
131
  verify: bool = True,
132
+ server_url: Optional[str] = None,
128
133
  ):
129
134
  # TODO add server_url as a parameter for verification?
130
135
  server_url = config.get("server_url", profile=profile)
@@ -149,6 +154,8 @@ async def _set_token(
149
154
  profile = workspace.username
150
155
 
151
156
  config_data = {"token_id": token_id, "token_secret": token_secret}
157
+ if server_url is not None and server_url != DEFAULT_SERVER_URL:
158
+ config_data["server_url"] = server_url
152
159
  # Activate the profile when requested or if no other profiles currently exist
153
160
  active_profile = profile if (activate or not config_profiles()) else None
154
161
  with console.status("Storing token", spinner="dots"):
@@ -53,5 +53,6 @@ async def _set_token(
53
53
  profile: typing.Optional[str] = None,
54
54
  activate: bool = True,
55
55
  verify: bool = True,
56
+ server_url: typing.Optional[str] = None,
56
57
  ): ...
57
58
  def _open_url(url: str) -> bool: ...
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 0.74.52
3
+ Version: 0.74.54
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 = 52 # git: 191bebc
4
+ build_number = 54 # git: 756e8cf
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