modal 1.5.6.dev4__tar.gz → 1.5.6.dev5__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 (236) hide show
  1. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/PKG-INFO +1 -1
  2. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/grpc_utils.py +13 -6
  3. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/client.pyi +2 -2
  4. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/mount.py +6 -1
  5. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal.egg-info/PKG-INFO +1 -1
  6. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_version/__init__.py +1 -1
  7. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/LICENSE +0 -0
  8. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/README.md +0 -0
  9. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/__init__.py +0 -0
  10. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/__main__.py +0 -0
  11. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_billing.py +0 -0
  12. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_clustered_functions.py +0 -0
  13. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_clustered_functions.pyi +0 -0
  14. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_container_entrypoint.py +0 -0
  15. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_environments.py +0 -0
  16. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_function_variants.py +0 -0
  17. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_functions.py +0 -0
  18. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_grpc_client.py +0 -0
  19. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_image.py +0 -0
  20. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_ipython.py +0 -0
  21. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_load_context.py +0 -0
  22. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_location.py +0 -0
  23. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_logs.py +0 -0
  24. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_logs_manager.py +0 -0
  25. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_logs_manager.pyi +0 -0
  26. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_object.py +0 -0
  27. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_output/__init__.py +0 -0
  28. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_output/manager.py +0 -0
  29. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_output/pty.py +0 -0
  30. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_output/rich.py +0 -0
  31. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_output/status.py +0 -0
  32. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_partial_function.py +0 -0
  33. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_resolver.py +0 -0
  34. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_resources.py +0 -0
  35. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_runtime/__init__.py +0 -0
  36. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_runtime/asgi.py +0 -0
  37. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_runtime/container_io_manager.py +0 -0
  38. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_runtime/container_io_manager.pyi +0 -0
  39. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_runtime/execution_context.py +0 -0
  40. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_runtime/execution_context.pyi +0 -0
  41. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  42. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_runtime/task_lifecycle_manager.py +0 -0
  43. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  44. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_runtime/telemetry.py +0 -0
  45. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_runtime/user_code_event_loop.py +0 -0
  46. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_runtime/user_code_imports.py +0 -0
  47. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_serialization.py +0 -0
  48. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_server.py +0 -0
  49. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_supports_logs.py +0 -0
  50. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_traceback.py +0 -0
  51. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_tunnel.py +0 -0
  52. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_tunnel.pyi +0 -0
  53. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_type_manager.py +0 -0
  54. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/__init__.py +0 -0
  55. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/app_utils.py +0 -0
  56. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/async_utils.py +0 -0
  57. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/auth_token_manager.py +0 -0
  58. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/blob_utils.py +0 -0
  59. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/browser_utils.py +0 -0
  60. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/bytes_io_segment_payload.py +0 -0
  61. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/curl_utils.py +0 -0
  62. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/deprecation.py +0 -0
  63. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/display_utils.py +0 -0
  64. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/docker_utils.py +0 -0
  65. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/function_utils.py +0 -0
  66. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/git_utils.py +0 -0
  67. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/grpc_testing.py +0 -0
  68. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/hash_utils.py +0 -0
  69. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/http_utils.py +0 -0
  70. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/jwt_utils.py +0 -0
  71. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/logger.py +0 -0
  72. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/mount_utils.py +0 -0
  73. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/name_utils.py +0 -0
  74. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/package_utils.py +0 -0
  75. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/pattern_utils.py +0 -0
  76. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/proxy_support.py +0 -0
  77. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/rand_pb_testing.py +0 -0
  78. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/sandbox_fs_utils.py +0 -0
  79. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/shell_utils.py +0 -0
  80. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/task_command_router_client.py +0 -0
  81. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_utils/time_utils.py +0 -0
  82. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_vendor/__init__.py +0 -0
  83. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  84. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_vendor/cloudpickle.py +0 -0
  85. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_vendor/tblib.py +0 -0
  86. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_vendor/version.py +0 -0
  87. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_watcher.py +0 -0
  88. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/_workspace.py +0 -0
  89. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/app.py +0 -0
  90. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/app.pyi +0 -0
  91. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/billing.py +0 -0
  92. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/billing.pyi +0 -0
  93. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/builder/2023.12.312.txt +0 -0
  94. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/builder/2023.12.txt +0 -0
  95. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/builder/2024.04.txt +0 -0
  96. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/builder/2024.10.txt +0 -0
  97. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/builder/2025.06.txt +0 -0
  98. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/builder/PREVIEW.txt +0 -0
  99. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/builder/README.md +0 -0
  100. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/builder/base-images.json +0 -0
  101. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/call_graph.py +0 -0
  102. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/__init__.py +0 -0
  103. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/_download.py +0 -0
  104. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/_help.py +0 -0
  105. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/_traceback.py +0 -0
  106. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/app.py +0 -0
  107. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/billing.py +0 -0
  108. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/bootstrap.py +0 -0
  109. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/changelog.py +0 -0
  110. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/cluster.py +0 -0
  111. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/config.py +0 -0
  112. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/container.py +0 -0
  113. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/curl.py +0 -0
  114. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/dashboard.py +0 -0
  115. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/dict.py +0 -0
  116. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/endpoint.py +0 -0
  117. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/entry_point.py +0 -0
  118. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/environment.py +0 -0
  119. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/image.py +0 -0
  120. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/import_refs.py +0 -0
  121. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/launch.py +0 -0
  122. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/logo.py +0 -0
  123. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/network_file_system.py +0 -0
  124. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/profile.py +0 -0
  125. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/programs/__init__.py +0 -0
  126. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/programs/run_jupyter.py +0 -0
  127. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/programs/vscode.py +0 -0
  128. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/queues.py +0 -0
  129. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/run.py +0 -0
  130. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/secret.py +0 -0
  131. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/selector.py +0 -0
  132. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/shell.py +0 -0
  133. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/skills.py +0 -0
  134. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/token.py +0 -0
  135. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/utils.py +0 -0
  136. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/volume.py +0 -0
  137. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cli/workspace.py +0 -0
  138. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/client.py +0 -0
  139. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cloud_bucket_mount.py +0 -0
  140. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cloud_bucket_mount.pyi +0 -0
  141. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cls.py +0 -0
  142. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/cls.pyi +0 -0
  143. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/config.py +0 -0
  144. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/container_process.py +0 -0
  145. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/container_process.pyi +0 -0
  146. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/dict.py +0 -0
  147. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/dict.pyi +0 -0
  148. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/environments.py +0 -0
  149. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/environments.pyi +0 -0
  150. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/exception.py +0 -0
  151. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/experimental/__init__.py +0 -0
  152. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/experimental/flash.py +0 -0
  153. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/experimental/flash.pyi +0 -0
  154. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/experimental/ipython.py +0 -0
  155. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/file_io.py +0 -0
  156. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/file_io.pyi +0 -0
  157. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/file_pattern_matcher.py +0 -0
  158. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/functions.py +0 -0
  159. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/functions.pyi +0 -0
  160. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/image.py +0 -0
  161. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/image.pyi +0 -0
  162. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/io_streams.py +0 -0
  163. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/io_streams.pyi +0 -0
  164. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/mount.pyi +0 -0
  165. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/network_file_system.py +0 -0
  166. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/network_file_system.pyi +0 -0
  167. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/object.py +0 -0
  168. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/object.pyi +0 -0
  169. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/output.py +0 -0
  170. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/parallel_map.py +0 -0
  171. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/parallel_map.pyi +0 -0
  172. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/partial_function.py +0 -0
  173. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/partial_function.pyi +0 -0
  174. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/proxy.py +0 -0
  175. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/proxy.pyi +0 -0
  176. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/py.typed +0 -0
  177. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/queue.py +0 -0
  178. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/queue.pyi +0 -0
  179. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/retries.py +0 -0
  180. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/runner.py +0 -0
  181. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/runner.pyi +0 -0
  182. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/running_app.py +0 -0
  183. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/sandbox.py +0 -0
  184. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/sandbox.pyi +0 -0
  185. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/sandbox_fs.py +0 -0
  186. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/sandbox_fs.pyi +0 -0
  187. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/schedule.py +0 -0
  188. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/scheduler_placement.py +0 -0
  189. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/secret.py +0 -0
  190. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/secret.pyi +0 -0
  191. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/server.py +0 -0
  192. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/server.pyi +0 -0
  193. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/serving.py +0 -0
  194. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/serving.pyi +0 -0
  195. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/skills/modal/SKILL.md +0 -0
  196. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/snapshot.py +0 -0
  197. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/snapshot.pyi +0 -0
  198. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/stream_type.py +0 -0
  199. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/token_flow.py +0 -0
  200. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/token_flow.pyi +0 -0
  201. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/types.py +0 -0
  202. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/volume.py +0 -0
  203. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/volume.pyi +0 -0
  204. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/workspace.py +0 -0
  205. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal/workspace.pyi +0 -0
  206. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal.egg-info/SOURCES.txt +0 -0
  207. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal.egg-info/dependency_links.txt +0 -0
  208. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal.egg-info/entry_points.txt +0 -0
  209. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal.egg-info/requires.txt +0 -0
  210. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal.egg-info/top_level.txt +0 -0
  211. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_docs/__init__.py +0 -0
  212. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_docs/gen_cli_docs.py +0 -0
  213. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_docs/gen_cli_docs_main.py +0 -0
  214. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_docs/gen_reference_docs.py +0 -0
  215. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_docs/gen_reference_docs_main.py +0 -0
  216. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_docs/mdmd/__init__.py +0 -0
  217. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_docs/mdmd/mdmd.py +0 -0
  218. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_docs/mdmd/signatures.py +0 -0
  219. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_docs/mdmd/types.py +0 -0
  220. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_docs/reference_intro.md +0 -0
  221. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_proto/__init__.py +0 -0
  222. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_proto/api_grpc.py +0 -0
  223. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_proto/api_pb2.py +0 -0
  224. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_proto/api_pb2.pyi +0 -0
  225. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_proto/api_pb2_grpc.py +0 -0
  226. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_proto/api_pb2_grpc.pyi +0 -0
  227. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_proto/modal_api_grpc.py +0 -0
  228. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_proto/py.typed +0 -0
  229. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_proto/task_command_router_grpc.py +0 -0
  230. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_proto/task_command_router_pb2.py +0 -0
  231. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_proto/task_command_router_pb2.pyi +0 -0
  232. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  233. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  234. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/modal_version/__main__.py +0 -0
  235. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/pyproject.toml +0 -0
  236. {modal-1.5.6.dev4 → modal-1.5.6.dev5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.6.dev4
3
+ Version: 1.5.6.dev5
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -199,16 +199,23 @@ class ConnectionManager:
199
199
  self._client = client
200
200
  # This metadata is injected into all requests on all channels created by this manager.
201
201
  self._metadata = metadata
202
- self._channels: dict[str, grpclib.client.Channel] = {}
202
+ self._channels: dict[str, asyncio.Future[grpclib.client.Channel]] = {}
203
203
 
204
204
  async def get_or_create_channel(self, server_url: str) -> grpclib.client.Channel:
205
- if server_url not in self._channels:
206
- self._channels[server_url] = await create_channel_with_fallbacks(server_url, self._metadata)
207
- return self._channels[server_url]
205
+ fut = self._channels.get(server_url)
206
+ if fut is None or (fut.done() and (fut.cancelled() or fut.exception() is not None)):
207
+ # Cache the attempt rather than the channel, so callers racing to connect share one.
208
+ fut = asyncio.ensure_future(create_channel_with_fallbacks(server_url, self._metadata))
209
+ self._channels[server_url] = fut
210
+ # Shielded so one caller giving up doesn't cancel the connection for the others.
211
+ return await asyncio.shield(fut)
208
212
 
209
213
  def close(self):
210
- for channel in self._channels.values():
211
- channel.close()
214
+ for fut in self._channels.values():
215
+ if fut.done() and not fut.cancelled() and fut.exception() is None:
216
+ fut.result().close()
217
+ else:
218
+ fut.cancel()
212
219
  self._channels.clear()
213
220
 
214
221
 
@@ -77,7 +77,7 @@ class _Client:
77
77
  server_url: str,
78
78
  client_type: int,
79
79
  credentials: typing.Optional[tuple[str, str]],
80
- version: str = "1.5.6.dev4",
80
+ version: str = "1.5.6.dev5",
81
81
  *,
82
82
  oauth_credentials: typing.Optional[_OAuthCredentials] = None,
83
83
  ):
@@ -277,7 +277,7 @@ class Client:
277
277
  server_url: str,
278
278
  client_type: int,
279
279
  credentials: typing.Optional[tuple[str, str]],
280
- version: str = "1.5.6.dev4",
280
+ version: str = "1.5.6.dev5",
281
281
  *,
282
282
  oauth_credentials: typing.Optional[_OAuthCredentials] = None,
283
283
  ):
@@ -851,7 +851,7 @@ async def _create_single_client_dependency_mount(
851
851
  print(f"📦 Building {mount_name}.") # noqa: T201
852
852
  requirements = os.path.join(os.path.dirname(__file__), f"builder/{builder_version}.txt")
853
853
  cmd = [
854
- "uv",
854
+ os.environ.get("MODAL_UV_PATH", "uv"),
855
855
  "pip",
856
856
  "install",
857
857
  "--strict",
@@ -867,6 +867,11 @@ async def _create_single_client_dependency_mount(
867
867
  "--python",
868
868
  python_version,
869
869
  ]
870
+ # A directory holding wheels for every pin in the requirements file, for
871
+ # building mounts where no package index is reachable.
872
+ find_links = os.environ.get("MODAL_BUILDER_WHEEL_DIR")
873
+ if find_links:
874
+ cmd += ["--no-index", "--find-links", find_links]
870
875
  # Retry uv pip install on transient failures (e.g. network blips,
871
876
  # resource contention). uv exits with non-zero on recoverable errors
872
877
  # like rate limits or connection resets.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.6.dev4
3
+ Version: 1.5.6.dev5
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -1,4 +1,4 @@
1
1
  # Copyright Modal Labs 2026
2
2
  """Supplies the current version of the modal client library."""
3
3
 
4
- __version__ = "1.5.6.dev4"
4
+ __version__ = "1.5.6.dev5"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes