modal 1.1.5.dev28__tar.gz → 1.1.5.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.5.dev28 → modal-1.1.5.dev30}/PKG-INFO +1 -1
  2. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/client.pyi +2 -2
  3. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/functions.pyi +6 -6
  4. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/sandbox.py +11 -1
  5. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/sandbox.pyi +18 -3
  6. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal.egg-info/PKG-INFO +1 -1
  7. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/api.proto +9 -0
  8. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/api_grpc.py +16 -0
  9. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/api_pb2.py +279 -259
  10. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/api_pb2.pyi +29 -0
  11. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/api_pb2_grpc.py +33 -0
  12. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/api_pb2_grpc.pyi +10 -0
  13. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/modal_api_grpc.py +1 -0
  14. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_version/__init__.py +1 -1
  15. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/LICENSE +0 -0
  16. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/README.md +0 -0
  17. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/__init__.py +0 -0
  18. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/__main__.py +0 -0
  19. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_clustered_functions.py +0 -0
  20. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_clustered_functions.pyi +0 -0
  21. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_container_entrypoint.py +0 -0
  22. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_functions.py +0 -0
  23. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_ipython.py +0 -0
  24. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_location.py +0 -0
  25. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_object.py +0 -0
  26. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_output.py +0 -0
  27. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_partial_function.py +0 -0
  28. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_pty.py +0 -0
  29. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_resolver.py +0 -0
  30. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_resources.py +0 -0
  31. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_runtime/__init__.py +0 -0
  32. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_runtime/asgi.py +0 -0
  33. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_runtime/container_io_manager.py +0 -0
  34. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_runtime/container_io_manager.pyi +0 -0
  35. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_runtime/execution_context.py +0 -0
  36. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_runtime/execution_context.pyi +0 -0
  37. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  38. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_runtime/telemetry.py +0 -0
  39. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_runtime/user_code_imports.py +0 -0
  40. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_serialization.py +0 -0
  41. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_traceback.py +0 -0
  42. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_tunnel.py +0 -0
  43. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_tunnel.pyi +0 -0
  44. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_type_manager.py +0 -0
  45. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/__init__.py +0 -0
  46. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/app_utils.py +0 -0
  47. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/async_utils.py +0 -0
  48. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/auth_token_manager.py +0 -0
  49. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/blob_utils.py +0 -0
  50. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/bytes_io_segment_payload.py +0 -0
  51. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/deprecation.py +0 -0
  52. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/docker_utils.py +0 -0
  53. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/function_utils.py +0 -0
  54. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/git_utils.py +0 -0
  55. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/grpc_testing.py +0 -0
  56. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/grpc_utils.py +0 -0
  57. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/hash_utils.py +0 -0
  58. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/http_utils.py +0 -0
  59. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/jwt_utils.py +0 -0
  60. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/logger.py +0 -0
  61. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/mount_utils.py +0 -0
  62. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/name_utils.py +0 -0
  63. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/package_utils.py +0 -0
  64. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/pattern_utils.py +0 -0
  65. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/rand_pb_testing.py +0 -0
  66. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/shell_utils.py +0 -0
  67. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_utils/time_utils.py +0 -0
  68. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_vendor/__init__.py +0 -0
  69. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  70. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_vendor/cloudpickle.py +0 -0
  71. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_vendor/tblib.py +0 -0
  72. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/_watcher.py +0 -0
  73. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/app.py +0 -0
  74. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/app.pyi +0 -0
  75. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/builder/2023.12.312.txt +0 -0
  76. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/builder/2023.12.txt +0 -0
  77. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/builder/2024.04.txt +0 -0
  78. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/builder/2024.10.txt +0 -0
  79. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/builder/2025.06.txt +0 -0
  80. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/builder/PREVIEW.txt +0 -0
  81. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/builder/README.md +0 -0
  82. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/builder/base-images.json +0 -0
  83. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/call_graph.py +0 -0
  84. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/__init__.py +0 -0
  85. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/_download.py +0 -0
  86. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/_traceback.py +0 -0
  87. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/app.py +0 -0
  88. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/cluster.py +0 -0
  89. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/config.py +0 -0
  90. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/container.py +0 -0
  91. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/dict.py +0 -0
  92. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/entry_point.py +0 -0
  93. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/environment.py +0 -0
  94. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/import_refs.py +0 -0
  95. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/launch.py +0 -0
  96. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/network_file_system.py +0 -0
  97. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/profile.py +0 -0
  98. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/programs/__init__.py +0 -0
  99. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/programs/launch_instance_ssh.py +0 -0
  100. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/programs/run_jupyter.py +0 -0
  101. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/programs/run_marimo.py +0 -0
  102. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/programs/vscode.py +0 -0
  103. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/queues.py +0 -0
  104. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/run.py +0 -0
  105. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/secret.py +0 -0
  106. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/token.py +0 -0
  107. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/utils.py +0 -0
  108. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cli/volume.py +0 -0
  109. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/client.py +0 -0
  110. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cloud_bucket_mount.py +0 -0
  111. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cloud_bucket_mount.pyi +0 -0
  112. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cls.py +0 -0
  113. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/cls.pyi +0 -0
  114. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/config.py +0 -0
  115. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/container_process.py +0 -0
  116. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/container_process.pyi +0 -0
  117. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/dict.py +0 -0
  118. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/dict.pyi +0 -0
  119. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/environments.py +0 -0
  120. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/environments.pyi +0 -0
  121. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/exception.py +0 -0
  122. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/experimental/__init__.py +0 -0
  123. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/experimental/flash.py +0 -0
  124. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/experimental/flash.pyi +0 -0
  125. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/experimental/ipython.py +0 -0
  126. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/file_io.py +0 -0
  127. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/file_io.pyi +0 -0
  128. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/file_pattern_matcher.py +0 -0
  129. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/functions.py +0 -0
  130. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/gpu.py +0 -0
  131. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/image.py +0 -0
  132. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/image.pyi +0 -0
  133. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/io_streams.py +0 -0
  134. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/io_streams.pyi +0 -0
  135. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/mount.py +0 -0
  136. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/mount.pyi +0 -0
  137. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/network_file_system.py +0 -0
  138. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/network_file_system.pyi +0 -0
  139. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/object.py +0 -0
  140. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/object.pyi +0 -0
  141. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/output.py +0 -0
  142. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/parallel_map.py +0 -0
  143. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/parallel_map.pyi +0 -0
  144. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/partial_function.py +0 -0
  145. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/partial_function.pyi +0 -0
  146. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/proxy.py +0 -0
  147. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/proxy.pyi +0 -0
  148. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/py.typed +0 -0
  149. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/queue.py +0 -0
  150. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/queue.pyi +0 -0
  151. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/retries.py +0 -0
  152. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/runner.py +0 -0
  153. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/runner.pyi +0 -0
  154. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/running_app.py +0 -0
  155. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/schedule.py +0 -0
  156. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/scheduler_placement.py +0 -0
  157. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/secret.py +0 -0
  158. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/secret.pyi +0 -0
  159. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/serving.py +0 -0
  160. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/serving.pyi +0 -0
  161. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/snapshot.py +0 -0
  162. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/snapshot.pyi +0 -0
  163. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/stream_type.py +0 -0
  164. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/token_flow.py +0 -0
  165. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/token_flow.pyi +0 -0
  166. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/volume.py +0 -0
  167. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal/volume.pyi +0 -0
  168. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal.egg-info/SOURCES.txt +0 -0
  169. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal.egg-info/dependency_links.txt +0 -0
  170. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal.egg-info/entry_points.txt +0 -0
  171. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal.egg-info/requires.txt +0 -0
  172. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal.egg-info/top_level.txt +0 -0
  173. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_docs/__init__.py +0 -0
  174. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_docs/gen_cli_docs.py +0 -0
  175. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_docs/gen_reference_docs.py +0 -0
  176. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_docs/mdmd/__init__.py +0 -0
  177. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_docs/mdmd/mdmd.py +0 -0
  178. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_docs/mdmd/signatures.py +0 -0
  179. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/__init__.py +0 -0
  180. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/modal_options_grpc.py +0 -0
  181. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/options.proto +0 -0
  182. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/options_grpc.py +0 -0
  183. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/options_pb2.py +0 -0
  184. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/options_pb2.pyi +0 -0
  185. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/options_pb2_grpc.py +0 -0
  186. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/options_pb2_grpc.pyi +0 -0
  187. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_proto/py.typed +0 -0
  188. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/modal_version/__main__.py +0 -0
  189. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/pyproject.toml +0 -0
  190. {modal-1.1.5.dev28 → modal-1.1.5.dev30}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.5.dev28
3
+ Version: 1.1.5.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.5.dev28",
36
+ version: str = "1.1.5.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.5.dev28",
167
+ version: str = "1.1.5.dev30",
168
168
  ):
169
169
  """mdmd:hidden
170
170
  The Modal client object is not intended to be instantiated directly by users.
@@ -449,7 +449,7 @@ class Function(
449
449
 
450
450
  _call_generator: ___call_generator_spec[typing_extensions.Self]
451
451
 
452
- class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
452
+ class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
453
453
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
454
454
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
455
455
  ...
@@ -458,7 +458,7 @@ class Function(
458
458
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
459
459
  ...
460
460
 
461
- remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
461
+ remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
462
462
 
463
463
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
464
464
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -485,7 +485,7 @@ class Function(
485
485
  """
486
486
  ...
487
487
 
488
- class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
488
+ class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
489
489
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
490
490
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
491
491
 
@@ -509,7 +509,7 @@ class Function(
509
509
  ...
510
510
 
511
511
  _experimental_spawn: ___experimental_spawn_spec[
512
- modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
512
+ modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
513
513
  ]
514
514
 
515
515
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
@@ -518,7 +518,7 @@ class Function(
518
518
 
519
519
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
520
520
 
521
- class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
521
+ class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
522
522
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
523
523
  """Calls the function with the given arguments, without waiting for the results.
524
524
 
@@ -539,7 +539,7 @@ class Function(
539
539
  """
540
540
  ...
541
541
 
542
- spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
542
+ spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
543
543
 
544
544
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
545
545
  """Return the inner Python object wrapped by this Modal Function."""
@@ -562,7 +562,17 @@ class _Sandbox(_Object, type_prefix="sb"):
562
562
 
563
563
  return obj
564
564
 
565
- async def set_tags(self, tags: dict[str, str], *, client: Optional[_Client] = None):
565
+ async def get_tags(self) -> dict[str, str]:
566
+ """Fetches any tags (key-value pairs) currently attached to this Sandbox from the server."""
567
+ req = api_pb2.SandboxTagsGetRequest(sandbox_id=self.object_id)
568
+ try:
569
+ resp = await retry_transient_errors(self._client.stub.SandboxTagsGet, req)
570
+ except GRPCError as exc:
571
+ raise InvalidError(exc.message) if exc.status == Status.INVALID_ARGUMENT else exc
572
+
573
+ return {tag.tag_name: tag.tag_value for tag in resp.tags}
574
+
575
+ async def set_tags(self, tags: dict[str, str], *, client: Optional[_Client] = None) -> None:
566
576
  """Set tags (key-value pairs) on the Sandbox. Tags can be used to filter results in `Sandbox.list`."""
567
577
  environment_name = _get_environment_name()
568
578
  if client is None:
@@ -241,7 +241,11 @@ class _Sandbox(modal._object._Object):
241
241
  """
242
242
  ...
243
243
 
244
- async def set_tags(self, tags: dict[str, str], *, client: typing.Optional[modal.client._Client] = None):
244
+ async def get_tags(self) -> dict[str, str]:
245
+ """Fetches any tags (key-value pairs) currently attached to this Sandbox from the server."""
246
+ ...
247
+
248
+ async def set_tags(self, tags: dict[str, str], *, client: typing.Optional[modal.client._Client] = None) -> None:
245
249
  """Set tags (key-value pairs) on the Sandbox. Tags can be used to filter results in `Sandbox.list`."""
246
250
  ...
247
251
 
@@ -744,12 +748,23 @@ class Sandbox(modal.object.Object):
744
748
 
745
749
  from_id: __from_id_spec
746
750
 
751
+ class __get_tags_spec(typing_extensions.Protocol[SUPERSELF]):
752
+ def __call__(self, /) -> dict[str, str]:
753
+ """Fetches any tags (key-value pairs) currently attached to this Sandbox from the server."""
754
+ ...
755
+
756
+ async def aio(self, /) -> dict[str, str]:
757
+ """Fetches any tags (key-value pairs) currently attached to this Sandbox from the server."""
758
+ ...
759
+
760
+ get_tags: __get_tags_spec[typing_extensions.Self]
761
+
747
762
  class __set_tags_spec(typing_extensions.Protocol[SUPERSELF]):
748
- def __call__(self, /, tags: dict[str, str], *, client: typing.Optional[modal.client.Client] = None):
763
+ def __call__(self, /, tags: dict[str, str], *, client: typing.Optional[modal.client.Client] = None) -> None:
749
764
  """Set tags (key-value pairs) on the Sandbox. Tags can be used to filter results in `Sandbox.list`."""
750
765
  ...
751
766
 
752
- async def aio(self, /, tags: dict[str, str], *, client: typing.Optional[modal.client.Client] = None):
767
+ async def aio(self, /, tags: dict[str, str], *, client: typing.Optional[modal.client.Client] = None) -> None:
753
768
  """Set tags (key-value pairs) on the Sandbox. Tags can be used to filter results in `Sandbox.list`."""
754
769
  ...
755
770
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.5.dev28
3
+ Version: 1.1.5.dev30
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -2881,6 +2881,14 @@ message SandboxTag {
2881
2881
  string tag_value = 2;
2882
2882
  }
2883
2883
 
2884
+ message SandboxTagsGetRequest {
2885
+ string sandbox_id = 1;
2886
+ }
2887
+
2888
+ message SandboxTagsGetResponse {
2889
+ repeated SandboxTag tags = 1;
2890
+ }
2891
+
2884
2892
  message SandboxTagsSetRequest {
2885
2893
  string environment_name = 1;
2886
2894
  string sandbox_id = 2;
@@ -3680,6 +3688,7 @@ service ModalClient {
3680
3688
  rpc SandboxSnapshotGet(SandboxSnapshotGetRequest) returns (SandboxSnapshotGetResponse);
3681
3689
  rpc SandboxSnapshotWait(SandboxSnapshotWaitRequest) returns (SandboxSnapshotWaitResponse);
3682
3690
  rpc SandboxStdinWrite(SandboxStdinWriteRequest) returns (SandboxStdinWriteResponse);
3691
+ rpc SandboxTagsGet(SandboxTagsGetRequest) returns (SandboxTagsGetResponse);
3683
3692
  rpc SandboxTagsSet(SandboxTagsSetRequest) returns (google.protobuf.Empty);
3684
3693
  rpc SandboxTerminate(SandboxTerminateRequest) returns (SandboxTerminateResponse);
3685
3694
  rpc SandboxWait(SandboxWaitRequest) returns (SandboxWaitResponse);
@@ -526,6 +526,10 @@ class ModalClientBase(abc.ABC):
526
526
  async def SandboxStdinWrite(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxStdinWriteRequest, modal_proto.api_pb2.SandboxStdinWriteResponse]') -> None:
527
527
  pass
528
528
 
529
+ @abc.abstractmethod
530
+ async def SandboxTagsGet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxTagsGetRequest, modal_proto.api_pb2.SandboxTagsGetResponse]') -> None:
531
+ pass
532
+
529
533
  @abc.abstractmethod
530
534
  async def SandboxTagsSet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxTagsSetRequest, google.protobuf.empty_pb2.Empty]') -> None:
531
535
  pass
@@ -1458,6 +1462,12 @@ class ModalClientBase(abc.ABC):
1458
1462
  modal_proto.api_pb2.SandboxStdinWriteRequest,
1459
1463
  modal_proto.api_pb2.SandboxStdinWriteResponse,
1460
1464
  ),
1465
+ '/modal.client.ModalClient/SandboxTagsGet': grpclib.const.Handler(
1466
+ self.SandboxTagsGet,
1467
+ grpclib.const.Cardinality.UNARY_UNARY,
1468
+ modal_proto.api_pb2.SandboxTagsGetRequest,
1469
+ modal_proto.api_pb2.SandboxTagsGetResponse,
1470
+ ),
1461
1471
  '/modal.client.ModalClient/SandboxTagsSet': grpclib.const.Handler(
1462
1472
  self.SandboxTagsSet,
1463
1473
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -2478,6 +2488,12 @@ class ModalClientStub:
2478
2488
  modal_proto.api_pb2.SandboxStdinWriteRequest,
2479
2489
  modal_proto.api_pb2.SandboxStdinWriteResponse,
2480
2490
  )
2491
+ self.SandboxTagsGet = grpclib.client.UnaryUnaryMethod(
2492
+ channel,
2493
+ '/modal.client.ModalClient/SandboxTagsGet',
2494
+ modal_proto.api_pb2.SandboxTagsGetRequest,
2495
+ modal_proto.api_pb2.SandboxTagsGetResponse,
2496
+ )
2481
2497
  self.SandboxTagsSet = grpclib.client.UnaryUnaryMethod(
2482
2498
  channel,
2483
2499
  '/modal.client.ModalClient/SandboxTagsSet',