modal 1.4.1.dev3__tar.gz → 1.4.1.dev5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/PKG-INFO +2 -2
  2. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/task_command_router_client.py +5 -1
  3. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/import_refs.py +13 -4
  4. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/shell.py +5 -1
  5. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/client.py +1 -2
  6. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/client.pyi +2 -2
  7. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/dict.py +2 -1
  8. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/dict.pyi +4 -2
  9. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/queue.py +2 -1
  10. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/queue.pyi +4 -2
  11. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/secret.py +2 -1
  12. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/secret.pyi +4 -2
  13. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/volume.py +2 -1
  14. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/volume.pyi +4 -2
  15. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal.egg-info/PKG-INFO +2 -2
  16. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal.egg-info/requires.txt +1 -1
  17. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/api_grpc.py +16 -0
  18. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/api_pb2.py +375 -355
  19. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/api_pb2.pyi +35 -0
  20. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/api_pb2_grpc.py +33 -0
  21. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/api_pb2_grpc.pyi +10 -0
  22. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/modal_api_grpc.py +1 -0
  23. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/task_command_router_pb2.py +43 -30
  24. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/task_command_router_pb2.pyi +21 -1
  25. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_version/__init__.py +1 -1
  26. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/pyproject.toml +2 -2
  27. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/LICENSE +0 -0
  28. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/README.md +0 -0
  29. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/__init__.py +0 -0
  30. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/__main__.py +0 -0
  31. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_billing.py +0 -0
  32. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_clustered_functions.py +0 -0
  33. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_clustered_functions.pyi +0 -0
  34. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_container_entrypoint.py +0 -0
  35. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_functions.py +0 -0
  36. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_grpc_client.py +0 -0
  37. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_ipython.py +0 -0
  38. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_load_context.py +0 -0
  39. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_location.py +0 -0
  40. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_logs.py +0 -0
  41. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_object.py +0 -0
  42. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_output/__init__.py +0 -0
  43. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_output/manager.py +0 -0
  44. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_output/pty.py +0 -0
  45. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_output/rich.py +0 -0
  46. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_output/status.py +0 -0
  47. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_partial_function.py +0 -0
  48. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_resolver.py +0 -0
  49. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_resources.py +0 -0
  50. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/__init__.py +0 -0
  51. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/asgi.py +0 -0
  52. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/container_io_manager.py +0 -0
  53. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/container_io_manager.pyi +0 -0
  54. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/execution_context.py +0 -0
  55. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/execution_context.pyi +0 -0
  56. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  57. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/telemetry.py +0 -0
  58. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/user_code_event_loop.py +0 -0
  59. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_runtime/user_code_imports.py +0 -0
  60. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_serialization.py +0 -0
  61. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_server.py +0 -0
  62. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_traceback.py +0 -0
  63. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_tunnel.py +0 -0
  64. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_tunnel.pyi +0 -0
  65. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_type_manager.py +0 -0
  66. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/__init__.py +0 -0
  67. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/app_utils.py +0 -0
  68. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/async_utils.py +0 -0
  69. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/auth_token_manager.py +0 -0
  70. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/blob_utils.py +0 -0
  71. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/browser_utils.py +0 -0
  72. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/bytes_io_segment_payload.py +0 -0
  73. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/deprecation.py +0 -0
  74. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/docker_utils.py +0 -0
  75. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/function_utils.py +0 -0
  76. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/git_utils.py +0 -0
  77. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/grpc_testing.py +0 -0
  78. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/grpc_utils.py +0 -0
  79. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/hash_utils.py +0 -0
  80. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/http_utils.py +0 -0
  81. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/jwt_utils.py +0 -0
  82. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/logger.py +0 -0
  83. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/mount_utils.py +0 -0
  84. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/name_utils.py +0 -0
  85. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/package_utils.py +0 -0
  86. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/pattern_utils.py +0 -0
  87. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/rand_pb_testing.py +0 -0
  88. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/sandbox_fs_utils.py +0 -0
  89. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/shell_utils.py +0 -0
  90. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_utils/time_utils.py +0 -0
  91. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_vendor/__init__.py +0 -0
  92. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  93. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_vendor/cloudpickle.py +0 -0
  94. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_vendor/tblib.py +0 -0
  95. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_vendor/version.py +0 -0
  96. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/_watcher.py +0 -0
  97. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/app.py +0 -0
  98. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/app.pyi +0 -0
  99. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/billing.py +0 -0
  100. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/2023.12.312.txt +0 -0
  101. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/2023.12.txt +0 -0
  102. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/2024.04.txt +0 -0
  103. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/2024.10.txt +0 -0
  104. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/2025.06.txt +0 -0
  105. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/PREVIEW.txt +0 -0
  106. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/README.md +0 -0
  107. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/builder/base-images.json +0 -0
  108. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/call_graph.py +0 -0
  109. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/__init__.py +0 -0
  110. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/_download.py +0 -0
  111. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/_traceback.py +0 -0
  112. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/app.py +0 -0
  113. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/billing.py +0 -0
  114. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/changelog.py +0 -0
  115. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/cluster.py +0 -0
  116. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/config.py +0 -0
  117. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/container.py +0 -0
  118. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/dashboard.py +0 -0
  119. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/dict.py +0 -0
  120. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/entry_point.py +0 -0
  121. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/environment.py +0 -0
  122. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/launch.py +0 -0
  123. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/network_file_system.py +0 -0
  124. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/profile.py +0 -0
  125. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/programs/__init__.py +0 -0
  126. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/programs/run_jupyter.py +0 -0
  127. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/programs/vscode.py +0 -0
  128. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/queues.py +0 -0
  129. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/run.py +0 -0
  130. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/secret.py +0 -0
  131. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/selector.py +0 -0
  132. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/token.py +0 -0
  133. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/utils.py +0 -0
  134. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cli/volume.py +0 -0
  135. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cloud_bucket_mount.py +0 -0
  136. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cloud_bucket_mount.pyi +0 -0
  137. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cls.py +0 -0
  138. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/cls.pyi +0 -0
  139. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/config.py +0 -0
  140. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/container_process.py +0 -0
  141. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/container_process.pyi +0 -0
  142. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/environments.py +0 -0
  143. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/environments.pyi +0 -0
  144. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/exception.py +0 -0
  145. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/experimental/__init__.py +0 -0
  146. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/experimental/flash.py +0 -0
  147. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/experimental/flash.pyi +0 -0
  148. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/experimental/ipython.py +0 -0
  149. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/file_io.py +0 -0
  150. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/file_io.pyi +0 -0
  151. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/file_pattern_matcher.py +0 -0
  152. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/functions.py +0 -0
  153. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/functions.pyi +0 -0
  154. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/image.py +0 -0
  155. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/image.pyi +0 -0
  156. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/io_streams.py +0 -0
  157. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/io_streams.pyi +0 -0
  158. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/mount.py +0 -0
  159. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/mount.pyi +0 -0
  160. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/network_file_system.py +0 -0
  161. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/network_file_system.pyi +0 -0
  162. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/object.py +0 -0
  163. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/object.pyi +0 -0
  164. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/output.py +0 -0
  165. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/parallel_map.py +0 -0
  166. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/parallel_map.pyi +0 -0
  167. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/partial_function.py +0 -0
  168. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/partial_function.pyi +0 -0
  169. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/proxy.py +0 -0
  170. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/proxy.pyi +0 -0
  171. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/py.typed +0 -0
  172. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/retries.py +0 -0
  173. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/runner.py +0 -0
  174. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/runner.pyi +0 -0
  175. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/running_app.py +0 -0
  176. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/sandbox.py +0 -0
  177. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/sandbox.pyi +0 -0
  178. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/sandbox_fs.py +0 -0
  179. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/sandbox_fs.pyi +0 -0
  180. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/schedule.py +0 -0
  181. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/scheduler_placement.py +0 -0
  182. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/server.py +0 -0
  183. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/server.pyi +0 -0
  184. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/serving.py +0 -0
  185. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/serving.pyi +0 -0
  186. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/snapshot.py +0 -0
  187. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/snapshot.pyi +0 -0
  188. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/stream_type.py +0 -0
  189. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/token_flow.py +0 -0
  190. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal/token_flow.pyi +0 -0
  191. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal.egg-info/SOURCES.txt +0 -0
  192. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal.egg-info/dependency_links.txt +0 -0
  193. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal.egg-info/entry_points.txt +0 -0
  194. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal.egg-info/top_level.txt +0 -0
  195. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/__init__.py +0 -0
  196. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/gen_cli_docs.py +0 -0
  197. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/gen_cli_docs_main.py +0 -0
  198. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/gen_reference_docs.py +0 -0
  199. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/gen_reference_docs_main.py +0 -0
  200. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/mdmd/__init__.py +0 -0
  201. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/mdmd/mdmd.py +0 -0
  202. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_docs/mdmd/signatures.py +0 -0
  203. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/__init__.py +0 -0
  204. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/py.typed +0 -0
  205. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/task_command_router_grpc.py +0 -0
  206. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  207. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  208. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/modal_version/__main__.py +0 -0
  209. {modal-1.4.1.dev3 → modal-1.4.1.dev5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.4.1.dev3
3
+ Version: 1.4.1.dev5
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -23,7 +23,7 @@ Requires-Dist: grpclib<0.4.10,>=0.4.7; python_version < "3.14"
23
23
  Requires-Dist: grpclib<0.4.10,>=0.4.9; python_version >= "3.14"
24
24
  Requires-Dist: protobuf!=4.24.0,<7.0,>=3.19
25
25
  Requires-Dist: rich>=12.0.0
26
- Requires-Dist: synchronicity~=0.11.1
26
+ Requires-Dist: synchronicity~=0.12.0
27
27
  Requires-Dist: toml
28
28
  Requires-Dist: typer>=0.9
29
29
  Requires-Dist: types-certifi
@@ -2,6 +2,7 @@
2
2
  import asyncio
3
3
  import base64
4
4
  import json
5
+ import socket
5
6
  import ssl
6
7
  import time
7
8
  import urllib.parse
@@ -181,7 +182,10 @@ class TaskCommandRouterClient:
181
182
  closed_error_message="Unable to perform operation on a detached sandbox",
182
183
  )
183
184
 
184
- await _connect_channel(channel)
185
+ try:
186
+ await _connect_channel(channel)
187
+ except socket.gaierror as exc:
188
+ raise ConnectionError(f"Could not resolve hostname '{host}': {exc}") from exc
185
189
  loop = asyncio.get_running_loop()
186
190
  jwt_refresh_lock = asyncio.Lock()
187
191
 
@@ -127,6 +127,7 @@ class AutoRunPriority:
127
127
 
128
128
  def list_cli_commands(
129
129
  module_members: dict[str, typing.Any],
130
+ include_service_functions: bool = False,
130
131
  ) -> list[CLICommand]:
131
132
  """
132
133
  Extracts all runnables found either directly in the input module, or in any of the Apps listed in that module
@@ -149,8 +150,8 @@ def list_cli_commands(
149
150
  all_runnables[local_entrypoint].append(f"{app_name}.{name}")
150
151
  priorities[local_entrypoint] = AutoRunPriority.APP_LOCAL_ENTRYPOINT
151
152
  for name, function in app.registered_functions.items():
152
- if function.info.is_service_class():
153
- continue # Skip class and server service functions since they don't have associated cli commands
153
+ if function.info.is_service_class() and not include_service_functions:
154
+ continue # Skip class and server service functions for all commands except `modal shell`.
154
155
  all_runnables[function].append(f"{app_name}.{name}")
155
156
  priorities[function] = AutoRunPriority.APP_FUNCTION
156
157
  for cls_name, cls in app.registered_classes.items():
@@ -322,7 +323,12 @@ def _get_runnable_app(runnable: Runnable) -> App:
322
323
 
323
324
 
324
325
  def import_and_filter(
325
- import_ref: ImportRef, *, base_cmd: str, accept_local_entrypoint=True, accept_webhook=False
326
+ import_ref: ImportRef,
327
+ *,
328
+ base_cmd: str,
329
+ accept_local_entrypoint=True,
330
+ accept_webhook=False,
331
+ accept_service_functions=False,
326
332
  ) -> tuple[Optional[Runnable], list[CLICommand]]:
327
333
  """Takes a function ref string and returns a single determined "runnable" to use, and a list of all available
328
334
  runnables.
@@ -339,7 +345,10 @@ def import_and_filter(
339
345
  """
340
346
  # all commands:
341
347
  module = import_file_or_module(import_ref, base_cmd)
342
- cli_commands = list_cli_commands(dict(inspect.getmembers(module)))
348
+ cli_commands = list_cli_commands(
349
+ dict(inspect.getmembers(module)),
350
+ include_service_functions=accept_service_functions,
351
+ )
343
352
 
344
353
  # all commands that satisfy local entrypoint/accept webhook limitations AND object path prefix
345
354
 
@@ -142,7 +142,11 @@ def _start_shell_in_running_container(ref: str, cmd: str, pty: bool) -> None:
142
142
  def _function_spec_from_ref(ref: str, use_module_mode: bool) -> _FunctionSpec:
143
143
  import_ref = parse_import_ref(ref, use_module_mode=use_module_mode)
144
144
  runnable, all_usable_commands = import_and_filter(
145
- import_ref, base_cmd="modal shell", accept_local_entrypoint=False, accept_webhook=True
145
+ import_ref,
146
+ base_cmd="modal shell",
147
+ accept_local_entrypoint=False,
148
+ accept_webhook=True,
149
+ accept_service_functions=True,
146
150
  )
147
151
  if not runnable:
148
152
  help_header = (
@@ -56,8 +56,7 @@ def _get_metadata(client_type: int, credentials: Optional[tuple[str, str]], vers
56
56
  "x-modal-token-secret": token_secret,
57
57
  }
58
58
  )
59
- agent_env = _agent_environment()
60
- if agent_env:
59
+ if agent_env := _agent_environment():
61
60
  metadata["x-modal-agent-harness"] = urllib.parse.quote(agent_env)
62
61
  return metadata
63
62
 
@@ -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.1.dev3",
38
+ version: str = "1.4.1.dev5",
39
39
  ):
40
40
  """mdmd:hidden
41
41
  The Modal client object is not intended to be instantiated directly by users.
@@ -171,7 +171,7 @@ class Client:
171
171
  server_url: str,
172
172
  client_type: int,
173
173
  credentials: typing.Optional[tuple[str, str]],
174
- version: str = "1.4.1.dev3",
174
+ version: str = "1.4.1.dev5",
175
175
  ):
176
176
  """mdmd:hidden
177
177
  The Modal client object is not intended to be instantiated directly by users.
@@ -298,7 +298,8 @@ class _Dict(_Object, type_prefix="di"):
298
298
  )
299
299
 
300
300
  @classproperty
301
- def objects(cls) -> _DictManager:
301
+ @classmethod
302
+ def objects(cls) -> type[_DictManager]:
302
303
  return _DictManager
303
304
 
304
305
  @property
@@ -412,7 +412,8 @@ class _Dict(modal._object._Object):
412
412
  ...
413
413
 
414
414
  @synchronicity.classproperty
415
- def objects(cls) -> _DictManager: ...
415
+ @classmethod
416
+ def objects(cls) -> type[_DictManager]: ...
416
417
  @property
417
418
  def name(self) -> typing.Optional[str]: ...
418
419
  def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
@@ -653,7 +654,8 @@ class Dict(modal.object.Object):
653
654
  ...
654
655
 
655
656
  @synchronicity.classproperty
656
- def objects(cls) -> DictManager: ...
657
+ @classmethod
658
+ def objects(cls) -> type[DictManager]: ...
657
659
  @property
658
660
  def name(self) -> typing.Optional[str]: ...
659
661
  def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
@@ -291,7 +291,8 @@ class _Queue(_Object, type_prefix="qu"):
291
291
  raise RuntimeError("Queue() is not allowed. Please use `Queue.from_name(...)` or `Queue.ephemeral()` instead.")
292
292
 
293
293
  @classproperty
294
- def objects(cls) -> _QueueManager:
294
+ @classmethod
295
+ def objects(cls) -> type[_QueueManager]:
295
296
  return _QueueManager
296
297
 
297
298
  @property
@@ -431,7 +431,8 @@ class _Queue(modal._object._Object):
431
431
  ...
432
432
 
433
433
  @synchronicity.classproperty
434
- def objects(cls) -> _QueueManager: ...
434
+ @classmethod
435
+ def objects(cls) -> type[_QueueManager]: ...
435
436
  @property
436
437
  def name(self) -> typing.Optional[str]: ...
437
438
  def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
@@ -726,7 +727,8 @@ class Queue(modal.object.Object):
726
727
  ...
727
728
 
728
729
  @synchronicity.classproperty
729
- def objects(cls) -> QueueManager: ...
730
+ @classmethod
731
+ def objects(cls) -> type[QueueManager]: ...
730
732
  @property
731
733
  def name(self) -> typing.Optional[str]: ...
732
734
  def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
@@ -237,7 +237,8 @@ class _Secret(_Object, type_prefix="st"):
237
237
  _metadata: Optional[api_pb2.SecretMetadata] = None
238
238
 
239
239
  @classproperty
240
- def objects(cls) -> _SecretManager:
240
+ @classmethod
241
+ def objects(cls) -> type[_SecretManager]:
241
242
  return _SecretManager
242
243
 
243
244
  @property
@@ -375,7 +375,8 @@ class _Secret(modal._object._Object):
375
375
  _metadata: typing.Optional[modal_proto.api_pb2.SecretMetadata]
376
376
 
377
377
  @synchronicity.classproperty
378
- def objects(cls) -> _SecretManager: ...
378
+ @classmethod
379
+ def objects(cls) -> type[_SecretManager]: ...
379
380
  @property
380
381
  def name(self) -> typing.Optional[str]: ...
381
382
  def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
@@ -500,7 +501,8 @@ class Secret(modal.object.Object):
500
501
  ...
501
502
 
502
503
  @synchronicity.classproperty
503
- def objects(cls) -> SecretManager: ...
504
+ @classmethod
505
+ def objects(cls) -> type[SecretManager]: ...
504
506
  @property
505
507
  def name(self) -> typing.Optional[str]: ...
506
508
  def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
@@ -358,7 +358,8 @@ class _Volume(_Object, type_prefix="vo"):
358
358
  _read_only: bool = False
359
359
 
360
360
  @classproperty
361
- def objects(cls) -> _VolumeManager:
361
+ @classmethod
362
+ def objects(cls) -> type[_VolumeManager]:
362
363
  return _VolumeManager
363
364
 
364
365
  @property
@@ -454,7 +454,8 @@ class _Volume(modal._object._Object):
454
454
  _read_only: bool
455
455
 
456
456
  @synchronicity.classproperty
457
- def objects(cls) -> _VolumeManager: ...
457
+ @classmethod
458
+ def objects(cls) -> type[_VolumeManager]: ...
458
459
  @property
459
460
  def name(self) -> typing.Optional[str]: ...
460
461
  def read_only(self) -> _Volume:
@@ -789,7 +790,8 @@ class Volume(modal.object.Object):
789
790
  ...
790
791
 
791
792
  @synchronicity.classproperty
792
- def objects(cls) -> VolumeManager: ...
793
+ @classmethod
794
+ def objects(cls) -> type[VolumeManager]: ...
793
795
  @property
794
796
  def name(self) -> typing.Optional[str]: ...
795
797
  def read_only(self) -> Volume:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.4.1.dev3
3
+ Version: 1.4.1.dev5
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -23,7 +23,7 @@ Requires-Dist: grpclib<0.4.10,>=0.4.7; python_version < "3.14"
23
23
  Requires-Dist: grpclib<0.4.10,>=0.4.9; python_version >= "3.14"
24
24
  Requires-Dist: protobuf!=4.24.0,<7.0,>=3.19
25
25
  Requires-Dist: rich>=12.0.0
26
- Requires-Dist: synchronicity~=0.11.1
26
+ Requires-Dist: synchronicity~=0.12.0
27
27
  Requires-Dist: toml
28
28
  Requires-Dist: typer>=0.9
29
29
  Requires-Dist: types-certifi
@@ -4,7 +4,7 @@ certifi
4
4
  click~=8.1
5
5
  protobuf!=4.24.0,<7.0,>=3.19
6
6
  rich>=12.0.0
7
- synchronicity~=0.11.1
7
+ synchronicity~=0.12.0
8
8
  toml
9
9
  typer>=0.9
10
10
  types-certifi
@@ -503,6 +503,10 @@ class ModalClientBase(abc.ABC):
503
503
  async def SandboxCreateV2(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxCreateV2Request, modal_proto.api_pb2.SandboxCreateV2Response]') -> None:
504
504
  pass
505
505
 
506
+ @abc.abstractmethod
507
+ async def SandboxGetCommandRouterAccess(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest, modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse]') -> None:
508
+ pass
509
+
506
510
  @abc.abstractmethod
507
511
  async def SandboxGetFromName(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxGetFromNameRequest, modal_proto.api_pb2.SandboxGetFromNameResponse]') -> None:
508
512
  pass
@@ -1503,6 +1507,12 @@ class ModalClientBase(abc.ABC):
1503
1507
  modal_proto.api_pb2.SandboxCreateV2Request,
1504
1508
  modal_proto.api_pb2.SandboxCreateV2Response,
1505
1509
  ),
1510
+ '/modal.client.ModalClient/SandboxGetCommandRouterAccess': grpclib.const.Handler(
1511
+ self.SandboxGetCommandRouterAccess,
1512
+ grpclib.const.Cardinality.UNARY_UNARY,
1513
+ modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest,
1514
+ modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse,
1515
+ ),
1506
1516
  '/modal.client.ModalClient/SandboxGetFromName': grpclib.const.Handler(
1507
1517
  self.SandboxGetFromName,
1508
1518
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -2643,6 +2653,12 @@ class ModalClientStub:
2643
2653
  modal_proto.api_pb2.SandboxCreateV2Request,
2644
2654
  modal_proto.api_pb2.SandboxCreateV2Response,
2645
2655
  )
2656
+ self.SandboxGetCommandRouterAccess = grpclib.client.UnaryUnaryMethod(
2657
+ channel,
2658
+ '/modal.client.ModalClient/SandboxGetCommandRouterAccess',
2659
+ modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest,
2660
+ modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse,
2661
+ )
2646
2662
  self.SandboxGetFromName = grpclib.client.UnaryUnaryMethod(
2647
2663
  channel,
2648
2664
  '/modal.client.ModalClient/SandboxGetFromName',