modal 1.5.2.dev0__tar.gz → 1.5.2.dev1__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 (230) hide show
  1. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/PKG-INFO +1 -1
  2. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/client.pyi +2 -2
  3. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/functions.pyi +6 -6
  4. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/sandbox.py +24 -5
  5. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/sandbox.pyi +36 -9
  6. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal.egg-info/PKG-INFO +1 -1
  7. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_proto/api_pb2.py +386 -386
  8. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_proto/api_pb2.pyi +8 -1
  9. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_version/__init__.py +1 -1
  10. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/LICENSE +0 -0
  11. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/README.md +0 -0
  12. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/__init__.py +0 -0
  13. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/__main__.py +0 -0
  14. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_billing.py +0 -0
  15. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_clustered_functions.py +0 -0
  16. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_clustered_functions.pyi +0 -0
  17. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_container_entrypoint.py +0 -0
  18. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_environments.py +0 -0
  19. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_function_variants.py +0 -0
  20. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_functions.py +0 -0
  21. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_grpc_client.py +0 -0
  22. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_image.py +0 -0
  23. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_ipython.py +0 -0
  24. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_load_context.py +0 -0
  25. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_location.py +0 -0
  26. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_logs.py +0 -0
  27. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_object.py +0 -0
  28. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_output/__init__.py +0 -0
  29. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_output/manager.py +0 -0
  30. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_output/pty.py +0 -0
  31. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_output/rich.py +0 -0
  32. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_output/status.py +0 -0
  33. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_partial_function.py +0 -0
  34. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_resolver.py +0 -0
  35. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_resources.py +0 -0
  36. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_runtime/__init__.py +0 -0
  37. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_runtime/asgi.py +0 -0
  38. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_runtime/container_io_manager.py +0 -0
  39. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_runtime/container_io_manager.pyi +0 -0
  40. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_runtime/execution_context.py +0 -0
  41. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_runtime/execution_context.pyi +0 -0
  42. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  43. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_runtime/task_lifecycle_manager.py +0 -0
  44. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  45. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_runtime/telemetry.py +0 -0
  46. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_runtime/user_code_event_loop.py +0 -0
  47. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_runtime/user_code_imports.py +0 -0
  48. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_serialization.py +0 -0
  49. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_server.py +0 -0
  50. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_traceback.py +0 -0
  51. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_tunnel.py +0 -0
  52. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_tunnel.pyi +0 -0
  53. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_type_manager.py +0 -0
  54. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/__init__.py +0 -0
  55. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/app_utils.py +0 -0
  56. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/async_utils.py +0 -0
  57. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/auth_token_manager.py +0 -0
  58. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/blob_utils.py +0 -0
  59. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/browser_utils.py +0 -0
  60. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/bytes_io_segment_payload.py +0 -0
  61. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/curl_utils.py +0 -0
  62. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/deprecation.py +0 -0
  63. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/docker_utils.py +0 -0
  64. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/function_utils.py +0 -0
  65. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/git_utils.py +0 -0
  66. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/grpc_testing.py +0 -0
  67. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/grpc_utils.py +0 -0
  68. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/hash_utils.py +0 -0
  69. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/http_utils.py +0 -0
  70. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/jwt_utils.py +0 -0
  71. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/logger.py +0 -0
  72. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/mount_utils.py +0 -0
  73. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/name_utils.py +0 -0
  74. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/package_utils.py +0 -0
  75. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/pattern_utils.py +0 -0
  76. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/proxy_support.py +0 -0
  77. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/rand_pb_testing.py +0 -0
  78. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/sandbox_fs_utils.py +0 -0
  79. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/shell_utils.py +0 -0
  80. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/task_command_router_client.py +0 -0
  81. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_utils/time_utils.py +0 -0
  82. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_vendor/__init__.py +0 -0
  83. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  84. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_vendor/cloudpickle.py +0 -0
  85. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_vendor/tblib.py +0 -0
  86. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_vendor/version.py +0 -0
  87. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_watcher.py +0 -0
  88. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/_workspace.py +0 -0
  89. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/app.py +0 -0
  90. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/app.pyi +0 -0
  91. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/billing.py +0 -0
  92. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/billing.pyi +0 -0
  93. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/builder/2023.12.312.txt +0 -0
  94. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/builder/2023.12.txt +0 -0
  95. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/builder/2024.04.txt +0 -0
  96. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/builder/2024.10.txt +0 -0
  97. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/builder/2025.06.txt +0 -0
  98. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/builder/PREVIEW.txt +0 -0
  99. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/builder/README.md +0 -0
  100. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/builder/base-images.json +0 -0
  101. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/call_graph.py +0 -0
  102. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/__init__.py +0 -0
  103. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/_download.py +0 -0
  104. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/_help.py +0 -0
  105. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/_traceback.py +0 -0
  106. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/app.py +0 -0
  107. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/billing.py +0 -0
  108. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/bootstrap.py +0 -0
  109. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/changelog.py +0 -0
  110. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/cluster.py +0 -0
  111. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/config.py +0 -0
  112. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/container.py +0 -0
  113. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/curl.py +0 -0
  114. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/dashboard.py +0 -0
  115. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/dict.py +0 -0
  116. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/endpoint.py +0 -0
  117. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/entry_point.py +0 -0
  118. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/environment.py +0 -0
  119. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/image.py +0 -0
  120. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/import_refs.py +0 -0
  121. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/launch.py +0 -0
  122. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/logo.py +0 -0
  123. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/network_file_system.py +0 -0
  124. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/profile.py +0 -0
  125. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/programs/__init__.py +0 -0
  126. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/programs/run_jupyter.py +0 -0
  127. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/programs/vscode.py +0 -0
  128. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/queues.py +0 -0
  129. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/run.py +0 -0
  130. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/secret.py +0 -0
  131. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/selector.py +0 -0
  132. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/shell.py +0 -0
  133. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/skills.py +0 -0
  134. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/token.py +0 -0
  135. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/utils.py +0 -0
  136. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/volume.py +0 -0
  137. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cli/workspace.py +0 -0
  138. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/client.py +0 -0
  139. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cloud_bucket_mount.py +0 -0
  140. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cloud_bucket_mount.pyi +0 -0
  141. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cls.py +0 -0
  142. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/cls.pyi +0 -0
  143. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/config.py +0 -0
  144. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/container_process.py +0 -0
  145. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/container_process.pyi +0 -0
  146. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/dict.py +0 -0
  147. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/dict.pyi +0 -0
  148. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/environments.py +0 -0
  149. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/environments.pyi +0 -0
  150. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/exception.py +0 -0
  151. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/experimental/__init__.py +0 -0
  152. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/experimental/flash.py +0 -0
  153. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/experimental/flash.pyi +0 -0
  154. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/experimental/ipython.py +0 -0
  155. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/file_io.py +0 -0
  156. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/file_io.pyi +0 -0
  157. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/file_pattern_matcher.py +0 -0
  158. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/functions.py +0 -0
  159. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/image.py +0 -0
  160. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/image.pyi +0 -0
  161. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/io_streams.py +0 -0
  162. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/io_streams.pyi +0 -0
  163. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/mount.py +0 -0
  164. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/mount.pyi +0 -0
  165. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/network_file_system.py +0 -0
  166. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/network_file_system.pyi +0 -0
  167. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/object.py +0 -0
  168. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/object.pyi +0 -0
  169. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/output.py +0 -0
  170. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/parallel_map.py +0 -0
  171. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/parallel_map.pyi +0 -0
  172. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/partial_function.py +0 -0
  173. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/partial_function.pyi +0 -0
  174. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/proxy.py +0 -0
  175. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/proxy.pyi +0 -0
  176. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/py.typed +0 -0
  177. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/queue.py +0 -0
  178. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/queue.pyi +0 -0
  179. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/retries.py +0 -0
  180. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/runner.py +0 -0
  181. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/runner.pyi +0 -0
  182. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/running_app.py +0 -0
  183. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/sandbox_fs.py +0 -0
  184. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/sandbox_fs.pyi +0 -0
  185. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/schedule.py +0 -0
  186. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/scheduler_placement.py +0 -0
  187. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/secret.py +0 -0
  188. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/secret.pyi +0 -0
  189. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/server.py +0 -0
  190. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/server.pyi +0 -0
  191. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/serving.py +0 -0
  192. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/serving.pyi +0 -0
  193. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/skills/modal/SKILL.md +0 -0
  194. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/snapshot.py +0 -0
  195. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/snapshot.pyi +0 -0
  196. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/stream_type.py +0 -0
  197. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/token_flow.py +0 -0
  198. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/token_flow.pyi +0 -0
  199. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/volume.py +0 -0
  200. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/volume.pyi +0 -0
  201. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/workspace.py +0 -0
  202. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal/workspace.pyi +0 -0
  203. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal.egg-info/SOURCES.txt +0 -0
  204. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal.egg-info/dependency_links.txt +0 -0
  205. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal.egg-info/entry_points.txt +0 -0
  206. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal.egg-info/requires.txt +0 -0
  207. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal.egg-info/top_level.txt +0 -0
  208. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_docs/__init__.py +0 -0
  209. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_docs/gen_cli_docs.py +0 -0
  210. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_docs/gen_cli_docs_main.py +0 -0
  211. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_docs/gen_reference_docs.py +0 -0
  212. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_docs/gen_reference_docs_main.py +0 -0
  213. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_docs/mdmd/__init__.py +0 -0
  214. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_docs/mdmd/mdmd.py +0 -0
  215. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_docs/mdmd/signatures.py +0 -0
  216. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_docs/mdmd/types.py +0 -0
  217. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_proto/__init__.py +0 -0
  218. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_proto/api_grpc.py +0 -0
  219. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_proto/api_pb2_grpc.py +0 -0
  220. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_proto/api_pb2_grpc.pyi +0 -0
  221. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_proto/modal_api_grpc.py +0 -0
  222. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_proto/py.typed +0 -0
  223. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_proto/task_command_router_grpc.py +0 -0
  224. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_proto/task_command_router_pb2.py +0 -0
  225. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_proto/task_command_router_pb2.pyi +0 -0
  226. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  227. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  228. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/modal_version/__main__.py +0 -0
  229. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/pyproject.toml +0 -0
  230. {modal-1.5.2.dev0 → modal-1.5.2.dev1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.2.dev0
3
+ Version: 1.5.2.dev1
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -35,7 +35,7 @@ class _Client:
35
35
  server_url: str,
36
36
  client_type: int,
37
37
  credentials: typing.Optional[tuple[str, str]],
38
- version: str = "1.5.2.dev0",
38
+ version: str = "1.5.2.dev1",
39
39
  ):
40
40
  """mdmd:hidden
41
41
  The Modal client object is not intended to be instantiated directly by users.
@@ -205,7 +205,7 @@ class Client:
205
205
  server_url: str,
206
206
  client_type: int,
207
207
  credentials: typing.Optional[tuple[str, str]],
208
- version: str = "1.5.2.dev0",
208
+ version: str = "1.5.2.dev1",
209
209
  ):
210
210
  """mdmd:hidden
211
211
  The Modal client object is not intended to be instantiated directly by users.
@@ -490,7 +490,7 @@ class Function(
490
490
 
491
491
  _call_generator: ___call_generator_spec
492
492
 
493
- class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
493
+ class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
494
494
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
495
495
  """Calls the function remotely, executing it with the given arguments and returning the execution's result.
496
496
 
@@ -515,7 +515,7 @@ class Function(
515
515
  """
516
516
  ...
517
517
 
518
- remote: __remote_spec[modal._functions.ReturnType, modal._functions.P]
518
+ remote: __remote_spec[modal._functions.P, modal._functions.ReturnType]
519
519
 
520
520
  class __remote_gen_spec(typing_extensions.Protocol):
521
521
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -565,7 +565,7 @@ class Function(
565
565
  """
566
566
  ...
567
567
 
568
- class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
568
+ class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
569
569
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
570
570
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
571
571
 
@@ -598,7 +598,7 @@ class Function(
598
598
  """
599
599
  ...
600
600
 
601
- _experimental_spawn: ___experimental_spawn_spec[modal._functions.ReturnType, modal._functions.P]
601
+ _experimental_spawn: ___experimental_spawn_spec[modal._functions.P, modal._functions.ReturnType]
602
602
 
603
603
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
604
604
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
@@ -606,7 +606,7 @@ class Function(
606
606
 
607
607
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
608
608
 
609
- class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
609
+ class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
610
610
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
611
611
  """Calls the function with the given arguments, without waiting for the results.
612
612
 
@@ -639,7 +639,7 @@ class Function(
639
639
  """
640
640
  ...
641
641
 
642
- spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P]
642
+ spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType]
643
643
 
644
644
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
645
645
  """Return the inner Python object wrapped by this Modal Function.
@@ -839,7 +839,9 @@ class _Sandbox(_Object, type_prefix="sb"):
839
839
  region: str | Sequence[str] | None = None,
840
840
  block_network: bool = False,
841
841
  outbound_cidr_allowlist: Sequence[str] | None = None,
842
+ outbound_domain_allowlist: Sequence[str] | None = None,
842
843
  inbound_cidr_allowlist: Sequence[str] | None = None,
844
+ i6pn: bool = False,
843
845
  volumes: dict[str | os.PathLike, _Volume | _CloudBucketMount] = {},
844
846
  pty: bool = False,
845
847
  encrypted_ports: Sequence[int] = [],
@@ -854,13 +856,20 @@ class _Sandbox(_Object, type_prefix="sb"):
854
856
  """Create a sandbox using the V2 backend.
855
857
 
856
858
  Supported features include exec, encrypted tunnels, wait/poll/terminate,
857
- CPU and memory configuration, region placement, volumes, cloud bucket mounts
858
- (with static credentials via `secret=...` or `oidc_auth_role_arn`), OIDC
859
- identity tokens, proxies, and filesystem snapshots.
859
+ CPU and memory configuration, region placement, private IPv6 networking
860
+ (i6pn), volumes, cloud bucket mounts (with static credentials via
861
+ `secret=...` or `oidc_auth_role_arn`), OIDC identity tokens, proxies, and
862
+ filesystem snapshots.
860
863
 
861
864
  Features like tags, memory snapshots, network file systems, GPUs, and custom
862
865
  domains are not supported.
863
866
 
867
+ Set `i6pn=True` to enable private IPv6 networking so sandboxes in the same
868
+ workspace can address each other directly at their `i6pn.modal.local`
869
+ address. i6pn only connects sandboxes co-located on the same routable
870
+ network, so pin every sandbox in the group to the same specific region
871
+ (e.g. `region="us-east-1"`).
872
+
864
873
  V2 sandboxes created with this method are not currently returned by
865
874
  `Sandbox.list()` and cannot be looked up with `Sandbox.from_name()`.
866
875
  Store `sandbox.object_id` if you need to retrieve the sandbox later, and
@@ -878,6 +887,12 @@ class _Sandbox(_Object, type_prefix="sb"):
878
887
  if block_network and (encrypted_ports or h2_ports or unencrypted_ports):
879
888
  raise InvalidError("Cannot specify open ports when `block_network` is enabled")
880
889
 
890
+ if block_network and i6pn:
891
+ raise InvalidError(
892
+ "`block_network` disables all networking, including i6pn. To keep i6pn while blocking "
893
+ "public egress, use an empty outbound allowlist (`outbound_cidr_allowlist=[]`) instead."
894
+ )
895
+
881
896
  validated_volumes = validate_volumes(volumes)
882
897
  cloud_bucket_mounts = [(k, v) for k, v in validated_volumes if isinstance(v, _CloudBucketMount)]
883
898
  validated_volumes = [(k, v) for k, v in validated_volumes if isinstance(v, _Volume)]
@@ -915,19 +930,22 @@ class _Sandbox(_Object, type_prefix="sb"):
915
930
  if block_network:
916
931
  if outbound_cidr_allowlist is not None:
917
932
  raise InvalidError("`outbound_cidr_allowlist` cannot be used when `block_network` is enabled")
933
+ if outbound_domain_allowlist is not None:
934
+ raise InvalidError("`outbound_domain_allowlist` cannot be used when `block_network` is enabled")
918
935
  if inbound_cidr_allowlist is not None:
919
936
  raise InvalidError("`inbound_cidr_allowlist` cannot be used when `block_network` is enabled")
920
937
  network_access = api_pb2.NetworkAccess(
921
938
  network_access_type=api_pb2.NetworkAccess.NetworkAccessType.BLOCKED,
922
939
  )
923
- elif outbound_cidr_allowlist is None:
940
+ elif outbound_domain_allowlist is None and outbound_cidr_allowlist is None:
924
941
  network_access = api_pb2.NetworkAccess(
925
942
  network_access_type=api_pb2.NetworkAccess.NetworkAccessType.OPEN,
926
943
  )
927
944
  else:
928
945
  network_access = api_pb2.NetworkAccess(
929
946
  network_access_type=api_pb2.NetworkAccess.NetworkAccessType.ALLOWLIST,
930
- allowed_cidrs=outbound_cidr_allowlist,
947
+ allowed_cidrs=list(outbound_cidr_allowlist or []),
948
+ allowed_domains=list(outbound_domain_allowlist or []),
931
949
  )
932
950
 
933
951
  async def _load(self: _Sandbox, resolver: Resolver, load_context: LoadContext, _existing_object_id: str | None):
@@ -972,6 +990,7 @@ class _Sandbox(_Object, type_prefix="sb"):
972
990
  name=name,
973
991
  include_oidc_identity_token=include_oidc_identity_token,
974
992
  inbound_cidr_allowlist=list(inbound_cidr_allowlist) if inbound_cidr_allowlist is not None else [],
993
+ i6pn_enabled=i6pn,
975
994
  volume_mounts=volume_mounts,
976
995
  cloud_bucket_mounts=cloud_bucket_mounts_to_proto(cloud_bucket_mounts),
977
996
  readiness_probe=(readiness_probe._to_proto() if readiness_probe else None),
@@ -402,7 +402,9 @@ class _Sandbox(modal._object._Object):
402
402
  region: typing.Union[str, collections.abc.Sequence[str], None] = None,
403
403
  block_network: bool = False,
404
404
  outbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
405
+ outbound_domain_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
405
406
  inbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
407
+ i6pn: bool = False,
406
408
  volumes: dict[
407
409
  typing.Union[str, os.PathLike],
408
410
  typing.Union[modal.volume._Volume, modal.cloud_bucket_mount._CloudBucketMount],
@@ -420,13 +422,20 @@ class _Sandbox(modal._object._Object):
420
422
  """Create a sandbox using the V2 backend.
421
423
 
422
424
  Supported features include exec, encrypted tunnels, wait/poll/terminate,
423
- CPU and memory configuration, region placement, volumes, cloud bucket mounts
424
- (with static credentials via `secret=...` or `oidc_auth_role_arn`), OIDC
425
- identity tokens, proxies, and filesystem snapshots.
425
+ CPU and memory configuration, region placement, private IPv6 networking
426
+ (i6pn), volumes, cloud bucket mounts (with static credentials via
427
+ `secret=...` or `oidc_auth_role_arn`), OIDC identity tokens, proxies, and
428
+ filesystem snapshots.
426
429
 
427
430
  Features like tags, memory snapshots, network file systems, GPUs, and custom
428
431
  domains are not supported.
429
432
 
433
+ Set `i6pn=True` to enable private IPv6 networking so sandboxes in the same
434
+ workspace can address each other directly at their `i6pn.modal.local`
435
+ address. i6pn only connects sandboxes co-located on the same routable
436
+ network, so pin every sandbox in the group to the same specific region
437
+ (e.g. `region="us-east-1"`).
438
+
430
439
  V2 sandboxes created with this method are not currently returned by
431
440
  `Sandbox.list()` and cannot be looked up with `Sandbox.from_name()`.
432
441
  Store `sandbox.object_id` if you need to retrieve the sandbox later, and
@@ -1625,7 +1634,9 @@ class Sandbox(modal.object.Object):
1625
1634
  region: typing.Union[str, collections.abc.Sequence[str], None] = None,
1626
1635
  block_network: bool = False,
1627
1636
  outbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
1637
+ outbound_domain_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
1628
1638
  inbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
1639
+ i6pn: bool = False,
1629
1640
  volumes: dict[
1630
1641
  typing.Union[str, os.PathLike],
1631
1642
  typing.Union[modal.volume.Volume, modal.cloud_bucket_mount.CloudBucketMount],
@@ -1643,13 +1654,20 @@ class Sandbox(modal.object.Object):
1643
1654
  """Create a sandbox using the V2 backend.
1644
1655
 
1645
1656
  Supported features include exec, encrypted tunnels, wait/poll/terminate,
1646
- CPU and memory configuration, region placement, volumes, cloud bucket mounts
1647
- (with static credentials via `secret=...` or `oidc_auth_role_arn`), OIDC
1648
- identity tokens, proxies, and filesystem snapshots.
1657
+ CPU and memory configuration, region placement, private IPv6 networking
1658
+ (i6pn), volumes, cloud bucket mounts (with static credentials via
1659
+ `secret=...` or `oidc_auth_role_arn`), OIDC identity tokens, proxies, and
1660
+ filesystem snapshots.
1649
1661
 
1650
1662
  Features like tags, memory snapshots, network file systems, GPUs, and custom
1651
1663
  domains are not supported.
1652
1664
 
1665
+ Set `i6pn=True` to enable private IPv6 networking so sandboxes in the same
1666
+ workspace can address each other directly at their `i6pn.modal.local`
1667
+ address. i6pn only connects sandboxes co-located on the same routable
1668
+ network, so pin every sandbox in the group to the same specific region
1669
+ (e.g. `region="us-east-1"`).
1670
+
1653
1671
  V2 sandboxes created with this method are not currently returned by
1654
1672
  `Sandbox.list()` and cannot be looked up with `Sandbox.from_name()`.
1655
1673
  Store `sandbox.object_id` if you need to retrieve the sandbox later, and
@@ -1675,7 +1693,9 @@ class Sandbox(modal.object.Object):
1675
1693
  region: typing.Union[str, collections.abc.Sequence[str], None] = None,
1676
1694
  block_network: bool = False,
1677
1695
  outbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
1696
+ outbound_domain_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
1678
1697
  inbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
1698
+ i6pn: bool = False,
1679
1699
  volumes: dict[
1680
1700
  typing.Union[str, os.PathLike],
1681
1701
  typing.Union[modal.volume.Volume, modal.cloud_bucket_mount.CloudBucketMount],
@@ -1693,13 +1713,20 @@ class Sandbox(modal.object.Object):
1693
1713
  """Create a sandbox using the V2 backend.
1694
1714
 
1695
1715
  Supported features include exec, encrypted tunnels, wait/poll/terminate,
1696
- CPU and memory configuration, region placement, volumes, cloud bucket mounts
1697
- (with static credentials via `secret=...` or `oidc_auth_role_arn`), OIDC
1698
- identity tokens, proxies, and filesystem snapshots.
1716
+ CPU and memory configuration, region placement, private IPv6 networking
1717
+ (i6pn), volumes, cloud bucket mounts (with static credentials via
1718
+ `secret=...` or `oidc_auth_role_arn`), OIDC identity tokens, proxies, and
1719
+ filesystem snapshots.
1699
1720
 
1700
1721
  Features like tags, memory snapshots, network file systems, GPUs, and custom
1701
1722
  domains are not supported.
1702
1723
 
1724
+ Set `i6pn=True` to enable private IPv6 networking so sandboxes in the same
1725
+ workspace can address each other directly at their `i6pn.modal.local`
1726
+ address. i6pn only connects sandboxes co-located on the same routable
1727
+ network, so pin every sandbox in the group to the same specific region
1728
+ (e.g. `region="us-east-1"`).
1729
+
1703
1730
  V2 sandboxes created with this method are not currently returned by
1704
1731
  `Sandbox.list()` and cannot be looked up with `Sandbox.from_name()`.
1705
1732
  Store `sandbox.object_id` if you need to retrieve the sandbox later, and
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.2.dev0
3
+ Version: 1.5.2.dev1
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0