modal 1.6.4.dev7__tar.gz → 1.6.4.dev8__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 (250) hide show
  1. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/PKG-INFO +1 -1
  2. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/client.pyi +2 -2
  3. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_task_command_router_client.py +33 -5
  4. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal.egg-info/PKG-INFO +1 -1
  5. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_version/__init__.py +1 -1
  6. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/pyproject.toml +1 -0
  7. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/LICENSE +0 -0
  8. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/README.md +0 -0
  9. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/__init__.py +0 -0
  10. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/__main__.py +0 -0
  11. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_billing.py +0 -0
  12. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_cluster.py +0 -0
  13. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_cluster.pyi +0 -0
  14. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_container_entrypoint.py +0 -0
  15. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_environments.py +0 -0
  16. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_function_variants.py +0 -0
  17. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_functions.py +0 -0
  18. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_grpc_client.py +0 -0
  19. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_image.py +0 -0
  20. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_ipython.py +0 -0
  21. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_load_context.py +0 -0
  22. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_location.py +0 -0
  23. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_logs.py +0 -0
  24. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_logs_manager.py +0 -0
  25. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_logs_manager.pyi +0 -0
  26. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_metrics.py +0 -0
  27. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_metrics.pyi +0 -0
  28. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_object.py +0 -0
  29. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_outbound_policy.py +0 -0
  30. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_outbound_policy.pyi +0 -0
  31. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_output/__init__.py +0 -0
  32. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_output/manager.py +0 -0
  33. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_output/pty.py +0 -0
  34. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_output/rich.py +0 -0
  35. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_output/status.py +0 -0
  36. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_partial_function.py +0 -0
  37. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_resolver.py +0 -0
  38. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_resources.py +0 -0
  39. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/__init__.py +0 -0
  40. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/asgi.py +0 -0
  41. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/container_io_manager.py +0 -0
  42. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/container_io_manager.pyi +0 -0
  43. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/execution_context.py +0 -0
  44. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/execution_context.pyi +0 -0
  45. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  46. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/task_lifecycle_manager.py +0 -0
  47. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  48. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/telemetry.py +0 -0
  49. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/user_code_event_loop.py +0 -0
  50. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_runtime/user_code_imports.py +0 -0
  51. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_serialization.py +0 -0
  52. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_server.py +0 -0
  53. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_server.pyi +0 -0
  54. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_supports_logs.py +0 -0
  55. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_traceback.py +0 -0
  56. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_tunnel.py +0 -0
  57. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_tunnel.pyi +0 -0
  58. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_type_manager.py +0 -0
  59. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/__init__.py +0 -0
  60. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/app_utils.py +0 -0
  61. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/async_utils.py +0 -0
  62. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/auth_token_manager.py +0 -0
  63. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/blob_utils.py +0 -0
  64. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/browser_utils.py +0 -0
  65. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/bytes_io_segment_payload.py +0 -0
  66. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/curl_utils.py +0 -0
  67. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/deprecation.py +0 -0
  68. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/display_utils.py +0 -0
  69. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/docker_utils.py +0 -0
  70. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/function_utils.py +0 -0
  71. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/git_utils.py +0 -0
  72. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/grpc_testing.py +0 -0
  73. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/grpc_utils.py +0 -0
  74. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/hash_utils.py +0 -0
  75. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/http_utils.py +0 -0
  76. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/idle_countdown.py +0 -0
  77. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/jwt_utils.py +0 -0
  78. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/logger.py +0 -0
  79. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/mount_utils.py +0 -0
  80. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/name_utils.py +0 -0
  81. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/oauth.py +0 -0
  82. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/package_utils.py +0 -0
  83. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/pattern_utils.py +0 -0
  84. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/proxy_support.py +0 -0
  85. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/rand_pb_testing.py +0 -0
  86. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/sandbox_fs_utils.py +0 -0
  87. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/shell_utils.py +0 -0
  88. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_utils/time_utils.py +0 -0
  89. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_vendor/__init__.py +0 -0
  90. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  91. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_vendor/cloudpickle.py +0 -0
  92. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_vendor/tblib.py +0 -0
  93. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_vendor/version.py +0 -0
  94. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_watcher.py +0 -0
  95. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/_workspace.py +0 -0
  96. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/app.py +0 -0
  97. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/app.pyi +0 -0
  98. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/billing.py +0 -0
  99. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/billing.pyi +0 -0
  100. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/2023.12.312.txt +0 -0
  101. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/2023.12.txt +0 -0
  102. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/2024.04.txt +0 -0
  103. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/2024.10.txt +0 -0
  104. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/2025.06.txt +0 -0
  105. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/2026.10.txt +0 -0
  106. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/PREVIEW.txt +0 -0
  107. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/README.md +0 -0
  108. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/builder/base-images.json +0 -0
  109. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/call_graph.py +0 -0
  110. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/__init__.py +0 -0
  111. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/_download.py +0 -0
  112. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/_help.py +0 -0
  113. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/_logs.py +0 -0
  114. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/_stats.py +0 -0
  115. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/_traceback.py +0 -0
  116. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/app.py +0 -0
  117. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/billing.py +0 -0
  118. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/changelog.py +0 -0
  119. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/config.py +0 -0
  120. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/container.py +0 -0
  121. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/curl.py +0 -0
  122. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/dashboard.py +0 -0
  123. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/dict.py +0 -0
  124. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/endpoint.py +0 -0
  125. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/entry_point.py +0 -0
  126. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/environment.py +0 -0
  127. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/function.py +0 -0
  128. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/image.py +0 -0
  129. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/import_refs.py +0 -0
  130. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/logo.py +0 -0
  131. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/network_file_system.py +0 -0
  132. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/profile.py +0 -0
  133. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/queues.py +0 -0
  134. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/run.py +0 -0
  135. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/secret.py +0 -0
  136. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/selector.py +0 -0
  137. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/server.py +0 -0
  138. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/shell.py +0 -0
  139. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/skills.py +0 -0
  140. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/token.py +0 -0
  141. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/utils.py +0 -0
  142. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/volume.py +0 -0
  143. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cli/workspace.py +0 -0
  144. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/client.py +0 -0
  145. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cloud_bucket_mount.py +0 -0
  146. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cloud_bucket_mount.pyi +0 -0
  147. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cls.py +0 -0
  148. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cls.pyi +0 -0
  149. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cluster.py +0 -0
  150. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/cluster.pyi +0 -0
  151. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/config.py +0 -0
  152. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/container_process.py +0 -0
  153. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/container_process.pyi +0 -0
  154. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/dict.py +0 -0
  155. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/dict.pyi +0 -0
  156. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/environments.py +0 -0
  157. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/environments.pyi +0 -0
  158. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/exception.py +0 -0
  159. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/__init__.py +0 -0
  160. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/_flash_container_entry.py +0 -0
  161. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/flash.py +0 -0
  162. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/flash.pyi +0 -0
  163. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/flash_server.py +0 -0
  164. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/flash_server.pyi +0 -0
  165. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/experimental/ipython.py +0 -0
  166. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/file_pattern_matcher.py +0 -0
  167. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/functions.py +0 -0
  168. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/functions.pyi +0 -0
  169. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/image.py +0 -0
  170. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/image.pyi +0 -0
  171. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/io_streams.py +0 -0
  172. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/io_streams.pyi +0 -0
  173. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/mount.py +0 -0
  174. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/mount.pyi +0 -0
  175. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/network_file_system.py +0 -0
  176. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/network_file_system.pyi +0 -0
  177. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/object.py +0 -0
  178. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/object.pyi +0 -0
  179. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/output.py +0 -0
  180. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/parallel_map.py +0 -0
  181. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/parallel_map.pyi +0 -0
  182. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/partial_function.py +0 -0
  183. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/partial_function.pyi +0 -0
  184. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/proxy.py +0 -0
  185. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/proxy.pyi +0 -0
  186. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/py.typed +0 -0
  187. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/queue.py +0 -0
  188. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/queue.pyi +0 -0
  189. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/retries.py +0 -0
  190. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/runner.py +0 -0
  191. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/runner.pyi +0 -0
  192. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/running_app.py +0 -0
  193. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/__init__.py +0 -0
  194. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_common.py +0 -0
  195. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_filesystem.py +0 -0
  196. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_impl_persistent.py +0 -0
  197. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_impl_v1.py +0 -0
  198. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_impl_v2.py +0 -0
  199. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_sandbox.py +0 -0
  200. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_sidecar.py +0 -0
  201. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/_snapshot.py +0 -0
  202. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/sandbox.py +0 -0
  203. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/sandbox/sandbox.pyi +0 -0
  204. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/schedule.py +0 -0
  205. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/scheduler_placement.py +0 -0
  206. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/secret.py +0 -0
  207. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/secret.pyi +0 -0
  208. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/server.py +0 -0
  209. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/server.pyi +0 -0
  210. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/serving.py +0 -0
  211. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/serving.pyi +0 -0
  212. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/skills/modal/SKILL.md +0 -0
  213. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/stream_type.py +0 -0
  214. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/token_flow.py +0 -0
  215. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/token_flow.pyi +0 -0
  216. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/types.py +0 -0
  217. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/volume.py +0 -0
  218. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/volume.pyi +0 -0
  219. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/workspace.py +0 -0
  220. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal/workspace.pyi +0 -0
  221. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal.egg-info/SOURCES.txt +0 -0
  222. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal.egg-info/dependency_links.txt +0 -0
  223. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal.egg-info/entry_points.txt +0 -0
  224. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal.egg-info/requires.txt +0 -0
  225. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal.egg-info/top_level.txt +0 -0
  226. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/__init__.py +0 -0
  227. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/gen_cli_docs.py +0 -0
  228. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/gen_cli_docs_main.py +0 -0
  229. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/gen_reference_docs.py +0 -0
  230. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/gen_reference_docs_main.py +0 -0
  231. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/mdmd/__init__.py +0 -0
  232. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/mdmd/mdmd.py +0 -0
  233. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/mdmd/signatures.py +0 -0
  234. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/mdmd/types.py +0 -0
  235. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_docs/reference_intro.md +0 -0
  236. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/__init__.py +0 -0
  237. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/api_grpc.py +0 -0
  238. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/api_pb2.py +0 -0
  239. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/api_pb2.pyi +0 -0
  240. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/api_pb2_grpc.py +0 -0
  241. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/api_pb2_grpc.pyi +0 -0
  242. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/modal_api_grpc.py +0 -0
  243. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/py.typed +0 -0
  244. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/task_command_router_grpc.py +0 -0
  245. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/task_command_router_pb2.py +0 -0
  246. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/task_command_router_pb2.pyi +0 -0
  247. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  248. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  249. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/modal_version/__main__.py +0 -0
  250. {modal-1.6.4.dev7 → modal-1.6.4.dev8}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.6.4.dev7
3
+ Version: 1.6.4.dev8
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -87,7 +87,7 @@ class _Client:
87
87
  server_url: str,
88
88
  client_type: int,
89
89
  credentials: typing.Optional[tuple[str, str]],
90
- version: str = "1.6.4.dev7",
90
+ version: str = "1.6.4.dev8",
91
91
  *,
92
92
  oauth_credentials: typing.Optional[_OAuthCredentials] = None,
93
93
  ):
@@ -304,7 +304,7 @@ class Client:
304
304
  server_url: str,
305
305
  client_type: int,
306
306
  credentials: typing.Optional[tuple[str, str]],
307
- version: str = "1.6.4.dev7",
307
+ version: str = "1.6.4.dev8",
308
308
  *,
309
309
  oauth_credentials: typing.Optional[_OAuthCredentials] = None,
310
310
  ):
@@ -55,6 +55,36 @@ _STREAMING_STDIN_RESUMABLE_EXCEPTIONS = (
55
55
  )
56
56
 
57
57
 
58
+ _shared_verifying_ssl_context_instance: ssl.SSLContext | None = None
59
+
60
+
61
+ def _shared_verifying_ssl_context() -> ssl.SSLContext:
62
+ """Process-wide TLS context that verifies certificates against the system CAs.
63
+
64
+ Creating a context parses the system CA bundle while holding the GIL, so one
65
+ per channel blocks the event loop when many Sandboxes connect at once. Every
66
+ Sandbox's command router channel shares this context, so it must never be
67
+ modified; a change would apply to every connection in the process.
68
+ """
69
+ global _shared_verifying_ssl_context_instance
70
+ if _shared_verifying_ssl_context_instance is None:
71
+ _shared_verifying_ssl_context_instance = ssl.create_default_context()
72
+ return _shared_verifying_ssl_context_instance
73
+
74
+
75
+ def _unverified_ssl_context() -> ssl.SSLContext:
76
+ """New TLS context that skips certificate and hostname checks.
77
+
78
+ Only for local e2e servers on localhost, which use self-signed certificates.
79
+ Built per call so that turning verification off cannot reach the shared
80
+ verifying context.
81
+ """
82
+ ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
83
+ ssl_context.check_hostname = False
84
+ ssl_context.verify_mode = ssl.CERT_NONE
85
+ return ssl_context
86
+
87
+
58
88
  @retry(n_attempts=34, base_delay=1, max_delay=10, attempt_timeout=10, total_timeout=310)
59
89
  async def _connect_channel(channel: grpclib.client.Channel):
60
90
  """Connect to the command router channel.
@@ -320,13 +350,11 @@ class TaskCommandRouterClient:
320
350
  raise ValueError(f"Task router URL must be https, got: {url}")
321
351
  ssl_context = None
322
352
  elif o.scheme == "https":
323
- ssl_context = ssl.create_default_context()
324
353
  if is_localhost_client:
325
- # Allow insecure TLS when the Modal server client points to localhost
326
- # This is typically triggered from local e2e testing
327
354
  logger.warning("Using insecure TLS for task command router because server client points to localhost")
328
- ssl_context.check_hostname = False
329
- ssl_context.verify_mode = ssl.CERT_NONE
355
+ ssl_context = _unverified_ssl_context()
356
+ else:
357
+ ssl_context = _shared_verifying_ssl_context()
330
358
  else:
331
359
  raise ValueError(f"Task router URL must be https, got: {url}")
332
360
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.6.4.dev7
3
+ Version: 1.6.4.dev8
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.6.4.dev7"
4
+ __version__ = "1.6.4.dev8"
@@ -43,6 +43,7 @@ oauth = [
43
43
  ]
44
44
 
45
45
  [dependency-groups]
46
+ publish = ["pypi-attestations==0.0.30"]
46
47
  dev = [
47
48
  "fastapi~=0.125",
48
49
  "flaky~=3.8",
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