modal 1.4.2.dev12__tar.gz → 1.4.2.dev14__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 (209) hide show
  1. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/PKG-INFO +1 -1
  2. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/task_command_router_client.py +3 -0
  3. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/client.pyi +2 -2
  4. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/sandbox.py +41 -9
  5. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/sandbox.pyi +3 -0
  6. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal.egg-info/PKG-INFO +1 -1
  7. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_proto/api_grpc.py +80 -0
  8. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_proto/api_pb2.py +863 -749
  9. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_proto/api_pb2.pyi +273 -0
  10. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_proto/api_pb2_grpc.py +166 -0
  11. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_proto/api_pb2_grpc.pyi +52 -0
  12. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_proto/modal_api_grpc.py +5 -0
  13. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_version/__init__.py +1 -1
  14. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/LICENSE +0 -0
  15. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/README.md +0 -0
  16. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/__init__.py +0 -0
  17. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/__main__.py +0 -0
  18. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_billing.py +0 -0
  19. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_clustered_functions.py +0 -0
  20. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_clustered_functions.pyi +0 -0
  21. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_container_entrypoint.py +0 -0
  22. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_functions.py +0 -0
  23. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_grpc_client.py +0 -0
  24. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_ipython.py +0 -0
  25. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_load_context.py +0 -0
  26. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_location.py +0 -0
  27. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_logs.py +0 -0
  28. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_object.py +0 -0
  29. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_output/__init__.py +0 -0
  30. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_output/manager.py +0 -0
  31. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_output/pty.py +0 -0
  32. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_output/rich.py +0 -0
  33. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_output/status.py +0 -0
  34. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_partial_function.py +0 -0
  35. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_resolver.py +0 -0
  36. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_resources.py +0 -0
  37. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_runtime/__init__.py +0 -0
  38. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_runtime/asgi.py +0 -0
  39. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_runtime/container_io_manager.py +0 -0
  40. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_runtime/container_io_manager.pyi +0 -0
  41. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_runtime/execution_context.py +0 -0
  42. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_runtime/execution_context.pyi +0 -0
  43. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  44. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_runtime/telemetry.py +0 -0
  45. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_runtime/user_code_event_loop.py +0 -0
  46. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_runtime/user_code_imports.py +0 -0
  47. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_serialization.py +0 -0
  48. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_server.py +0 -0
  49. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_traceback.py +0 -0
  50. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_tunnel.py +0 -0
  51. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_tunnel.pyi +0 -0
  52. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_type_manager.py +0 -0
  53. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/__init__.py +0 -0
  54. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/app_utils.py +0 -0
  55. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/async_utils.py +0 -0
  56. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/auth_token_manager.py +0 -0
  57. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/blob_utils.py +0 -0
  58. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/browser_utils.py +0 -0
  59. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/bytes_io_segment_payload.py +0 -0
  60. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/deprecation.py +0 -0
  61. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/docker_utils.py +0 -0
  62. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/function_utils.py +0 -0
  63. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/git_utils.py +0 -0
  64. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/grpc_testing.py +0 -0
  65. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/grpc_utils.py +0 -0
  66. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/hash_utils.py +0 -0
  67. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/http_utils.py +0 -0
  68. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/jwt_utils.py +0 -0
  69. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/logger.py +0 -0
  70. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/mount_utils.py +0 -0
  71. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/name_utils.py +0 -0
  72. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/package_utils.py +0 -0
  73. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/pattern_utils.py +0 -0
  74. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/rand_pb_testing.py +0 -0
  75. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/sandbox_fs_utils.py +0 -0
  76. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/shell_utils.py +0 -0
  77. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_utils/time_utils.py +0 -0
  78. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_vendor/__init__.py +0 -0
  79. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  80. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_vendor/cloudpickle.py +0 -0
  81. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_vendor/tblib.py +0 -0
  82. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_vendor/version.py +0 -0
  83. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/_watcher.py +0 -0
  84. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/app.py +0 -0
  85. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/app.pyi +0 -0
  86. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/billing.py +0 -0
  87. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/builder/2023.12.312.txt +0 -0
  88. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/builder/2023.12.txt +0 -0
  89. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/builder/2024.04.txt +0 -0
  90. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/builder/2024.10.txt +0 -0
  91. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/builder/2025.06.txt +0 -0
  92. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/builder/PREVIEW.txt +0 -0
  93. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/builder/README.md +0 -0
  94. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/builder/base-images.json +0 -0
  95. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/call_graph.py +0 -0
  96. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/__init__.py +0 -0
  97. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/_download.py +0 -0
  98. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/_traceback.py +0 -0
  99. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/app.py +0 -0
  100. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/billing.py +0 -0
  101. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/changelog.py +0 -0
  102. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/cluster.py +0 -0
  103. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/config.py +0 -0
  104. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/container.py +0 -0
  105. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/dashboard.py +0 -0
  106. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/dict.py +0 -0
  107. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/entry_point.py +0 -0
  108. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/environment.py +0 -0
  109. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/import_refs.py +0 -0
  110. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/launch.py +0 -0
  111. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/network_file_system.py +0 -0
  112. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/profile.py +0 -0
  113. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/programs/__init__.py +0 -0
  114. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/programs/run_jupyter.py +0 -0
  115. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/programs/vscode.py +0 -0
  116. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/queues.py +0 -0
  117. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/run.py +0 -0
  118. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/secret.py +0 -0
  119. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/selector.py +0 -0
  120. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/shell.py +0 -0
  121. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/token.py +0 -0
  122. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/utils.py +0 -0
  123. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cli/volume.py +0 -0
  124. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/client.py +0 -0
  125. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cloud_bucket_mount.py +0 -0
  126. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cloud_bucket_mount.pyi +0 -0
  127. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cls.py +0 -0
  128. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/cls.pyi +0 -0
  129. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/config.py +0 -0
  130. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/container_process.py +0 -0
  131. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/container_process.pyi +0 -0
  132. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/dict.py +0 -0
  133. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/dict.pyi +0 -0
  134. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/environments.py +0 -0
  135. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/environments.pyi +0 -0
  136. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/exception.py +0 -0
  137. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/experimental/__init__.py +0 -0
  138. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/experimental/flash.py +0 -0
  139. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/experimental/flash.pyi +0 -0
  140. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/experimental/ipython.py +0 -0
  141. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/file_io.py +0 -0
  142. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/file_io.pyi +0 -0
  143. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/file_pattern_matcher.py +0 -0
  144. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/functions.py +0 -0
  145. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/functions.pyi +0 -0
  146. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/image.py +0 -0
  147. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/image.pyi +0 -0
  148. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/io_streams.py +0 -0
  149. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/io_streams.pyi +0 -0
  150. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/mount.py +0 -0
  151. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/mount.pyi +0 -0
  152. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/network_file_system.py +0 -0
  153. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/network_file_system.pyi +0 -0
  154. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/object.py +0 -0
  155. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/object.pyi +0 -0
  156. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/output.py +0 -0
  157. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/parallel_map.py +0 -0
  158. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/parallel_map.pyi +0 -0
  159. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/partial_function.py +0 -0
  160. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/partial_function.pyi +0 -0
  161. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/proxy.py +0 -0
  162. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/proxy.pyi +0 -0
  163. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/py.typed +0 -0
  164. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/queue.py +0 -0
  165. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/queue.pyi +0 -0
  166. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/retries.py +0 -0
  167. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/runner.py +0 -0
  168. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/runner.pyi +0 -0
  169. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/running_app.py +0 -0
  170. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/sandbox_fs.py +0 -0
  171. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/sandbox_fs.pyi +0 -0
  172. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/schedule.py +0 -0
  173. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/scheduler_placement.py +0 -0
  174. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/secret.py +0 -0
  175. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/secret.pyi +0 -0
  176. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/server.py +0 -0
  177. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/server.pyi +0 -0
  178. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/serving.py +0 -0
  179. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/serving.pyi +0 -0
  180. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/snapshot.py +0 -0
  181. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/snapshot.pyi +0 -0
  182. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/stream_type.py +0 -0
  183. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/token_flow.py +0 -0
  184. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/token_flow.pyi +0 -0
  185. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/volume.py +0 -0
  186. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal/volume.pyi +0 -0
  187. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal.egg-info/SOURCES.txt +0 -0
  188. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal.egg-info/dependency_links.txt +0 -0
  189. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal.egg-info/entry_points.txt +0 -0
  190. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal.egg-info/requires.txt +0 -0
  191. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal.egg-info/top_level.txt +0 -0
  192. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_docs/__init__.py +0 -0
  193. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_docs/gen_cli_docs.py +0 -0
  194. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_docs/gen_cli_docs_main.py +0 -0
  195. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_docs/gen_reference_docs.py +0 -0
  196. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_docs/gen_reference_docs_main.py +0 -0
  197. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_docs/mdmd/__init__.py +0 -0
  198. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_docs/mdmd/mdmd.py +0 -0
  199. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_docs/mdmd/signatures.py +0 -0
  200. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_proto/__init__.py +0 -0
  201. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_proto/py.typed +0 -0
  202. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_proto/task_command_router_grpc.py +0 -0
  203. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_proto/task_command_router_pb2.py +0 -0
  204. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_proto/task_command_router_pb2.pyi +0 -0
  205. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  206. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  207. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/modal_version/__main__.py +0 -0
  208. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/pyproject.toml +0 -0
  209. {modal-1.4.2.dev12 → modal-1.4.2.dev14}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.4.2.dev12
3
+ Version: 1.4.2.dev14
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -126,8 +126,11 @@ async def fetch_command_router_access_v2(
126
126
  server_client, sandbox_id: str
127
127
  ) -> api_pb2.SandboxGetCommandRouterAccessResponse:
128
128
  """Fetch direct command router access info from Modal server for a V2 sandbox."""
129
+ assert server_client._auth_token_manager
130
+ auth_token = await server_client._auth_token_manager.get_token()
129
131
  return await server_client.stub.SandboxGetCommandRouterAccess(
130
132
  api_pb2.SandboxGetCommandRouterAccessRequest(sandbox_id=sandbox_id),
133
+ metadata=[("x-modal-auth-token", auth_token)],
131
134
  )
132
135
 
133
136
 
@@ -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.4.2.dev12",
38
+ version: str = "1.4.2.dev14",
39
39
  ):
40
40
  """mdmd:hidden
41
41
  The Modal client object is not intended to be instantiated directly by users.
@@ -175,7 +175,7 @@ class Client:
175
175
  server_url: str,
176
176
  client_type: int,
177
177
  credentials: typing.Optional[tuple[str, str]],
178
- version: str = "1.4.2.dev12",
178
+ version: str = "1.4.2.dev14",
179
179
  ):
180
180
  """mdmd:hidden
181
181
  The Modal client object is not intended to be instantiated directly by users.
@@ -1045,7 +1045,12 @@ class _Sandbox(_Object, type_prefix="sb"):
1045
1045
  req = api_pb2.SandboxWaitRequest(sandbox_id=self.object_id, timeout=10)
1046
1046
  # Use the private __client to allow `wait` to work with a detached sandbox
1047
1047
  stub = self.__client.stub
1048
- resp = await (stub.SandboxWaitV2(req) if self._is_v2 else stub.SandboxWait(req))
1048
+ if self._is_v2:
1049
+ assert self.__client._auth_token_manager
1050
+ auth_token = await self.__client._auth_token_manager.get_token()
1051
+ resp = await stub.SandboxWaitV2(req, metadata=[("x-modal-auth-token", auth_token)])
1052
+ else:
1053
+ resp = await stub.SandboxWait(req)
1049
1054
  if resp.result.status:
1050
1055
  logger.debug(f"Sandbox {self.object_id} wait completed with status {resp.result.status}")
1051
1056
  self._result = resp.result
@@ -1105,7 +1110,12 @@ class _Sandbox(_Object, type_prefix="sb"):
1105
1110
 
1106
1111
  req = api_pb2.SandboxGetTunnelsRequest(sandbox_id=self.object_id, timeout=timeout)
1107
1112
  stub = self._client.stub
1108
- resp = await (stub.SandboxGetTunnelsV2(req) if self._is_v2 else stub.SandboxGetTunnels(req))
1113
+ if self._is_v2:
1114
+ assert self._client._auth_token_manager
1115
+ auth_token = await self._client._auth_token_manager.get_token()
1116
+ resp = await stub.SandboxGetTunnelsV2(req, metadata=[("x-modal-auth-token", auth_token)])
1117
+ else:
1118
+ resp = await stub.SandboxGetTunnels(req)
1109
1119
 
1110
1120
  # If we couldn't get the tunnels in time, report the timeout.
1111
1121
  if resp.result.status == api_pb2.GenericResult.GENERIC_STATUS_TIMEOUT:
@@ -1174,7 +1184,12 @@ class _Sandbox(_Object, type_prefix="sb"):
1174
1184
  This is a no-op if the Sandbox has already finished running."""
1175
1185
  req = api_pb2.SandboxTerminateRequest(sandbox_id=self.object_id)
1176
1186
  stub = self._client.stub
1177
- await (stub.SandboxTerminateV2(req) if self._is_v2 else stub.SandboxTerminate(req))
1187
+ if self._is_v2:
1188
+ assert self._client._auth_token_manager
1189
+ auth_token = await self._client._auth_token_manager.get_token()
1190
+ await stub.SandboxTerminateV2(req, metadata=[("x-modal-auth-token", auth_token)])
1191
+ else:
1192
+ await stub.SandboxTerminate(req)
1178
1193
  if wait:
1179
1194
  await self.wait(raise_on_termination=False)
1180
1195
  return self.returncode
@@ -1187,7 +1202,12 @@ class _Sandbox(_Object, type_prefix="sb"):
1187
1202
 
1188
1203
  req = api_pb2.SandboxWaitRequest(sandbox_id=self.object_id, timeout=0)
1189
1204
  stub = self._client.stub
1190
- resp = await (stub.SandboxWaitV2(req) if self._is_v2 else stub.SandboxWait(req))
1205
+ if self._is_v2:
1206
+ assert self._client._auth_token_manager
1207
+ auth_token = await self._client._auth_token_manager.get_token()
1208
+ resp = await stub.SandboxWaitV2(req, metadata=[("x-modal-auth-token", auth_token)])
1209
+ else:
1210
+ resp = await stub.SandboxWait(req)
1191
1211
 
1192
1212
  if resp.result.status:
1193
1213
  self._result = resp.result
@@ -1198,7 +1218,12 @@ class _Sandbox(_Object, type_prefix="sb"):
1198
1218
  while not self._task_id:
1199
1219
  req = api_pb2.SandboxGetTaskIdRequest(sandbox_id=self.object_id)
1200
1220
  stub = self._client.stub
1201
- resp = await (stub.SandboxGetTaskIdV2(req) if self._is_v2 else stub.SandboxGetTaskId(req))
1221
+ if self._is_v2:
1222
+ assert self._client._auth_token_manager
1223
+ auth_token = await self._client._auth_token_manager.get_token()
1224
+ resp = await stub.SandboxGetTaskIdV2(req, metadata=[("x-modal-auth-token", auth_token)])
1225
+ else:
1226
+ resp = await stub.SandboxGetTaskId(req)
1202
1227
  if not resp.task_id and raise_if_task_complete and resp.HasField("task_result"):
1203
1228
  msg = resp.task_result.exception or "Sandbox already finished"
1204
1229
  raise Error(msg)
@@ -1338,11 +1363,10 @@ class _Sandbox(_Object, type_prefix="sb"):
1338
1363
  raise InvalidError(f"workdir must be an absolute path, got: {workdir}")
1339
1364
  _validate_exec_args(args)
1340
1365
 
1341
- secrets = secrets or []
1342
- if env:
1343
- secrets = [*secrets, _Secret.from_dict(env)]
1366
+ secrets = list(secrets or [])
1367
+ env_dict = {k: v for k, v in (env or {}).items() if v is not None}
1344
1368
 
1345
- # Force secret resolution so we can pass the secret IDs to the backend.
1369
+ # Force explicit secret resolution so we can pass the secret IDs to the backend.
1346
1370
  secret_coros = [secret.hydrate(client=self._client) for secret in secrets]
1347
1371
  await TaskContext.gather(*secret_coros)
1348
1372
 
@@ -1355,6 +1379,7 @@ class _Sandbox(_Object, type_prefix="sb"):
1355
1379
  "timeout": timeout,
1356
1380
  "workdir": workdir,
1357
1381
  "secret_ids": [secret.object_id for secret in secrets],
1382
+ "env": env_dict,
1358
1383
  "text": text,
1359
1384
  "bufsize": bufsize,
1360
1385
  "runtime_debug": config.get("function_runtime_debug"),
@@ -1366,6 +1391,11 @@ class _Sandbox(_Object, type_prefix="sb"):
1366
1391
  kwargs["command_router_client"] = command_router_client
1367
1392
  return await self._exec_through_command_router(*args, **kwargs)
1368
1393
  else:
1394
+ if env_dict:
1395
+ env_secret = _Secret.from_dict(env)
1396
+ await env_secret.hydrate(client=self._client)
1397
+ kwargs["secret_ids"] = [*kwargs["secret_ids"], env_secret.object_id]
1398
+ kwargs.pop("env", None)
1369
1399
  return await self._exec_through_server(*args, **kwargs)
1370
1400
 
1371
1401
  async def _exec_through_server(
@@ -1421,6 +1451,7 @@ class _Sandbox(_Object, type_prefix="sb"):
1421
1451
  timeout: Optional[int] = None,
1422
1452
  workdir: Optional[str] = None,
1423
1453
  secret_ids: Optional[Collection[str]] = None,
1454
+ env: Optional[dict[str, str]] = None,
1424
1455
  text: bool = True,
1425
1456
  bufsize: Literal[-1, 1] = -1,
1426
1457
  runtime_debug: bool = False,
@@ -1463,6 +1494,7 @@ class _Sandbox(_Object, type_prefix="sb"):
1463
1494
  pty_info=pty_info,
1464
1495
  runtime_debug=runtime_debug,
1465
1496
  container_id=container_id or "",
1497
+ env=env or {},
1466
1498
  )
1467
1499
  _ = await command_router_client.exec_start(start_req)
1468
1500
 
@@ -584,6 +584,7 @@ class _Sandbox(modal._object._Object):
584
584
  timeout: typing.Optional[int] = None,
585
585
  workdir: typing.Optional[str] = None,
586
586
  secret_ids: typing.Optional[collections.abc.Collection[str]] = None,
587
+ env: typing.Optional[dict[str, str]] = None,
587
588
  text: bool = True,
588
589
  bufsize: typing.Literal[-1, 1] = -1,
589
590
  runtime_debug: bool = False,
@@ -1814,6 +1815,7 @@ class Sandbox(modal.object.Object):
1814
1815
  timeout: typing.Optional[int] = None,
1815
1816
  workdir: typing.Optional[str] = None,
1816
1817
  secret_ids: typing.Optional[collections.abc.Collection[str]] = None,
1818
+ env: typing.Optional[dict[str, str]] = None,
1817
1819
  text: bool = True,
1818
1820
  bufsize: typing.Literal[-1, 1] = -1,
1819
1821
  runtime_debug: bool = False,
@@ -1836,6 +1838,7 @@ class Sandbox(modal.object.Object):
1836
1838
  timeout: typing.Optional[int] = None,
1837
1839
  workdir: typing.Optional[str] = None,
1838
1840
  secret_ids: typing.Optional[collections.abc.Collection[str]] = None,
1841
+ env: typing.Optional[dict[str, str]] = None,
1839
1842
  text: bool = True,
1840
1843
  bufsize: typing.Literal[-1, 1] = -1,
1841
1844
  runtime_debug: bool = False,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.4.2.dev12
3
+ Version: 1.4.2.dev14
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -267,6 +267,10 @@ class ModalClientBase(abc.ABC):
267
267
  async def EnvironmentDelete(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.EnvironmentDeleteRequest, google.protobuf.empty_pb2.Empty]') -> None:
268
268
  pass
269
269
 
270
+ @abc.abstractmethod
271
+ async def EnvironmentGetManaged(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.EnvironmentGetManagedRequest, modal_proto.api_pb2.EnvironmentGetManagedResponse]') -> None:
272
+ pass
273
+
270
274
  @abc.abstractmethod
271
275
  async def EnvironmentGetOrCreate(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.EnvironmentGetOrCreateRequest, modal_proto.api_pb2.EnvironmentGetOrCreateResponse]') -> None:
272
276
  pass
@@ -275,6 +279,14 @@ class ModalClientBase(abc.ABC):
275
279
  async def EnvironmentList(self, stream: 'grpclib.server.Stream[google.protobuf.empty_pb2.Empty, modal_proto.api_pb2.EnvironmentListResponse]') -> None:
276
280
  pass
277
281
 
282
+ @abc.abstractmethod
283
+ async def EnvironmentRoleSet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.EnvironmentRoleSetRequest, google.protobuf.empty_pb2.Empty]') -> None:
284
+ pass
285
+
286
+ @abc.abstractmethod
287
+ async def EnvironmentSetManaged(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.EnvironmentSetManagedRequest, google.protobuf.empty_pb2.Empty]') -> None:
288
+ pass
289
+
278
290
  @abc.abstractmethod
279
291
  async def EnvironmentUpdate(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.EnvironmentUpdateRequest, modal_proto.api_pb2.EnvironmentListItem]') -> None:
280
292
  pass
@@ -623,6 +635,10 @@ class ModalClientBase(abc.ABC):
623
635
  async def SecretUpdate(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SecretUpdateRequest, google.protobuf.empty_pb2.Empty]') -> None:
624
636
  pass
625
637
 
638
+ @abc.abstractmethod
639
+ async def ServiceUserList(self, stream: 'grpclib.server.Stream[google.protobuf.empty_pb2.Empty, modal_proto.api_pb2.ServiceUserListResponse]') -> None:
640
+ pass
641
+
626
642
  @abc.abstractmethod
627
643
  async def SharedVolumeDelete(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SharedVolumeDeleteRequest, google.protobuf.empty_pb2.Empty]') -> None:
628
644
  pass
@@ -787,6 +803,10 @@ class ModalClientBase(abc.ABC):
787
803
  async def WorkspaceDashboardUrlGet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.WorkspaceDashboardUrlRequest, modal_proto.api_pb2.WorkspaceDashboardUrlResponse]') -> None:
788
804
  pass
789
805
 
806
+ @abc.abstractmethod
807
+ async def WorkspaceMembersList(self, stream: 'grpclib.server.Stream[google.protobuf.empty_pb2.Empty, modal_proto.api_pb2.WorkspaceMembersListResponse]') -> None:
808
+ pass
809
+
790
810
  @abc.abstractmethod
791
811
  async def WorkspaceNameLookup(self, stream: 'grpclib.server.Stream[google.protobuf.empty_pb2.Empty, modal_proto.api_pb2.WorkspaceNameLookupResponse]') -> None:
792
812
  pass
@@ -1165,6 +1185,12 @@ class ModalClientBase(abc.ABC):
1165
1185
  modal_proto.api_pb2.EnvironmentDeleteRequest,
1166
1186
  google.protobuf.empty_pb2.Empty,
1167
1187
  ),
1188
+ '/modal.client.ModalClient/EnvironmentGetManaged': grpclib.const.Handler(
1189
+ self.EnvironmentGetManaged,
1190
+ grpclib.const.Cardinality.UNARY_UNARY,
1191
+ modal_proto.api_pb2.EnvironmentGetManagedRequest,
1192
+ modal_proto.api_pb2.EnvironmentGetManagedResponse,
1193
+ ),
1168
1194
  '/modal.client.ModalClient/EnvironmentGetOrCreate': grpclib.const.Handler(
1169
1195
  self.EnvironmentGetOrCreate,
1170
1196
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1177,6 +1203,18 @@ class ModalClientBase(abc.ABC):
1177
1203
  google.protobuf.empty_pb2.Empty,
1178
1204
  modal_proto.api_pb2.EnvironmentListResponse,
1179
1205
  ),
1206
+ '/modal.client.ModalClient/EnvironmentRoleSet': grpclib.const.Handler(
1207
+ self.EnvironmentRoleSet,
1208
+ grpclib.const.Cardinality.UNARY_UNARY,
1209
+ modal_proto.api_pb2.EnvironmentRoleSetRequest,
1210
+ google.protobuf.empty_pb2.Empty,
1211
+ ),
1212
+ '/modal.client.ModalClient/EnvironmentSetManaged': grpclib.const.Handler(
1213
+ self.EnvironmentSetManaged,
1214
+ grpclib.const.Cardinality.UNARY_UNARY,
1215
+ modal_proto.api_pb2.EnvironmentSetManagedRequest,
1216
+ google.protobuf.empty_pb2.Empty,
1217
+ ),
1180
1218
  '/modal.client.ModalClient/EnvironmentUpdate': grpclib.const.Handler(
1181
1219
  self.EnvironmentUpdate,
1182
1220
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1699,6 +1737,12 @@ class ModalClientBase(abc.ABC):
1699
1737
  modal_proto.api_pb2.SecretUpdateRequest,
1700
1738
  google.protobuf.empty_pb2.Empty,
1701
1739
  ),
1740
+ '/modal.client.ModalClient/ServiceUserList': grpclib.const.Handler(
1741
+ self.ServiceUserList,
1742
+ grpclib.const.Cardinality.UNARY_UNARY,
1743
+ google.protobuf.empty_pb2.Empty,
1744
+ modal_proto.api_pb2.ServiceUserListResponse,
1745
+ ),
1702
1746
  '/modal.client.ModalClient/SharedVolumeDelete': grpclib.const.Handler(
1703
1747
  self.SharedVolumeDelete,
1704
1748
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1945,6 +1989,12 @@ class ModalClientBase(abc.ABC):
1945
1989
  modal_proto.api_pb2.WorkspaceDashboardUrlRequest,
1946
1990
  modal_proto.api_pb2.WorkspaceDashboardUrlResponse,
1947
1991
  ),
1992
+ '/modal.client.ModalClient/WorkspaceMembersList': grpclib.const.Handler(
1993
+ self.WorkspaceMembersList,
1994
+ grpclib.const.Cardinality.UNARY_UNARY,
1995
+ google.protobuf.empty_pb2.Empty,
1996
+ modal_proto.api_pb2.WorkspaceMembersListResponse,
1997
+ ),
1948
1998
  '/modal.client.ModalClient/WorkspaceNameLookup': grpclib.const.Handler(
1949
1999
  self.WorkspaceNameLookup,
1950
2000
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -2329,6 +2379,12 @@ class ModalClientStub:
2329
2379
  modal_proto.api_pb2.EnvironmentDeleteRequest,
2330
2380
  google.protobuf.empty_pb2.Empty,
2331
2381
  )
2382
+ self.EnvironmentGetManaged = grpclib.client.UnaryUnaryMethod(
2383
+ channel,
2384
+ '/modal.client.ModalClient/EnvironmentGetManaged',
2385
+ modal_proto.api_pb2.EnvironmentGetManagedRequest,
2386
+ modal_proto.api_pb2.EnvironmentGetManagedResponse,
2387
+ )
2332
2388
  self.EnvironmentGetOrCreate = grpclib.client.UnaryUnaryMethod(
2333
2389
  channel,
2334
2390
  '/modal.client.ModalClient/EnvironmentGetOrCreate',
@@ -2341,6 +2397,18 @@ class ModalClientStub:
2341
2397
  google.protobuf.empty_pb2.Empty,
2342
2398
  modal_proto.api_pb2.EnvironmentListResponse,
2343
2399
  )
2400
+ self.EnvironmentRoleSet = grpclib.client.UnaryUnaryMethod(
2401
+ channel,
2402
+ '/modal.client.ModalClient/EnvironmentRoleSet',
2403
+ modal_proto.api_pb2.EnvironmentRoleSetRequest,
2404
+ google.protobuf.empty_pb2.Empty,
2405
+ )
2406
+ self.EnvironmentSetManaged = grpclib.client.UnaryUnaryMethod(
2407
+ channel,
2408
+ '/modal.client.ModalClient/EnvironmentSetManaged',
2409
+ modal_proto.api_pb2.EnvironmentSetManagedRequest,
2410
+ google.protobuf.empty_pb2.Empty,
2411
+ )
2344
2412
  self.EnvironmentUpdate = grpclib.client.UnaryUnaryMethod(
2345
2413
  channel,
2346
2414
  '/modal.client.ModalClient/EnvironmentUpdate',
@@ -2863,6 +2931,12 @@ class ModalClientStub:
2863
2931
  modal_proto.api_pb2.SecretUpdateRequest,
2864
2932
  google.protobuf.empty_pb2.Empty,
2865
2933
  )
2934
+ self.ServiceUserList = grpclib.client.UnaryUnaryMethod(
2935
+ channel,
2936
+ '/modal.client.ModalClient/ServiceUserList',
2937
+ google.protobuf.empty_pb2.Empty,
2938
+ modal_proto.api_pb2.ServiceUserListResponse,
2939
+ )
2866
2940
  self.SharedVolumeDelete = grpclib.client.UnaryUnaryMethod(
2867
2941
  channel,
2868
2942
  '/modal.client.ModalClient/SharedVolumeDelete',
@@ -3109,6 +3183,12 @@ class ModalClientStub:
3109
3183
  modal_proto.api_pb2.WorkspaceDashboardUrlRequest,
3110
3184
  modal_proto.api_pb2.WorkspaceDashboardUrlResponse,
3111
3185
  )
3186
+ self.WorkspaceMembersList = grpclib.client.UnaryUnaryMethod(
3187
+ channel,
3188
+ '/modal.client.ModalClient/WorkspaceMembersList',
3189
+ google.protobuf.empty_pb2.Empty,
3190
+ modal_proto.api_pb2.WorkspaceMembersListResponse,
3191
+ )
3112
3192
  self.WorkspaceNameLookup = grpclib.client.UnaryUnaryMethod(
3113
3193
  channel,
3114
3194
  '/modal.client.ModalClient/WorkspaceNameLookup',