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