modal 0.74.21__tar.gz → 0.74.22__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.21 → modal-0.74.22}/PKG-INFO +1 -1
  2. {modal-0.74.21 → modal-0.74.22}/modal/cli/secret.py +26 -3
  3. {modal-0.74.21 → modal-0.74.22}/modal/client.pyi +2 -2
  4. {modal-0.74.21 → modal-0.74.22}/modal/functions.pyi +6 -6
  5. {modal-0.74.21 → modal-0.74.22}/modal.egg-info/PKG-INFO +1 -1
  6. {modal-0.74.21 → modal-0.74.22}/modal_version/_version_generated.py +1 -1
  7. {modal-0.74.21 → modal-0.74.22}/LICENSE +0 -0
  8. {modal-0.74.21 → modal-0.74.22}/README.md +0 -0
  9. {modal-0.74.21 → modal-0.74.22}/modal/__init__.py +0 -0
  10. {modal-0.74.21 → modal-0.74.22}/modal/__main__.py +0 -0
  11. {modal-0.74.21 → modal-0.74.22}/modal/_clustered_functions.py +0 -0
  12. {modal-0.74.21 → modal-0.74.22}/modal/_clustered_functions.pyi +0 -0
  13. {modal-0.74.21 → modal-0.74.22}/modal/_container_entrypoint.py +0 -0
  14. {modal-0.74.21 → modal-0.74.22}/modal/_functions.py +0 -0
  15. {modal-0.74.21 → modal-0.74.22}/modal/_ipython.py +0 -0
  16. {modal-0.74.21 → modal-0.74.22}/modal/_location.py +0 -0
  17. {modal-0.74.21 → modal-0.74.22}/modal/_object.py +0 -0
  18. {modal-0.74.21 → modal-0.74.22}/modal/_output.py +0 -0
  19. {modal-0.74.21 → modal-0.74.22}/modal/_partial_function.py +0 -0
  20. {modal-0.74.21 → modal-0.74.22}/modal/_pty.py +0 -0
  21. {modal-0.74.21 → modal-0.74.22}/modal/_resolver.py +0 -0
  22. {modal-0.74.21 → modal-0.74.22}/modal/_resources.py +0 -0
  23. {modal-0.74.21 → modal-0.74.22}/modal/_runtime/__init__.py +0 -0
  24. {modal-0.74.21 → modal-0.74.22}/modal/_runtime/asgi.py +0 -0
  25. {modal-0.74.21 → modal-0.74.22}/modal/_runtime/container_io_manager.py +0 -0
  26. {modal-0.74.21 → modal-0.74.22}/modal/_runtime/container_io_manager.pyi +0 -0
  27. {modal-0.74.21 → modal-0.74.22}/modal/_runtime/execution_context.py +0 -0
  28. {modal-0.74.21 → modal-0.74.22}/modal/_runtime/execution_context.pyi +0 -0
  29. {modal-0.74.21 → modal-0.74.22}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  30. {modal-0.74.21 → modal-0.74.22}/modal/_runtime/telemetry.py +0 -0
  31. {modal-0.74.21 → modal-0.74.22}/modal/_runtime/user_code_imports.py +0 -0
  32. {modal-0.74.21 → modal-0.74.22}/modal/_serialization.py +0 -0
  33. {modal-0.74.21 → modal-0.74.22}/modal/_traceback.py +0 -0
  34. {modal-0.74.21 → modal-0.74.22}/modal/_tunnel.py +0 -0
  35. {modal-0.74.21 → modal-0.74.22}/modal/_tunnel.pyi +0 -0
  36. {modal-0.74.21 → modal-0.74.22}/modal/_type_manager.py +0 -0
  37. {modal-0.74.21 → modal-0.74.22}/modal/_utils/__init__.py +0 -0
  38. {modal-0.74.21 → modal-0.74.22}/modal/_utils/app_utils.py +0 -0
  39. {modal-0.74.21 → modal-0.74.22}/modal/_utils/async_utils.py +0 -0
  40. {modal-0.74.21 → modal-0.74.22}/modal/_utils/blob_utils.py +0 -0
  41. {modal-0.74.21 → modal-0.74.22}/modal/_utils/bytes_io_segment_payload.py +0 -0
  42. {modal-0.74.21 → modal-0.74.22}/modal/_utils/deprecation.py +0 -0
  43. {modal-0.74.21 → modal-0.74.22}/modal/_utils/docker_utils.py +0 -0
  44. {modal-0.74.21 → modal-0.74.22}/modal/_utils/function_utils.py +0 -0
  45. {modal-0.74.21 → modal-0.74.22}/modal/_utils/git_utils.py +0 -0
  46. {modal-0.74.21 → modal-0.74.22}/modal/_utils/grpc_testing.py +0 -0
  47. {modal-0.74.21 → modal-0.74.22}/modal/_utils/grpc_utils.py +0 -0
  48. {modal-0.74.21 → modal-0.74.22}/modal/_utils/hash_utils.py +0 -0
  49. {modal-0.74.21 → modal-0.74.22}/modal/_utils/http_utils.py +0 -0
  50. {modal-0.74.21 → modal-0.74.22}/modal/_utils/jwt_utils.py +0 -0
  51. {modal-0.74.21 → modal-0.74.22}/modal/_utils/logger.py +0 -0
  52. {modal-0.74.21 → modal-0.74.22}/modal/_utils/mount_utils.py +0 -0
  53. {modal-0.74.21 → modal-0.74.22}/modal/_utils/name_utils.py +0 -0
  54. {modal-0.74.21 → modal-0.74.22}/modal/_utils/package_utils.py +0 -0
  55. {modal-0.74.21 → modal-0.74.22}/modal/_utils/pattern_utils.py +0 -0
  56. {modal-0.74.21 → modal-0.74.22}/modal/_utils/rand_pb_testing.py +0 -0
  57. {modal-0.74.21 → modal-0.74.22}/modal/_utils/shell_utils.py +0 -0
  58. {modal-0.74.21 → modal-0.74.22}/modal/_vendor/__init__.py +0 -0
  59. {modal-0.74.21 → modal-0.74.22}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  60. {modal-0.74.21 → modal-0.74.22}/modal/_vendor/cloudpickle.py +0 -0
  61. {modal-0.74.21 → modal-0.74.22}/modal/_vendor/tblib.py +0 -0
  62. {modal-0.74.21 → modal-0.74.22}/modal/_watcher.py +0 -0
  63. {modal-0.74.21 → modal-0.74.22}/modal/app.py +0 -0
  64. {modal-0.74.21 → modal-0.74.22}/modal/app.pyi +0 -0
  65. {modal-0.74.21 → modal-0.74.22}/modal/call_graph.py +0 -0
  66. {modal-0.74.21 → modal-0.74.22}/modal/cli/__init__.py +0 -0
  67. {modal-0.74.21 → modal-0.74.22}/modal/cli/_download.py +0 -0
  68. {modal-0.74.21 → modal-0.74.22}/modal/cli/_traceback.py +0 -0
  69. {modal-0.74.21 → modal-0.74.22}/modal/cli/app.py +0 -0
  70. {modal-0.74.21 → modal-0.74.22}/modal/cli/config.py +0 -0
  71. {modal-0.74.21 → modal-0.74.22}/modal/cli/container.py +0 -0
  72. {modal-0.74.21 → modal-0.74.22}/modal/cli/dict.py +0 -0
  73. {modal-0.74.21 → modal-0.74.22}/modal/cli/entry_point.py +0 -0
  74. {modal-0.74.21 → modal-0.74.22}/modal/cli/environment.py +0 -0
  75. {modal-0.74.21 → modal-0.74.22}/modal/cli/import_refs.py +0 -0
  76. {modal-0.74.21 → modal-0.74.22}/modal/cli/launch.py +0 -0
  77. {modal-0.74.21 → modal-0.74.22}/modal/cli/network_file_system.py +0 -0
  78. {modal-0.74.21 → modal-0.74.22}/modal/cli/profile.py +0 -0
  79. {modal-0.74.21 → modal-0.74.22}/modal/cli/programs/__init__.py +0 -0
  80. {modal-0.74.21 → modal-0.74.22}/modal/cli/programs/run_jupyter.py +0 -0
  81. {modal-0.74.21 → modal-0.74.22}/modal/cli/programs/vscode.py +0 -0
  82. {modal-0.74.21 → modal-0.74.22}/modal/cli/queues.py +0 -0
  83. {modal-0.74.21 → modal-0.74.22}/modal/cli/run.py +0 -0
  84. {modal-0.74.21 → modal-0.74.22}/modal/cli/token.py +0 -0
  85. {modal-0.74.21 → modal-0.74.22}/modal/cli/utils.py +0 -0
  86. {modal-0.74.21 → modal-0.74.22}/modal/cli/volume.py +0 -0
  87. {modal-0.74.21 → modal-0.74.22}/modal/client.py +0 -0
  88. {modal-0.74.21 → modal-0.74.22}/modal/cloud_bucket_mount.py +0 -0
  89. {modal-0.74.21 → modal-0.74.22}/modal/cloud_bucket_mount.pyi +0 -0
  90. {modal-0.74.21 → modal-0.74.22}/modal/cls.py +0 -0
  91. {modal-0.74.21 → modal-0.74.22}/modal/cls.pyi +0 -0
  92. {modal-0.74.21 → modal-0.74.22}/modal/config.py +0 -0
  93. {modal-0.74.21 → modal-0.74.22}/modal/container_process.py +0 -0
  94. {modal-0.74.21 → modal-0.74.22}/modal/container_process.pyi +0 -0
  95. {modal-0.74.21 → modal-0.74.22}/modal/dict.py +0 -0
  96. {modal-0.74.21 → modal-0.74.22}/modal/dict.pyi +0 -0
  97. {modal-0.74.21 → modal-0.74.22}/modal/environments.py +0 -0
  98. {modal-0.74.21 → modal-0.74.22}/modal/environments.pyi +0 -0
  99. {modal-0.74.21 → modal-0.74.22}/modal/exception.py +0 -0
  100. {modal-0.74.21 → modal-0.74.22}/modal/experimental/__init__.py +0 -0
  101. {modal-0.74.21 → modal-0.74.22}/modal/experimental/ipython.py +0 -0
  102. {modal-0.74.21 → modal-0.74.22}/modal/file_io.py +0 -0
  103. {modal-0.74.21 → modal-0.74.22}/modal/file_io.pyi +0 -0
  104. {modal-0.74.21 → modal-0.74.22}/modal/file_pattern_matcher.py +0 -0
  105. {modal-0.74.21 → modal-0.74.22}/modal/functions.py +0 -0
  106. {modal-0.74.21 → modal-0.74.22}/modal/gpu.py +0 -0
  107. {modal-0.74.21 → modal-0.74.22}/modal/image.py +0 -0
  108. {modal-0.74.21 → modal-0.74.22}/modal/image.pyi +0 -0
  109. {modal-0.74.21 → modal-0.74.22}/modal/io_streams.py +0 -0
  110. {modal-0.74.21 → modal-0.74.22}/modal/io_streams.pyi +0 -0
  111. {modal-0.74.21 → modal-0.74.22}/modal/mount.py +0 -0
  112. {modal-0.74.21 → modal-0.74.22}/modal/mount.pyi +0 -0
  113. {modal-0.74.21 → modal-0.74.22}/modal/network_file_system.py +0 -0
  114. {modal-0.74.21 → modal-0.74.22}/modal/network_file_system.pyi +0 -0
  115. {modal-0.74.21 → modal-0.74.22}/modal/object.py +0 -0
  116. {modal-0.74.21 → modal-0.74.22}/modal/object.pyi +0 -0
  117. {modal-0.74.21 → modal-0.74.22}/modal/output.py +0 -0
  118. {modal-0.74.21 → modal-0.74.22}/modal/parallel_map.py +0 -0
  119. {modal-0.74.21 → modal-0.74.22}/modal/parallel_map.pyi +0 -0
  120. {modal-0.74.21 → modal-0.74.22}/modal/partial_function.py +0 -0
  121. {modal-0.74.21 → modal-0.74.22}/modal/partial_function.pyi +0 -0
  122. {modal-0.74.21 → modal-0.74.22}/modal/proxy.py +0 -0
  123. {modal-0.74.21 → modal-0.74.22}/modal/proxy.pyi +0 -0
  124. {modal-0.74.21 → modal-0.74.22}/modal/py.typed +0 -0
  125. {modal-0.74.21 → modal-0.74.22}/modal/queue.py +0 -0
  126. {modal-0.74.21 → modal-0.74.22}/modal/queue.pyi +0 -0
  127. {modal-0.74.21 → modal-0.74.22}/modal/requirements/2023.12.312.txt +0 -0
  128. {modal-0.74.21 → modal-0.74.22}/modal/requirements/2023.12.txt +0 -0
  129. {modal-0.74.21 → modal-0.74.22}/modal/requirements/2024.04.txt +0 -0
  130. {modal-0.74.21 → modal-0.74.22}/modal/requirements/2024.10.txt +0 -0
  131. {modal-0.74.21 → modal-0.74.22}/modal/requirements/PREVIEW.txt +0 -0
  132. {modal-0.74.21 → modal-0.74.22}/modal/requirements/README.md +0 -0
  133. {modal-0.74.21 → modal-0.74.22}/modal/requirements/base-images.json +0 -0
  134. {modal-0.74.21 → modal-0.74.22}/modal/retries.py +0 -0
  135. {modal-0.74.21 → modal-0.74.22}/modal/runner.py +0 -0
  136. {modal-0.74.21 → modal-0.74.22}/modal/runner.pyi +0 -0
  137. {modal-0.74.21 → modal-0.74.22}/modal/running_app.py +0 -0
  138. {modal-0.74.21 → modal-0.74.22}/modal/sandbox.py +0 -0
  139. {modal-0.74.21 → modal-0.74.22}/modal/sandbox.pyi +0 -0
  140. {modal-0.74.21 → modal-0.74.22}/modal/schedule.py +0 -0
  141. {modal-0.74.21 → modal-0.74.22}/modal/scheduler_placement.py +0 -0
  142. {modal-0.74.21 → modal-0.74.22}/modal/secret.py +0 -0
  143. {modal-0.74.21 → modal-0.74.22}/modal/secret.pyi +0 -0
  144. {modal-0.74.21 → modal-0.74.22}/modal/serving.py +0 -0
  145. {modal-0.74.21 → modal-0.74.22}/modal/serving.pyi +0 -0
  146. {modal-0.74.21 → modal-0.74.22}/modal/snapshot.py +0 -0
  147. {modal-0.74.21 → modal-0.74.22}/modal/snapshot.pyi +0 -0
  148. {modal-0.74.21 → modal-0.74.22}/modal/stream_type.py +0 -0
  149. {modal-0.74.21 → modal-0.74.22}/modal/token_flow.py +0 -0
  150. {modal-0.74.21 → modal-0.74.22}/modal/token_flow.pyi +0 -0
  151. {modal-0.74.21 → modal-0.74.22}/modal/volume.py +0 -0
  152. {modal-0.74.21 → modal-0.74.22}/modal/volume.pyi +0 -0
  153. {modal-0.74.21 → modal-0.74.22}/modal.egg-info/SOURCES.txt +0 -0
  154. {modal-0.74.21 → modal-0.74.22}/modal.egg-info/dependency_links.txt +0 -0
  155. {modal-0.74.21 → modal-0.74.22}/modal.egg-info/entry_points.txt +0 -0
  156. {modal-0.74.21 → modal-0.74.22}/modal.egg-info/requires.txt +0 -0
  157. {modal-0.74.21 → modal-0.74.22}/modal.egg-info/top_level.txt +0 -0
  158. {modal-0.74.21 → modal-0.74.22}/modal_docs/__init__.py +0 -0
  159. {modal-0.74.21 → modal-0.74.22}/modal_docs/gen_cli_docs.py +0 -0
  160. {modal-0.74.21 → modal-0.74.22}/modal_docs/gen_reference_docs.py +0 -0
  161. {modal-0.74.21 → modal-0.74.22}/modal_docs/mdmd/__init__.py +0 -0
  162. {modal-0.74.21 → modal-0.74.22}/modal_docs/mdmd/mdmd.py +0 -0
  163. {modal-0.74.21 → modal-0.74.22}/modal_docs/mdmd/signatures.py +0 -0
  164. {modal-0.74.21 → modal-0.74.22}/modal_proto/__init__.py +0 -0
  165. {modal-0.74.21 → modal-0.74.22}/modal_proto/api.proto +0 -0
  166. {modal-0.74.21 → modal-0.74.22}/modal_proto/api_grpc.py +0 -0
  167. {modal-0.74.21 → modal-0.74.22}/modal_proto/api_pb2.py +0 -0
  168. {modal-0.74.21 → modal-0.74.22}/modal_proto/api_pb2.pyi +0 -0
  169. {modal-0.74.21 → modal-0.74.22}/modal_proto/api_pb2_grpc.py +0 -0
  170. {modal-0.74.21 → modal-0.74.22}/modal_proto/api_pb2_grpc.pyi +0 -0
  171. {modal-0.74.21 → modal-0.74.22}/modal_proto/modal_api_grpc.py +0 -0
  172. {modal-0.74.21 → modal-0.74.22}/modal_proto/modal_options_grpc.py +0 -0
  173. {modal-0.74.21 → modal-0.74.22}/modal_proto/options.proto +0 -0
  174. {modal-0.74.21 → modal-0.74.22}/modal_proto/options_grpc.py +0 -0
  175. {modal-0.74.21 → modal-0.74.22}/modal_proto/options_pb2.py +0 -0
  176. {modal-0.74.21 → modal-0.74.22}/modal_proto/options_pb2.pyi +0 -0
  177. {modal-0.74.21 → modal-0.74.22}/modal_proto/options_pb2_grpc.py +0 -0
  178. {modal-0.74.21 → modal-0.74.22}/modal_proto/options_pb2_grpc.pyi +0 -0
  179. {modal-0.74.21 → modal-0.74.22}/modal_proto/py.typed +0 -0
  180. {modal-0.74.21 → modal-0.74.22}/modal_version/__init__.py +0 -0
  181. {modal-0.74.21 → modal-0.74.22}/modal_version/__main__.py +0 -0
  182. {modal-0.74.21 → modal-0.74.22}/pyproject.toml +0 -0
  183. {modal-0.74.21 → modal-0.74.22}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 0.74.21
3
+ Version: 0.74.22
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -9,10 +9,11 @@ import click
9
9
  import typer
10
10
  from rich.console import Console
11
11
  from rich.syntax import Syntax
12
+ from typer import Argument
12
13
 
13
14
  from modal._utils.async_utils import synchronizer
14
15
  from modal._utils.grpc_utils import retry_transient_errors
15
- from modal.cli.utils import ENV_OPTION, display_table, timestamp_to_local
16
+ from modal.cli.utils import ENV_OPTION, YES_OPTION, display_table, timestamp_to_local
16
17
  from modal.client import _Client
17
18
  from modal.environments import ensure_env
18
19
  from modal.secret import _Secret
@@ -23,7 +24,7 @@ secret_cli = typer.Typer(name="secret", help="Manage secrets.", no_args_is_help=
23
24
 
24
25
  @secret_cli.command("list", help="List your published secrets.")
25
26
  @synchronizer.create_blocking
26
- async def list_(env: Optional[str] = ENV_OPTION, json: Optional[bool] = False):
27
+ async def list_(env: Optional[str] = ENV_OPTION, json: bool = False):
27
28
  env = ensure_env(env)
28
29
  client = await _Client.from_env()
29
30
  response = await retry_transient_errors(client.stub.SecretList, api_pb2.SecretListRequest(environment_name=env))
@@ -43,7 +44,7 @@ async def list_(env: Optional[str] = ENV_OPTION, json: Optional[bool] = False):
43
44
  display_table(column_names, rows, json, title=f"Secrets{env_part}")
44
45
 
45
46
 
46
- @secret_cli.command("create", help="Create a new secret. Use `--force` to overwrite an existing one.")
47
+ @secret_cli.command("create", help="Create a new secret.")
47
48
  @synchronizer.create_blocking
48
49
  async def create(
49
50
  secret_name,
@@ -91,6 +92,28 @@ def some_function():
91
92
  console.print(Syntax(example_code, "python"))
92
93
 
93
94
 
95
+ @secret_cli.command("delete", help="Delete a named secret.")
96
+ @synchronizer.create_blocking
97
+ async def delete(
98
+ secret_name: str = Argument(help="Name of the modal.Secret to be deleted. Case sensitive"),
99
+ yes: bool = YES_OPTION,
100
+ env: Optional[str] = ENV_OPTION,
101
+ ):
102
+ """TODO"""
103
+ env = ensure_env(env)
104
+ secret = await _Secret.from_name(secret_name, environment_name=env).hydrate()
105
+ if not yes:
106
+ typer.confirm(
107
+ f"Are you sure you want to irrevocably delete the modal.Secret '{secret_name}'?",
108
+ default=False,
109
+ abort=True,
110
+ )
111
+ client = await _Client.from_env()
112
+
113
+ # TODO: replace with API on `modal.Secret` when we add it
114
+ await client.stub.SecretDelete(api_pb2.SecretDeleteRequest(secret_id=secret.object_id))
115
+
116
+
94
117
  def get_text_from_editor(key) -> str:
95
118
  with NamedTemporaryFile("w+", prefix="secret_buffer", suffix=".txt") as bufferfile:
96
119
  if platform.system() != "Windows":
@@ -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.21"
30
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.22"
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.21"
88
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.22"
89
89
  ): ...
90
90
  def is_closed(self) -> bool: ...
91
91
  @property
@@ -200,11 +200,11 @@ class Function(
200
200
 
201
201
  _call_generator_nowait: ___call_generator_nowait_spec[typing_extensions.Self]
202
202
 
203
- class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
203
+ class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
204
204
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
205
205
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
206
206
 
207
- remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
207
+ remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
208
208
 
209
209
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
210
210
  def __call__(self, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
@@ -219,19 +219,19 @@ class Function(
219
219
  self, *args: modal._functions.P.args, **kwargs: modal._functions.P.kwargs
220
220
  ) -> modal._functions.OriginalReturnType: ...
221
221
 
222
- class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
222
+ class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
223
223
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
224
224
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
225
225
 
226
226
  _experimental_spawn: ___experimental_spawn_spec[
227
- modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
227
+ modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
228
228
  ]
229
229
 
230
- class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
230
+ class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
231
231
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
232
232
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
233
233
 
234
- spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
234
+ spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
235
235
 
236
236
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
237
237
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 0.74.21
3
+ Version: 0.74.22
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 = 21 # git: 6821129
4
+ build_number = 22 # git: daaa00c
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