modal 1.1.5.dev61__tar.gz → 1.1.5.dev63__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.

Potentially problematic release.


This version of modal might be problematic. Click here for more details.

Files changed (196) hide show
  1. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/PKG-INFO +1 -1
  2. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/run.py +27 -13
  3. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/client.pyi +2 -2
  4. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal.egg-info/PKG-INFO +1 -1
  5. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_version/__init__.py +1 -1
  6. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/LICENSE +0 -0
  7. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/README.md +0 -0
  8. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/__init__.py +0 -0
  9. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/__main__.py +0 -0
  10. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_clustered_functions.py +0 -0
  11. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_clustered_functions.pyi +0 -0
  12. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_container_entrypoint.py +0 -0
  13. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_functions.py +0 -0
  14. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_ipython.py +0 -0
  15. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_location.py +0 -0
  16. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_object.py +0 -0
  17. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_output.py +0 -0
  18. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_partial_function.py +0 -0
  19. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_pty.py +0 -0
  20. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_resolver.py +0 -0
  21. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_resources.py +0 -0
  22. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/__init__.py +0 -0
  23. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/asgi.py +0 -0
  24. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/container_io_manager.py +0 -0
  25. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/container_io_manager.pyi +0 -0
  26. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/execution_context.py +0 -0
  27. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/execution_context.pyi +0 -0
  28. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  29. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/telemetry.py +0 -0
  30. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_runtime/user_code_imports.py +0 -0
  31. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_serialization.py +0 -0
  32. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_traceback.py +0 -0
  33. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_tunnel.py +0 -0
  34. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_tunnel.pyi +0 -0
  35. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_type_manager.py +0 -0
  36. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/__init__.py +0 -0
  37. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/app_utils.py +0 -0
  38. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/async_utils.py +0 -0
  39. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/auth_token_manager.py +0 -0
  40. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/blob_utils.py +0 -0
  41. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/bytes_io_segment_payload.py +0 -0
  42. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/deprecation.py +0 -0
  43. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/docker_utils.py +0 -0
  44. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/function_utils.py +0 -0
  45. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/git_utils.py +0 -0
  46. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/grpc_testing.py +0 -0
  47. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/grpc_utils.py +0 -0
  48. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/hash_utils.py +0 -0
  49. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/http_utils.py +0 -0
  50. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/jwt_utils.py +0 -0
  51. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/logger.py +0 -0
  52. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/mount_utils.py +0 -0
  53. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/name_utils.py +0 -0
  54. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/package_utils.py +0 -0
  55. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/pattern_utils.py +0 -0
  56. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/rand_pb_testing.py +0 -0
  57. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/shell_utils.py +0 -0
  58. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_utils/time_utils.py +0 -0
  59. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_vendor/__init__.py +0 -0
  60. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  61. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_vendor/cloudpickle.py +0 -0
  62. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_vendor/tblib.py +0 -0
  63. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/_watcher.py +0 -0
  64. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/app.py +0 -0
  65. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/app.pyi +0 -0
  66. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/2023.12.312.txt +0 -0
  67. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/2023.12.txt +0 -0
  68. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/2024.04.txt +0 -0
  69. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/2024.10.txt +0 -0
  70. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/2025.06.txt +0 -0
  71. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/PREVIEW.txt +0 -0
  72. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/README.md +0 -0
  73. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/builder/base-images.json +0 -0
  74. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/call_graph.py +0 -0
  75. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/__init__.py +0 -0
  76. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/_download.py +0 -0
  77. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/_traceback.py +0 -0
  78. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/app.py +0 -0
  79. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/cluster.py +0 -0
  80. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/config.py +0 -0
  81. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/container.py +0 -0
  82. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/dict.py +0 -0
  83. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/entry_point.py +0 -0
  84. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/environment.py +0 -0
  85. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/import_refs.py +0 -0
  86. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/launch.py +0 -0
  87. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/network_file_system.py +0 -0
  88. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/profile.py +0 -0
  89. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/programs/__init__.py +0 -0
  90. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/programs/launch_instance_ssh.py +0 -0
  91. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/programs/run_jupyter.py +0 -0
  92. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/programs/run_marimo.py +0 -0
  93. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/programs/vscode.py +0 -0
  94. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/queues.py +0 -0
  95. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/secret.py +0 -0
  96. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/token.py +0 -0
  97. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/utils.py +0 -0
  98. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cli/volume.py +0 -0
  99. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/client.py +0 -0
  100. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cloud_bucket_mount.py +0 -0
  101. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cloud_bucket_mount.pyi +0 -0
  102. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cls.py +0 -0
  103. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/cls.pyi +0 -0
  104. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/config.py +0 -0
  105. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/container_process.py +0 -0
  106. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/container_process.pyi +0 -0
  107. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/dict.py +0 -0
  108. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/dict.pyi +0 -0
  109. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/environments.py +0 -0
  110. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/environments.pyi +0 -0
  111. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/exception.py +0 -0
  112. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/experimental/__init__.py +0 -0
  113. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/experimental/flash.py +0 -0
  114. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/experimental/flash.pyi +0 -0
  115. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/experimental/ipython.py +0 -0
  116. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/file_io.py +0 -0
  117. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/file_io.pyi +0 -0
  118. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/file_pattern_matcher.py +0 -0
  119. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/functions.py +0 -0
  120. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/functions.pyi +0 -0
  121. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/gpu.py +0 -0
  122. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/image.py +0 -0
  123. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/image.pyi +0 -0
  124. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/io_streams.py +0 -0
  125. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/io_streams.pyi +0 -0
  126. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/mount.py +0 -0
  127. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/mount.pyi +0 -0
  128. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/network_file_system.py +0 -0
  129. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/network_file_system.pyi +0 -0
  130. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/object.py +0 -0
  131. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/object.pyi +0 -0
  132. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/output.py +0 -0
  133. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/parallel_map.py +0 -0
  134. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/parallel_map.pyi +0 -0
  135. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/partial_function.py +0 -0
  136. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/partial_function.pyi +0 -0
  137. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/proxy.py +0 -0
  138. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/proxy.pyi +0 -0
  139. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/py.typed +0 -0
  140. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/queue.py +0 -0
  141. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/queue.pyi +0 -0
  142. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/retries.py +0 -0
  143. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/runner.py +0 -0
  144. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/runner.pyi +0 -0
  145. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/running_app.py +0 -0
  146. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/sandbox.py +0 -0
  147. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/sandbox.pyi +0 -0
  148. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/schedule.py +0 -0
  149. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/scheduler_placement.py +0 -0
  150. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/secret.py +0 -0
  151. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/secret.pyi +0 -0
  152. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/serving.py +0 -0
  153. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/serving.pyi +0 -0
  154. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/snapshot.py +0 -0
  155. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/snapshot.pyi +0 -0
  156. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/stream_type.py +0 -0
  157. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/token_flow.py +0 -0
  158. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/token_flow.pyi +0 -0
  159. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/volume.py +0 -0
  160. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal/volume.pyi +0 -0
  161. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal.egg-info/SOURCES.txt +0 -0
  162. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal.egg-info/dependency_links.txt +0 -0
  163. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal.egg-info/entry_points.txt +0 -0
  164. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal.egg-info/requires.txt +0 -0
  165. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal.egg-info/top_level.txt +0 -0
  166. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_docs/__init__.py +0 -0
  167. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_docs/gen_cli_docs.py +0 -0
  168. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_docs/gen_reference_docs.py +0 -0
  169. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_docs/mdmd/__init__.py +0 -0
  170. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_docs/mdmd/mdmd.py +0 -0
  171. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_docs/mdmd/signatures.py +0 -0
  172. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/__init__.py +0 -0
  173. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/api.proto +0 -0
  174. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/api_grpc.py +0 -0
  175. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/api_pb2.py +0 -0
  176. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/api_pb2.pyi +0 -0
  177. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/api_pb2_grpc.py +0 -0
  178. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/api_pb2_grpc.pyi +0 -0
  179. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/modal_api_grpc.py +0 -0
  180. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/modal_options_grpc.py +0 -0
  181. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/options.proto +0 -0
  182. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/options_grpc.py +0 -0
  183. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/options_pb2.py +0 -0
  184. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/options_pb2.pyi +0 -0
  185. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/options_pb2_grpc.py +0 -0
  186. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/options_pb2_grpc.pyi +0 -0
  187. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/py.typed +0 -0
  188. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/sandbox_router.proto +0 -0
  189. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/sandbox_router_grpc.py +0 -0
  190. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/sandbox_router_pb2.py +0 -0
  191. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/sandbox_router_pb2.pyi +0 -0
  192. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/sandbox_router_pb2_grpc.py +0 -0
  193. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_proto/sandbox_router_pb2_grpc.pyi +0 -0
  194. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/modal_version/__main__.py +0 -0
  195. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/pyproject.toml +0 -0
  196. {modal-1.1.5.dev61 → modal-1.1.5.dev63}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.5.dev61
3
+ Version: 1.1.5.dev63
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -22,7 +22,7 @@ from ..app import App, LocalEntrypoint
22
22
  from ..cls import _get_class_constructor_signature
23
23
  from ..config import config
24
24
  from ..environments import ensure_env
25
- from ..exception import ExecutionError, InvalidError, _CliUserExecutionError
25
+ from ..exception import ExecutionError, InvalidError, NotFoundError, _CliUserExecutionError
26
26
  from ..functions import Function
27
27
  from ..image import Image
28
28
  from ..output import enable_output
@@ -516,13 +516,12 @@ def serve(
516
516
 
517
517
 
518
518
  def shell(
519
- container_or_function: Optional[str] = typer.Argument(
519
+ ref: Optional[str] = typer.Argument(
520
520
  default=None,
521
521
  help=(
522
- "ID of running container, or path to a Python file containing a Modal App."
523
- " Can also include a function specifier, like `module.py::func`, if the file defines multiple functions."
522
+ "ID of running container or Sandbox, or path to a Python file containing an App."
523
+ " Can also include a Function specifier, like `module.py::func`, if the file defines multiple Functions."
524
524
  ),
525
- metavar="REF",
526
525
  ),
527
526
  cmd: str = typer.Option("/bin/bash", "-c", "--cmd", help="Command to run inside the Modal image."),
528
527
  env: str = ENV_OPTION,
@@ -602,6 +601,12 @@ def shell(
602
601
  ```
603
602
  modal shell hello_world.py -c 'uv pip list' > env.txt
604
603
  ```
604
+
605
+ Connect to a running Sandbox by ID:
606
+
607
+ ```
608
+ modal shell sb-abc123xyz
609
+ ```
605
610
  """
606
611
  env = ensure_env(env)
607
612
 
@@ -613,19 +618,28 @@ def shell(
613
618
 
614
619
  app = App("modal shell")
615
620
 
616
- if container_or_function is not None:
621
+ if ref is not None:
622
+ # `modal shell` with a sandbox ID gets the task_id, that's then handled by the `ta-*` flow below.
623
+ if ref.startswith("sb-") and len(ref[3:]) > 0 and ref[3:].isalnum():
624
+ from ..sandbox import Sandbox
625
+
626
+ try:
627
+ sandbox = Sandbox.from_id(ref)
628
+ task_id = sandbox._get_task_id()
629
+ ref = task_id
630
+ except NotFoundError as e:
631
+ raise ClickException(f"Sandbox '{ref}' not found")
632
+ except Exception as e:
633
+ raise ClickException(f"Error connecting to sandbox '{ref}': {str(e)}")
634
+
617
635
  # `modal shell` with a container ID is a special case, alias for `modal container exec`.
618
- if (
619
- container_or_function.startswith("ta-")
620
- and len(container_or_function[3:]) > 0
621
- and container_or_function[3:].isalnum()
622
- ):
636
+ if ref.startswith("ta-") and len(ref[3:]) > 0 and ref[3:].isalnum():
623
637
  from .container import exec
624
638
 
625
- exec(container_id=container_or_function, command=shlex.split(cmd), pty=pty)
639
+ exec(container_id=ref, command=shlex.split(cmd), pty=pty)
626
640
  return
627
641
 
628
- import_ref = parse_import_ref(container_or_function, use_module_mode=use_module_mode)
642
+ import_ref = parse_import_ref(ref, use_module_mode=use_module_mode)
629
643
  runnable, all_usable_commands = import_and_filter(
630
644
  import_ref, base_cmd="modal shell", accept_local_entrypoint=False, accept_webhook=True
631
645
  )
@@ -33,7 +33,7 @@ class _Client:
33
33
  server_url: str,
34
34
  client_type: int,
35
35
  credentials: typing.Optional[tuple[str, str]],
36
- version: str = "1.1.5.dev61",
36
+ version: str = "1.1.5.dev63",
37
37
  ):
38
38
  """mdmd:hidden
39
39
  The Modal client object is not intended to be instantiated directly by users.
@@ -164,7 +164,7 @@ class Client:
164
164
  server_url: str,
165
165
  client_type: int,
166
166
  credentials: typing.Optional[tuple[str, str]],
167
- version: str = "1.1.5.dev61",
167
+ version: str = "1.1.5.dev63",
168
168
  ):
169
169
  """mdmd:hidden
170
170
  The Modal client object is not intended to be instantiated directly by users.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.5.dev61
3
+ Version: 1.1.5.dev63
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -1,4 +1,4 @@
1
1
  # Copyright Modal Labs 2025
2
2
  """Supplies the current version of the modal client library."""
3
3
 
4
- __version__ = "1.1.5.dev61"
4
+ __version__ = "1.1.5.dev63"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes