modal 1.1.4.dev13__tar.gz → 1.1.4.dev15__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.dev13 → modal-1.1.4.dev15}/PKG-INFO +1 -1
  2. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/client.pyi +2 -2
  3. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/experimental/flash.py +5 -2
  4. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/mount.py +17 -11
  5. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/mount.pyi +4 -0
  6. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal.egg-info/PKG-INFO +1 -1
  7. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_version/__init__.py +1 -1
  8. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/LICENSE +0 -0
  9. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/README.md +0 -0
  10. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/__init__.py +0 -0
  11. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/__main__.py +0 -0
  12. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_clustered_functions.py +0 -0
  13. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_clustered_functions.pyi +0 -0
  14. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_container_entrypoint.py +0 -0
  15. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_functions.py +0 -0
  16. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_ipython.py +0 -0
  17. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_location.py +0 -0
  18. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_object.py +0 -0
  19. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_output.py +0 -0
  20. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_partial_function.py +0 -0
  21. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_pty.py +0 -0
  22. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_resolver.py +0 -0
  23. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_resources.py +0 -0
  24. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_runtime/__init__.py +0 -0
  25. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_runtime/asgi.py +0 -0
  26. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_runtime/container_io_manager.py +0 -0
  27. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_runtime/container_io_manager.pyi +0 -0
  28. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_runtime/execution_context.py +0 -0
  29. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_runtime/execution_context.pyi +0 -0
  30. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  31. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_runtime/telemetry.py +0 -0
  32. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_runtime/user_code_imports.py +0 -0
  33. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_serialization.py +0 -0
  34. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_traceback.py +0 -0
  35. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_tunnel.py +0 -0
  36. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_tunnel.pyi +0 -0
  37. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_type_manager.py +0 -0
  38. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/__init__.py +0 -0
  39. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/app_utils.py +0 -0
  40. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/async_utils.py +0 -0
  41. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/auth_token_manager.py +0 -0
  42. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/blob_utils.py +0 -0
  43. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/bytes_io_segment_payload.py +0 -0
  44. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/deprecation.py +0 -0
  45. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/docker_utils.py +0 -0
  46. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/function_utils.py +0 -0
  47. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/git_utils.py +0 -0
  48. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/grpc_testing.py +0 -0
  49. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/grpc_utils.py +0 -0
  50. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/hash_utils.py +0 -0
  51. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/http_utils.py +0 -0
  52. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/jwt_utils.py +0 -0
  53. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/logger.py +0 -0
  54. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/mount_utils.py +0 -0
  55. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/name_utils.py +0 -0
  56. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/package_utils.py +0 -0
  57. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/pattern_utils.py +0 -0
  58. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/rand_pb_testing.py +0 -0
  59. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/shell_utils.py +0 -0
  60. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_utils/time_utils.py +0 -0
  61. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_vendor/__init__.py +0 -0
  62. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  63. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_vendor/cloudpickle.py +0 -0
  64. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_vendor/tblib.py +0 -0
  65. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/_watcher.py +0 -0
  66. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/app.py +0 -0
  67. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/app.pyi +0 -0
  68. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/builder/2023.12.312.txt +0 -0
  69. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/builder/2023.12.txt +0 -0
  70. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/builder/2024.04.txt +0 -0
  71. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/builder/2024.10.txt +0 -0
  72. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/builder/2025.06.txt +0 -0
  73. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/builder/PREVIEW.txt +0 -0
  74. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/builder/README.md +0 -0
  75. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/builder/base-images.json +0 -0
  76. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/call_graph.py +0 -0
  77. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/__init__.py +0 -0
  78. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/_download.py +0 -0
  79. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/_traceback.py +0 -0
  80. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/app.py +0 -0
  81. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/cluster.py +0 -0
  82. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/config.py +0 -0
  83. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/container.py +0 -0
  84. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/dict.py +0 -0
  85. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/entry_point.py +0 -0
  86. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/environment.py +0 -0
  87. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/import_refs.py +0 -0
  88. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/launch.py +0 -0
  89. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/network_file_system.py +0 -0
  90. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/profile.py +0 -0
  91. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/programs/__init__.py +0 -0
  92. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/programs/launch_instance_ssh.py +0 -0
  93. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/programs/run_jupyter.py +0 -0
  94. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/programs/run_marimo.py +0 -0
  95. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/programs/vscode.py +0 -0
  96. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/queues.py +0 -0
  97. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/run.py +0 -0
  98. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/secret.py +0 -0
  99. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/token.py +0 -0
  100. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/utils.py +0 -0
  101. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cli/volume.py +0 -0
  102. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/client.py +0 -0
  103. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cloud_bucket_mount.py +0 -0
  104. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cloud_bucket_mount.pyi +0 -0
  105. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cls.py +0 -0
  106. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/cls.pyi +0 -0
  107. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/config.py +0 -0
  108. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/container_process.py +0 -0
  109. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/container_process.pyi +0 -0
  110. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/dict.py +0 -0
  111. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/dict.pyi +0 -0
  112. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/environments.py +0 -0
  113. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/environments.pyi +0 -0
  114. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/exception.py +0 -0
  115. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/experimental/__init__.py +0 -0
  116. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/experimental/flash.pyi +0 -0
  117. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/experimental/ipython.py +0 -0
  118. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/file_io.py +0 -0
  119. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/file_io.pyi +0 -0
  120. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/file_pattern_matcher.py +0 -0
  121. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/functions.py +0 -0
  122. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/functions.pyi +0 -0
  123. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/gpu.py +0 -0
  124. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/image.py +0 -0
  125. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/image.pyi +0 -0
  126. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/io_streams.py +0 -0
  127. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/io_streams.pyi +0 -0
  128. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/network_file_system.py +0 -0
  129. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/network_file_system.pyi +0 -0
  130. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/object.py +0 -0
  131. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/object.pyi +0 -0
  132. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/output.py +0 -0
  133. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/parallel_map.py +0 -0
  134. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/parallel_map.pyi +0 -0
  135. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/partial_function.py +0 -0
  136. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/partial_function.pyi +0 -0
  137. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/proxy.py +0 -0
  138. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/proxy.pyi +0 -0
  139. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/py.typed +0 -0
  140. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/queue.py +0 -0
  141. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/queue.pyi +0 -0
  142. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/retries.py +0 -0
  143. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/runner.py +0 -0
  144. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/runner.pyi +0 -0
  145. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/running_app.py +0 -0
  146. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/sandbox.py +0 -0
  147. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/sandbox.pyi +0 -0
  148. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/schedule.py +0 -0
  149. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/scheduler_placement.py +0 -0
  150. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/secret.py +0 -0
  151. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/secret.pyi +0 -0
  152. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/serving.py +0 -0
  153. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/serving.pyi +0 -0
  154. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/snapshot.py +0 -0
  155. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/snapshot.pyi +0 -0
  156. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/stream_type.py +0 -0
  157. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/token_flow.py +0 -0
  158. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/token_flow.pyi +0 -0
  159. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/volume.py +0 -0
  160. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal/volume.pyi +0 -0
  161. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal.egg-info/SOURCES.txt +0 -0
  162. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal.egg-info/dependency_links.txt +0 -0
  163. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal.egg-info/entry_points.txt +0 -0
  164. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal.egg-info/requires.txt +0 -0
  165. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal.egg-info/top_level.txt +0 -0
  166. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_docs/__init__.py +0 -0
  167. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_docs/gen_cli_docs.py +0 -0
  168. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_docs/gen_reference_docs.py +0 -0
  169. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_docs/mdmd/__init__.py +0 -0
  170. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_docs/mdmd/mdmd.py +0 -0
  171. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_docs/mdmd/signatures.py +0 -0
  172. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/__init__.py +0 -0
  173. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/api.proto +0 -0
  174. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/api_grpc.py +0 -0
  175. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/api_pb2.py +0 -0
  176. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/api_pb2.pyi +0 -0
  177. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/api_pb2_grpc.py +0 -0
  178. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/api_pb2_grpc.pyi +0 -0
  179. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/modal_api_grpc.py +0 -0
  180. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/modal_options_grpc.py +0 -0
  181. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/options.proto +0 -0
  182. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/options_grpc.py +0 -0
  183. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/options_pb2.py +0 -0
  184. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/options_pb2.pyi +0 -0
  185. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/options_pb2_grpc.py +0 -0
  186. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/options_pb2_grpc.pyi +0 -0
  187. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_proto/py.typed +0 -0
  188. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/modal_version/__main__.py +0 -0
  189. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/pyproject.toml +0 -0
  190. {modal-1.1.4.dev13 → modal-1.1.4.dev15}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.4.dev13
3
+ Version: 1.1.4.dev15
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.dev13",
36
+ version: str = "1.1.4.dev15",
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.dev13",
167
+ version: str = "1.1.4.dev15",
168
168
  ):
169
169
  """mdmd:hidden
170
170
  The Modal client object is not intended to be instantiated directly by users.
@@ -275,7 +275,7 @@ class _FlashPrometheusAutoscaler:
275
275
 
276
276
  # Scale up / down conservatively: Any container that is missing the metric is assumed to be at the minimum
277
277
  # value of the metric when scaling up and the maximum value of the metric when scaling down.
278
- scale_up_target_metric_value = sum_metric / current_replicas
278
+ scale_up_target_metric_value = sum_metric / (containers_with_metrics or 1)
279
279
  scale_down_target_metric_value = (
280
280
  sum_metric + n_containers_missing_metric * target_metric_value
281
281
  ) / current_replicas
@@ -303,8 +303,11 @@ class _FlashPrometheusAutoscaler:
303
303
 
304
304
  # Fetch the metrics from the endpoint
305
305
  try:
306
- response = await self.http_client.get(url)
306
+ response = await self.http_client.get(url, timeout=3)
307
307
  response.raise_for_status()
308
+ except asyncio.TimeoutError:
309
+ logger.warning(f"[Modal Flash] Timeout getting metrics from {url}")
310
+ return None
308
311
  except Exception as e:
309
312
  logger.warning(f"[Modal Flash] Error getting metrics from {url}: {e}")
310
313
  return None
@@ -866,6 +866,7 @@ async def _create_single_client_dependency_mount(
866
866
  uv_python_platform: str,
867
867
  check_if_exists: bool = True,
868
868
  allow_overwrite: bool = False,
869
+ dry_run: bool = False,
869
870
  ):
870
871
  import tempfile
871
872
 
@@ -930,17 +931,20 @@ async def _create_single_client_dependency_mount(
930
931
  remote_path=REMOTE_SITECUSTOMIZE_PATH,
931
932
  )
932
933
 
933
- try:
934
- await python_mount._deploy.aio(
935
- mount_name,
936
- api_pb2.DEPLOYMENT_NAMESPACE_GLOBAL,
937
- environment_name=profile_environment,
938
- allow_overwrite=allow_overwrite,
939
- client=client,
940
- )
941
- print(f"✅ Deployed mount {mount_name} to global namespace.")
942
- except GRPCError as e:
943
- print(f"⚠️ Mount creation failed with {e.status}: {e.message}")
934
+ if not dry_run:
935
+ try:
936
+ await python_mount._deploy.aio(
937
+ mount_name,
938
+ api_pb2.DEPLOYMENT_NAMESPACE_GLOBAL,
939
+ environment_name=profile_environment,
940
+ allow_overwrite=allow_overwrite,
941
+ client=client,
942
+ )
943
+ print(f"✅ Deployed mount {mount_name} to global namespace.")
944
+ except GRPCError as e:
945
+ print(f"⚠️ Mount creation failed with {e.status}: {e.message}")
946
+ else:
947
+ print(f"Dry run - skipping deployment of mount {mount_name}")
944
948
 
945
949
 
946
950
  async def _create_client_dependency_mounts(
@@ -948,6 +952,7 @@ async def _create_client_dependency_mounts(
948
952
  python_versions: list[str] = list(PYTHON_STANDALONE_VERSIONS),
949
953
  builder_versions: list[str] = ["2025.06"], # Reenable "PREVIEW" during testing
950
954
  check_if_exists=True,
955
+ dry_run=False,
951
956
  ):
952
957
  arch = "x86_64"
953
958
  platform_tags = [
@@ -971,6 +976,7 @@ async def _create_client_dependency_mounts(
971
976
  # in theory we may need to do at some point (hopefully not, but...)
972
977
  check_if_exists=check_if_exists and builder_version != "PREVIEW",
973
978
  allow_overwrite=builder_version == "PREVIEW",
979
+ dry_run=dry_run,
974
980
  )
975
981
  )
976
982
  await TaskContext.gather(*coros)
@@ -568,12 +568,14 @@ async def _create_single_client_dependency_mount(
568
568
  uv_python_platform: str,
569
569
  check_if_exists: bool = True,
570
570
  allow_overwrite: bool = False,
571
+ dry_run: bool = False,
571
572
  ): ...
572
573
  async def _create_client_dependency_mounts(
573
574
  client=None,
574
575
  python_versions: list[str] = ["3.9", "3.10", "3.11", "3.12", "3.13"],
575
576
  builder_versions: list[str] = ["2025.06"],
576
577
  check_if_exists=True,
578
+ dry_run=False,
577
579
  ): ...
578
580
 
579
581
  class __create_client_dependency_mounts_spec(typing_extensions.Protocol):
@@ -584,6 +586,7 @@ class __create_client_dependency_mounts_spec(typing_extensions.Protocol):
584
586
  python_versions: list[str] = ["3.9", "3.10", "3.11", "3.12", "3.13"],
585
587
  builder_versions: list[str] = ["2025.06"],
586
588
  check_if_exists=True,
589
+ dry_run=False,
587
590
  ): ...
588
591
  async def aio(
589
592
  self,
@@ -592,6 +595,7 @@ class __create_client_dependency_mounts_spec(typing_extensions.Protocol):
592
595
  python_versions: list[str] = ["3.9", "3.10", "3.11", "3.12", "3.13"],
593
596
  builder_versions: list[str] = ["2025.06"],
594
597
  check_if_exists=True,
598
+ dry_run=False,
595
599
  ): ...
596
600
 
597
601
  create_client_dependency_mounts: __create_client_dependency_mounts_spec
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.4.dev13
3
+ Version: 1.1.4.dev15
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.dev13"
4
+ __version__ = "1.1.4.dev15"
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