modal 1.1.5.dev33__tar.gz → 1.1.5.dev34__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.

Potentially problematic release.


This version of modal might be problematic. Click here for more details.

Files changed (190) hide show
  1. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/PKG-INFO +1 -1
  2. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_functions.py +7 -1
  3. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/client.pyi +2 -2
  4. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cloud_bucket_mount.py +2 -2
  5. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cloud_bucket_mount.pyi +1 -1
  6. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cls.py +11 -3
  7. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cls.pyi +13 -4
  8. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/functions.pyi +6 -6
  9. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal.egg-info/PKG-INFO +1 -1
  10. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_version/__init__.py +1 -1
  11. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/LICENSE +0 -0
  12. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/README.md +0 -0
  13. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/__init__.py +0 -0
  14. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/__main__.py +0 -0
  15. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_clustered_functions.py +0 -0
  16. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_clustered_functions.pyi +0 -0
  17. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_container_entrypoint.py +0 -0
  18. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_ipython.py +0 -0
  19. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_location.py +0 -0
  20. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_object.py +0 -0
  21. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_output.py +0 -0
  22. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_partial_function.py +0 -0
  23. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_pty.py +0 -0
  24. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_resolver.py +0 -0
  25. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_resources.py +0 -0
  26. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_runtime/__init__.py +0 -0
  27. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_runtime/asgi.py +0 -0
  28. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_runtime/container_io_manager.py +0 -0
  29. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_runtime/container_io_manager.pyi +0 -0
  30. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_runtime/execution_context.py +0 -0
  31. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_runtime/execution_context.pyi +0 -0
  32. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  33. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_runtime/telemetry.py +0 -0
  34. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_runtime/user_code_imports.py +0 -0
  35. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_serialization.py +0 -0
  36. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_traceback.py +0 -0
  37. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_tunnel.py +0 -0
  38. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_tunnel.pyi +0 -0
  39. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_type_manager.py +0 -0
  40. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/__init__.py +0 -0
  41. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/app_utils.py +0 -0
  42. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/async_utils.py +0 -0
  43. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/auth_token_manager.py +0 -0
  44. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/blob_utils.py +0 -0
  45. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/bytes_io_segment_payload.py +0 -0
  46. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/deprecation.py +0 -0
  47. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/docker_utils.py +0 -0
  48. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/function_utils.py +0 -0
  49. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/git_utils.py +0 -0
  50. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/grpc_testing.py +0 -0
  51. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/grpc_utils.py +0 -0
  52. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/hash_utils.py +0 -0
  53. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/http_utils.py +0 -0
  54. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/jwt_utils.py +0 -0
  55. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/logger.py +0 -0
  56. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/mount_utils.py +0 -0
  57. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/name_utils.py +0 -0
  58. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/package_utils.py +0 -0
  59. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/pattern_utils.py +0 -0
  60. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/rand_pb_testing.py +0 -0
  61. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/shell_utils.py +0 -0
  62. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_utils/time_utils.py +0 -0
  63. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_vendor/__init__.py +0 -0
  64. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  65. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_vendor/cloudpickle.py +0 -0
  66. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_vendor/tblib.py +0 -0
  67. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/_watcher.py +0 -0
  68. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/app.py +0 -0
  69. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/app.pyi +0 -0
  70. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/builder/2023.12.312.txt +0 -0
  71. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/builder/2023.12.txt +0 -0
  72. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/builder/2024.04.txt +0 -0
  73. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/builder/2024.10.txt +0 -0
  74. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/builder/2025.06.txt +0 -0
  75. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/builder/PREVIEW.txt +0 -0
  76. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/builder/README.md +0 -0
  77. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/builder/base-images.json +0 -0
  78. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/call_graph.py +0 -0
  79. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/__init__.py +0 -0
  80. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/_download.py +0 -0
  81. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/_traceback.py +0 -0
  82. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/app.py +0 -0
  83. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/cluster.py +0 -0
  84. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/config.py +0 -0
  85. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/container.py +0 -0
  86. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/dict.py +0 -0
  87. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/entry_point.py +0 -0
  88. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/environment.py +0 -0
  89. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/import_refs.py +0 -0
  90. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/launch.py +0 -0
  91. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/network_file_system.py +0 -0
  92. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/profile.py +0 -0
  93. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/programs/__init__.py +0 -0
  94. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/programs/launch_instance_ssh.py +0 -0
  95. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/programs/run_jupyter.py +0 -0
  96. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/programs/run_marimo.py +0 -0
  97. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/programs/vscode.py +0 -0
  98. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/queues.py +0 -0
  99. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/run.py +0 -0
  100. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/secret.py +0 -0
  101. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/token.py +0 -0
  102. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/utils.py +0 -0
  103. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/cli/volume.py +0 -0
  104. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/client.py +0 -0
  105. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/config.py +0 -0
  106. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/container_process.py +0 -0
  107. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/container_process.pyi +0 -0
  108. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/dict.py +0 -0
  109. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/dict.pyi +0 -0
  110. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/environments.py +0 -0
  111. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/environments.pyi +0 -0
  112. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/exception.py +0 -0
  113. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/experimental/__init__.py +0 -0
  114. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/experimental/flash.py +0 -0
  115. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/experimental/flash.pyi +0 -0
  116. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/experimental/ipython.py +0 -0
  117. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/file_io.py +0 -0
  118. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/file_io.pyi +0 -0
  119. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/file_pattern_matcher.py +0 -0
  120. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/functions.py +0 -0
  121. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/gpu.py +0 -0
  122. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/image.py +0 -0
  123. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/image.pyi +0 -0
  124. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/io_streams.py +0 -0
  125. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/io_streams.pyi +0 -0
  126. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/mount.py +0 -0
  127. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/mount.pyi +0 -0
  128. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/network_file_system.py +0 -0
  129. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/network_file_system.pyi +0 -0
  130. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/object.py +0 -0
  131. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/object.pyi +0 -0
  132. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/output.py +0 -0
  133. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/parallel_map.py +0 -0
  134. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/parallel_map.pyi +0 -0
  135. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/partial_function.py +0 -0
  136. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/partial_function.pyi +0 -0
  137. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/proxy.py +0 -0
  138. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/proxy.pyi +0 -0
  139. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/py.typed +0 -0
  140. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/queue.py +0 -0
  141. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/queue.pyi +0 -0
  142. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/retries.py +0 -0
  143. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/runner.py +0 -0
  144. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/runner.pyi +0 -0
  145. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/running_app.py +0 -0
  146. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/sandbox.py +0 -0
  147. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/sandbox.pyi +0 -0
  148. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/schedule.py +0 -0
  149. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/scheduler_placement.py +0 -0
  150. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/secret.py +0 -0
  151. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/secret.pyi +0 -0
  152. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/serving.py +0 -0
  153. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/serving.pyi +0 -0
  154. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/snapshot.py +0 -0
  155. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/snapshot.pyi +0 -0
  156. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/stream_type.py +0 -0
  157. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/token_flow.py +0 -0
  158. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/token_flow.pyi +0 -0
  159. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/volume.py +0 -0
  160. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal/volume.pyi +0 -0
  161. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal.egg-info/SOURCES.txt +0 -0
  162. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal.egg-info/dependency_links.txt +0 -0
  163. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal.egg-info/entry_points.txt +0 -0
  164. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal.egg-info/requires.txt +0 -0
  165. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal.egg-info/top_level.txt +0 -0
  166. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_docs/__init__.py +0 -0
  167. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_docs/gen_cli_docs.py +0 -0
  168. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_docs/gen_reference_docs.py +0 -0
  169. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_docs/mdmd/__init__.py +0 -0
  170. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_docs/mdmd/mdmd.py +0 -0
  171. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_docs/mdmd/signatures.py +0 -0
  172. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/__init__.py +0 -0
  173. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/api.proto +0 -0
  174. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/api_grpc.py +0 -0
  175. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/api_pb2.py +0 -0
  176. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/api_pb2.pyi +0 -0
  177. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/api_pb2_grpc.py +0 -0
  178. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/api_pb2_grpc.pyi +0 -0
  179. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/modal_api_grpc.py +0 -0
  180. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/modal_options_grpc.py +0 -0
  181. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/options.proto +0 -0
  182. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/options_grpc.py +0 -0
  183. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/options_pb2.py +0 -0
  184. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/options_pb2.pyi +0 -0
  185. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/options_pb2_grpc.py +0 -0
  186. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/options_pb2_grpc.pyi +0 -0
  187. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_proto/py.typed +0 -0
  188. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/modal_version/__main__.py +0 -0
  189. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/pyproject.toml +0 -0
  190. {modal-1.1.5.dev33 → modal-1.1.5.dev34}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.5.dev33
3
+ Version: 1.1.5.dev34
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -1224,6 +1224,8 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1224
1224
  replace_secret_ids=bool(options.secrets),
1225
1225
  replace_volume_mounts=len(volume_mounts) > 0,
1226
1226
  volume_mounts=volume_mounts,
1227
+ cloud_bucket_mounts=cloud_bucket_mounts_to_proto(options.cloud_bucket_mounts),
1228
+ replace_cloud_bucket_mounts=bool(options.cloud_bucket_mounts),
1227
1229
  resources=options.resources,
1228
1230
  retry_policy=options.retry_policy,
1229
1231
  concurrency_limit=options.max_containers,
@@ -1253,7 +1255,11 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1253
1255
 
1254
1256
  def _deps():
1255
1257
  if options:
1256
- all_deps = [v for _, v in options.validated_volumes] + list(options.secrets)
1258
+ all_deps = (
1259
+ [v for _, v in options.validated_volumes]
1260
+ + list(options.secrets)
1261
+ + [mount.secret for _, mount in options.cloud_bucket_mounts if mount.secret]
1262
+ )
1257
1263
  return [dep for dep in all_deps if not dep.is_hydrated]
1258
1264
  return []
1259
1265
 
@@ -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.dev33",
36
+ version: str = "1.1.5.dev34",
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.dev33",
167
+ version: str = "1.1.5.dev34",
168
168
  ):
169
169
  """mdmd:hidden
170
170
  The Modal client object is not intended to be instantiated directly by users.
@@ -1,6 +1,6 @@
1
1
  # Copyright Modal Labs 2022
2
2
  from dataclasses import dataclass
3
- from typing import Optional
3
+ from typing import Optional, Sequence
4
4
  from urllib.parse import urlparse
5
5
 
6
6
  from modal_proto import api_pb2
@@ -119,7 +119,7 @@ class _CloudBucketMount:
119
119
  requester_pays: bool = False
120
120
 
121
121
 
122
- def cloud_bucket_mounts_to_proto(mounts: list[tuple[str, _CloudBucketMount]]) -> list[api_pb2.CloudBucketMount]:
122
+ def cloud_bucket_mounts_to_proto(mounts: Sequence[tuple[str, _CloudBucketMount]]) -> list[api_pb2.CloudBucketMount]:
123
123
  """Helper function to convert `CloudBucketMount` to a list of protobufs that can be passed to the server."""
124
124
  cloud_bucket_mounts: list[api_pb2.CloudBucketMount] = []
125
125
 
@@ -122,7 +122,7 @@ class _CloudBucketMount:
122
122
  ...
123
123
 
124
124
  def cloud_bucket_mounts_to_proto(
125
- mounts: list[tuple[str, _CloudBucketMount]],
125
+ mounts: typing.Sequence[tuple[str, _CloudBucketMount]],
126
126
  ) -> list[modal_proto.api_pb2.CloudBucketMount]:
127
127
  """Helper function to convert `CloudBucketMount` to a list of protobufs that can be passed to the server."""
128
128
  ...
@@ -1,9 +1,9 @@
1
1
  # Copyright Modal Labs 2022
2
2
  import dataclasses
3
3
  import inspect
4
- import os
5
4
  import typing
6
5
  from collections.abc import Collection
6
+ from pathlib import PurePosixPath
7
7
  from typing import Any, Callable, Optional, Sequence, TypeVar, Union
8
8
 
9
9
  from google.protobuf.message import Message
@@ -33,6 +33,7 @@ from ._utils.deprecation import (
33
33
  from ._utils.grpc_utils import retry_transient_errors
34
34
  from ._utils.mount_utils import validate_volumes
35
35
  from .client import _Client
36
+ from .cloud_bucket_mount import _CloudBucketMount
36
37
  from .config import config
37
38
  from .exception import ExecutionError, InvalidError, NotFoundError
38
39
  from .gpu import GPU_T
@@ -95,6 +96,7 @@ class _ServiceOptions:
95
96
  batch_wait_ms: Optional[int] = None
96
97
  scheduler_placement: Optional[api_pb2.SchedulerPlacement] = None
97
98
  cloud: Optional[str] = None
99
+ cloud_bucket_mounts: typing.Sequence[tuple[str, _CloudBucketMount]] = ()
98
100
 
99
101
  def merge_options(self, new_options: "_ServiceOptions") -> "_ServiceOptions":
100
102
  """Implement protobuf-like MergeFrom semantics for this dataclass.
@@ -688,7 +690,7 @@ More information on class parameterization can be found here: https://modal.com/
688
690
  gpu: GPU_T = None,
689
691
  env: Optional[dict[str, Optional[str]]] = None,
690
692
  secrets: Optional[Collection[_Secret]] = None,
691
- volumes: dict[Union[str, os.PathLike], _Volume] = {},
693
+ volumes: dict[Union[str, PurePosixPath], Union[_Volume, _CloudBucketMount]] = {},
692
694
  retries: Optional[Union[int, Retries]] = None,
693
695
  max_containers: Optional[int] = None, # Limit on the number of containers that can be concurrently running.
694
696
  buffer_containers: Optional[int] = None, # Additional containers to scale up while Function is active.
@@ -762,13 +764,19 @@ More information on class parameterization can be found here: https://modal.com/
762
764
  cls = _Cls._from_loader(_load_from_base, rep=f"{self._name}.with_options(...)", is_another_app=True, deps=_deps)
763
765
  cls._initialize_from_other(self)
764
766
 
767
+ # Validate volumes
768
+ validated_volumes = validate_volumes(volumes)
769
+ cloud_bucket_mounts = [(k, v) for k, v in validated_volumes if isinstance(v, _CloudBucketMount)]
770
+ validated_volumes_no_cloud_buckets = [(k, v) for k, v in validated_volumes if isinstance(v, _Volume)]
771
+
765
772
  secrets = secrets or []
766
773
  if env:
767
774
  secrets = [*secrets, _Secret.from_dict(env)]
768
775
 
769
776
  new_options = _ServiceOptions(
770
777
  secrets=secrets,
771
- validated_volumes=validate_volumes(volumes),
778
+ validated_volumes=validated_volumes_no_cloud_buckets,
779
+ cloud_bucket_mounts=cloud_bucket_mounts,
772
780
  resources=resources,
773
781
  retry_policy=retry_policy,
774
782
  max_containers=max_containers,
@@ -6,6 +6,7 @@ import modal._object
6
6
  import modal._partial_function
7
7
  import modal.app
8
8
  import modal.client
9
+ import modal.cloud_bucket_mount
9
10
  import modal.functions
10
11
  import modal.gpu
11
12
  import modal.object
@@ -14,7 +15,7 @@ import modal.retries
14
15
  import modal.secret
15
16
  import modal.volume
16
17
  import modal_proto.api_pb2
17
- import os
18
+ import pathlib
18
19
  import typing
19
20
  import typing_extensions
20
21
 
@@ -24,7 +25,7 @@ def _use_annotation_parameters(user_cls: type) -> bool: ...
24
25
  def _get_class_constructor_signature(user_cls: type) -> inspect.Signature: ...
25
26
 
26
27
  class _ServiceOptions:
27
- """_ServiceOptions(secrets: collections.abc.Collection[modal.secret._Secret] = (), validated_volumes: Sequence[tuple[str, modal.volume._Volume]] = (), resources: Optional[modal_proto.api_pb2.Resources] = None, retry_policy: Optional[modal_proto.api_pb2.FunctionRetryPolicy] = None, max_containers: Optional[int] = None, buffer_containers: Optional[int] = None, scaledown_window: Optional[int] = None, timeout_secs: Optional[int] = None, max_concurrent_inputs: Optional[int] = None, target_concurrent_inputs: Optional[int] = None, batch_max_size: Optional[int] = None, batch_wait_ms: Optional[int] = None, scheduler_placement: Optional[modal_proto.api_pb2.SchedulerPlacement] = None, cloud: Optional[str] = None)"""
28
+ """_ServiceOptions(secrets: collections.abc.Collection[modal.secret._Secret] = (), validated_volumes: Sequence[tuple[str, modal.volume._Volume]] = (), resources: Optional[modal_proto.api_pb2.Resources] = None, retry_policy: Optional[modal_proto.api_pb2.FunctionRetryPolicy] = None, max_containers: Optional[int] = None, buffer_containers: Optional[int] = None, scaledown_window: Optional[int] = None, timeout_secs: Optional[int] = None, max_concurrent_inputs: Optional[int] = None, target_concurrent_inputs: Optional[int] = None, batch_max_size: Optional[int] = None, batch_wait_ms: Optional[int] = None, scheduler_placement: Optional[modal_proto.api_pb2.SchedulerPlacement] = None, cloud: Optional[str] = None, cloud_bucket_mounts: Sequence[tuple[str, modal.cloud_bucket_mount._CloudBucketMount]] = ())"""
28
29
 
29
30
  secrets: collections.abc.Collection[modal.secret._Secret]
30
31
  validated_volumes: typing.Sequence[tuple[str, modal.volume._Volume]]
@@ -40,6 +41,7 @@ class _ServiceOptions:
40
41
  batch_wait_ms: typing.Optional[int]
41
42
  scheduler_placement: typing.Optional[modal_proto.api_pb2.SchedulerPlacement]
42
43
  cloud: typing.Optional[str]
44
+ cloud_bucket_mounts: typing.Sequence[tuple[str, modal.cloud_bucket_mount._CloudBucketMount]]
43
45
 
44
46
  def merge_options(self, new_options: _ServiceOptions) -> _ServiceOptions:
45
47
  """Implement protobuf-like MergeFrom semantics for this dataclass.
@@ -64,6 +66,7 @@ class _ServiceOptions:
64
66
  batch_wait_ms: typing.Optional[int] = None,
65
67
  scheduler_placement: typing.Optional[modal_proto.api_pb2.SchedulerPlacement] = None,
66
68
  cloud: typing.Optional[str] = None,
69
+ cloud_bucket_mounts: typing.Sequence[tuple[str, modal.cloud_bucket_mount._CloudBucketMount]] = (),
67
70
  ) -> None:
68
71
  """Initialize self. See help(type(self)) for accurate signature."""
69
72
  ...
@@ -398,7 +401,10 @@ class _Cls(modal._object._Object):
398
401
  gpu: typing.Union[None, str, modal.gpu._GPUConfig] = None,
399
402
  env: typing.Optional[dict[str, typing.Optional[str]]] = None,
400
403
  secrets: typing.Optional[collections.abc.Collection[modal.secret._Secret]] = None,
401
- volumes: dict[typing.Union[str, os.PathLike], modal.volume._Volume] = {},
404
+ volumes: dict[
405
+ typing.Union[str, pathlib.PurePosixPath],
406
+ typing.Union[modal.volume._Volume, modal.cloud_bucket_mount._CloudBucketMount],
407
+ ] = {},
402
408
  retries: typing.Union[int, modal.retries.Retries, None] = None,
403
409
  max_containers: typing.Optional[int] = None,
404
410
  buffer_containers: typing.Optional[int] = None,
@@ -577,7 +583,10 @@ class Cls(modal.object.Object):
577
583
  gpu: typing.Union[None, str, modal.gpu._GPUConfig] = None,
578
584
  env: typing.Optional[dict[str, typing.Optional[str]]] = None,
579
585
  secrets: typing.Optional[collections.abc.Collection[modal.secret.Secret]] = None,
580
- volumes: dict[typing.Union[str, os.PathLike], modal.volume.Volume] = {},
586
+ volumes: dict[
587
+ typing.Union[str, pathlib.PurePosixPath],
588
+ typing.Union[modal.volume.Volume, modal.cloud_bucket_mount.CloudBucketMount],
589
+ ] = {},
581
590
  retries: typing.Union[int, modal.retries.Retries, None] = None,
582
591
  max_containers: typing.Optional[int] = None,
583
592
  buffer_containers: typing.Optional[int] = None,
@@ -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."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.5.dev33
3
+ Version: 1.1.5.dev34
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.5.dev33"
4
+ __version__ = "1.1.5.dev34"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes