modal 1.1.4.dev29__tar.gz → 1.1.4.dev30__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 (190) hide show
  1. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/PKG-INFO +1 -1
  2. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/client.pyi +2 -2
  3. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/functions.pyi +6 -6
  4. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/sandbox.py +16 -0
  5. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/sandbox.pyi +1 -0
  6. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal.egg-info/PKG-INFO +1 -1
  7. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_version/__init__.py +1 -1
  8. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/LICENSE +0 -0
  9. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/README.md +0 -0
  10. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/__init__.py +0 -0
  11. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/__main__.py +0 -0
  12. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_clustered_functions.py +0 -0
  13. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_clustered_functions.pyi +0 -0
  14. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_container_entrypoint.py +0 -0
  15. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_functions.py +0 -0
  16. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_ipython.py +0 -0
  17. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_location.py +0 -0
  18. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_object.py +0 -0
  19. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_output.py +0 -0
  20. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_partial_function.py +0 -0
  21. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_pty.py +0 -0
  22. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_resolver.py +0 -0
  23. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_resources.py +0 -0
  24. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_runtime/__init__.py +0 -0
  25. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_runtime/asgi.py +0 -0
  26. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_runtime/container_io_manager.py +0 -0
  27. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_runtime/container_io_manager.pyi +0 -0
  28. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_runtime/execution_context.py +0 -0
  29. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_runtime/execution_context.pyi +0 -0
  30. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  31. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_runtime/telemetry.py +0 -0
  32. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_runtime/user_code_imports.py +0 -0
  33. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_serialization.py +0 -0
  34. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_traceback.py +0 -0
  35. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_tunnel.py +0 -0
  36. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_tunnel.pyi +0 -0
  37. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_type_manager.py +0 -0
  38. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/__init__.py +0 -0
  39. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/app_utils.py +0 -0
  40. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/async_utils.py +0 -0
  41. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/auth_token_manager.py +0 -0
  42. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/blob_utils.py +0 -0
  43. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/bytes_io_segment_payload.py +0 -0
  44. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/deprecation.py +0 -0
  45. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/docker_utils.py +0 -0
  46. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/function_utils.py +0 -0
  47. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/git_utils.py +0 -0
  48. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/grpc_testing.py +0 -0
  49. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/grpc_utils.py +0 -0
  50. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/hash_utils.py +0 -0
  51. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/http_utils.py +0 -0
  52. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/jwt_utils.py +0 -0
  53. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/logger.py +0 -0
  54. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/mount_utils.py +0 -0
  55. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/name_utils.py +0 -0
  56. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/package_utils.py +0 -0
  57. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/pattern_utils.py +0 -0
  58. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/rand_pb_testing.py +0 -0
  59. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/shell_utils.py +0 -0
  60. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_utils/time_utils.py +0 -0
  61. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_vendor/__init__.py +0 -0
  62. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  63. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_vendor/cloudpickle.py +0 -0
  64. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_vendor/tblib.py +0 -0
  65. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/_watcher.py +0 -0
  66. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/app.py +0 -0
  67. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/app.pyi +0 -0
  68. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/builder/2023.12.312.txt +0 -0
  69. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/builder/2023.12.txt +0 -0
  70. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/builder/2024.04.txt +0 -0
  71. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/builder/2024.10.txt +0 -0
  72. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/builder/2025.06.txt +0 -0
  73. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/builder/PREVIEW.txt +0 -0
  74. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/builder/README.md +0 -0
  75. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/builder/base-images.json +0 -0
  76. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/call_graph.py +0 -0
  77. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/__init__.py +0 -0
  78. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/_download.py +0 -0
  79. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/_traceback.py +0 -0
  80. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/app.py +0 -0
  81. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/cluster.py +0 -0
  82. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/config.py +0 -0
  83. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/container.py +0 -0
  84. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/dict.py +0 -0
  85. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/entry_point.py +0 -0
  86. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/environment.py +0 -0
  87. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/import_refs.py +0 -0
  88. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/launch.py +0 -0
  89. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/network_file_system.py +0 -0
  90. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/profile.py +0 -0
  91. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/programs/__init__.py +0 -0
  92. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/programs/launch_instance_ssh.py +0 -0
  93. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/programs/run_jupyter.py +0 -0
  94. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/programs/run_marimo.py +0 -0
  95. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/programs/vscode.py +0 -0
  96. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/queues.py +0 -0
  97. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/run.py +0 -0
  98. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/secret.py +0 -0
  99. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/token.py +0 -0
  100. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/utils.py +0 -0
  101. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cli/volume.py +0 -0
  102. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/client.py +0 -0
  103. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cloud_bucket_mount.py +0 -0
  104. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cloud_bucket_mount.pyi +0 -0
  105. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cls.py +0 -0
  106. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/cls.pyi +0 -0
  107. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/config.py +0 -0
  108. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/container_process.py +0 -0
  109. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/container_process.pyi +0 -0
  110. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/dict.py +0 -0
  111. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/dict.pyi +0 -0
  112. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/environments.py +0 -0
  113. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/environments.pyi +0 -0
  114. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/exception.py +0 -0
  115. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/experimental/__init__.py +0 -0
  116. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/experimental/flash.py +0 -0
  117. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/experimental/flash.pyi +0 -0
  118. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/experimental/ipython.py +0 -0
  119. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/file_io.py +0 -0
  120. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/file_io.pyi +0 -0
  121. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/file_pattern_matcher.py +0 -0
  122. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/functions.py +0 -0
  123. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/gpu.py +0 -0
  124. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/image.py +0 -0
  125. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/image.pyi +0 -0
  126. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/io_streams.py +0 -0
  127. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/io_streams.pyi +0 -0
  128. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/mount.py +0 -0
  129. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/mount.pyi +0 -0
  130. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/network_file_system.py +0 -0
  131. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/network_file_system.pyi +0 -0
  132. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/object.py +0 -0
  133. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/object.pyi +0 -0
  134. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/output.py +0 -0
  135. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/parallel_map.py +0 -0
  136. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/parallel_map.pyi +0 -0
  137. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/partial_function.py +0 -0
  138. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/partial_function.pyi +0 -0
  139. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/proxy.py +0 -0
  140. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/proxy.pyi +0 -0
  141. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/py.typed +0 -0
  142. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/queue.py +0 -0
  143. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/queue.pyi +0 -0
  144. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/retries.py +0 -0
  145. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/runner.py +0 -0
  146. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/runner.pyi +0 -0
  147. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/running_app.py +0 -0
  148. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/schedule.py +0 -0
  149. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/scheduler_placement.py +0 -0
  150. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/secret.py +0 -0
  151. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/secret.pyi +0 -0
  152. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/serving.py +0 -0
  153. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/serving.pyi +0 -0
  154. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/snapshot.py +0 -0
  155. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/snapshot.pyi +0 -0
  156. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/stream_type.py +0 -0
  157. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/token_flow.py +0 -0
  158. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/token_flow.pyi +0 -0
  159. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/volume.py +0 -0
  160. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal/volume.pyi +0 -0
  161. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal.egg-info/SOURCES.txt +0 -0
  162. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal.egg-info/dependency_links.txt +0 -0
  163. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal.egg-info/entry_points.txt +0 -0
  164. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal.egg-info/requires.txt +0 -0
  165. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal.egg-info/top_level.txt +0 -0
  166. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_docs/__init__.py +0 -0
  167. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_docs/gen_cli_docs.py +0 -0
  168. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_docs/gen_reference_docs.py +0 -0
  169. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_docs/mdmd/__init__.py +0 -0
  170. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_docs/mdmd/mdmd.py +0 -0
  171. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_docs/mdmd/signatures.py +0 -0
  172. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/__init__.py +0 -0
  173. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/api.proto +0 -0
  174. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/api_grpc.py +0 -0
  175. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/api_pb2.py +0 -0
  176. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/api_pb2.pyi +0 -0
  177. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/api_pb2_grpc.py +0 -0
  178. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/api_pb2_grpc.pyi +0 -0
  179. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/modal_api_grpc.py +0 -0
  180. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/modal_options_grpc.py +0 -0
  181. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/options.proto +0 -0
  182. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/options_grpc.py +0 -0
  183. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/options_pb2.py +0 -0
  184. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/options_pb2.pyi +0 -0
  185. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/options_pb2_grpc.py +0 -0
  186. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/options_pb2_grpc.pyi +0 -0
  187. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_proto/py.typed +0 -0
  188. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/modal_version/__main__.py +0 -0
  189. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/pyproject.toml +0 -0
  190. {modal-1.1.4.dev29 → modal-1.1.4.dev30}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.4.dev29
3
+ Version: 1.1.4.dev30
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -33,7 +33,7 @@ class _Client:
33
33
  server_url: str,
34
34
  client_type: int,
35
35
  credentials: typing.Optional[tuple[str, str]],
36
- version: str = "1.1.4.dev29",
36
+ version: str = "1.1.4.dev30",
37
37
  ):
38
38
  """mdmd:hidden
39
39
  The Modal client object is not intended to be instantiated directly by users.
@@ -164,7 +164,7 @@ class Client:
164
164
  server_url: str,
165
165
  client_type: int,
166
166
  credentials: typing.Optional[tuple[str, str]],
167
- version: str = "1.1.4.dev29",
167
+ version: str = "1.1.4.dev30",
168
168
  ):
169
169
  """mdmd:hidden
170
170
  The Modal client object is not intended to be instantiated directly by users.
@@ -445,7 +445,7 @@ class Function(
445
445
 
446
446
  _call_generator: ___call_generator_spec[typing_extensions.Self]
447
447
 
448
- class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
448
+ class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
449
449
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
450
450
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
451
451
  ...
@@ -454,7 +454,7 @@ class Function(
454
454
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
455
455
  ...
456
456
 
457
- remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
457
+ remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
458
458
 
459
459
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
460
460
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -481,7 +481,7 @@ class Function(
481
481
  """
482
482
  ...
483
483
 
484
- class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
484
+ class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
485
485
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
486
486
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
487
487
 
@@ -505,7 +505,7 @@ class Function(
505
505
  ...
506
506
 
507
507
  _experimental_spawn: ___experimental_spawn_spec[
508
- modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
508
+ modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
509
509
  ]
510
510
 
511
511
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
@@ -514,7 +514,7 @@ class Function(
514
514
 
515
515
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
516
516
 
517
- class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
517
+ class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
518
518
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
519
519
  """Calls the function with the given arguments, without waiting for the results.
520
520
 
@@ -535,7 +535,7 @@ class Function(
535
535
  """
536
536
  ...
537
537
 
538
- spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
538
+ spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
539
539
 
540
540
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
541
541
  """Return the inner Python object wrapped by this Modal Function."""
@@ -24,6 +24,7 @@ from ._utils.async_utils import TaskContext, synchronize_api
24
24
  from ._utils.deprecation import deprecation_warning
25
25
  from ._utils.grpc_utils import retry_transient_errors
26
26
  from ._utils.mount_utils import validate_network_file_systems, validate_volumes
27
+ from ._utils.name_utils import is_valid_object_name
27
28
  from .client import _Client
28
29
  from .config import config
29
30
  from .container_process import _ContainerProcess
@@ -73,6 +74,16 @@ def _validate_exec_args(args: Sequence[str]) -> None:
73
74
  )
74
75
 
75
76
 
77
+ def _warn_if_invalid_name(name: str) -> None:
78
+ if not is_valid_object_name(name):
79
+ deprecation_warning(
80
+ (2025, 9, 3),
81
+ f"Sandbox name '{name}' will be considered invalid in a future release."
82
+ "\n\nNames may contain only alphanumeric characters, dashes, periods, and underscores,"
83
+ " must be shorter than 64 characters, and cannot conflict with App ID strings.",
84
+ )
85
+
86
+
76
87
  class DefaultSandboxNameOverride(str):
77
88
  """A singleton class that represents the default sandbox name override.
78
89
 
@@ -404,6 +415,8 @@ class _Sandbox(_Object, type_prefix="sb"):
404
415
  from .app import _App
405
416
 
406
417
  _validate_exec_args(args)
418
+ if name is not None:
419
+ _warn_if_invalid_name(name)
407
420
 
408
421
  if block_network and (encrypted_ports or h2_ports or unencrypted_ports):
409
422
  raise InvalidError("Cannot specify open ports when `block_network` is enabled")
@@ -787,6 +800,9 @@ class _Sandbox(_Object, type_prefix="sb"):
787
800
  ):
788
801
  client = client or await _Client.from_env()
789
802
 
803
+ if name is not None and name != _DEFAULT_SANDBOX_NAME_OVERRIDE:
804
+ _warn_if_invalid_name(name)
805
+
790
806
  if name is _DEFAULT_SANDBOX_NAME_OVERRIDE:
791
807
  restore_req = api_pb2.SandboxRestoreRequest(
792
808
  snapshot_id=snapshot.object_id,
@@ -26,6 +26,7 @@ import typing
26
26
  import typing_extensions
27
27
 
28
28
  def _validate_exec_args(args: collections.abc.Sequence[str]) -> None: ...
29
+ def _warn_if_invalid_name(name: str) -> None: ...
29
30
 
30
31
  class DefaultSandboxNameOverride(str):
31
32
  """A singleton class that represents the default sandbox name override.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.4.dev29
3
+ Version: 1.1.4.dev30
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
  """Supplies the current version of the modal client library."""
3
3
 
4
- __version__ = "1.1.4.dev29"
4
+ __version__ = "1.1.4.dev30"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes