modal 1.2.3.dev5__tar.gz → 1.2.3.dev7__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 (200) hide show
  1. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/PKG-INFO +1 -1
  2. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/run.py +23 -0
  3. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/client.pyi +2 -2
  4. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/functions.pyi +6 -6
  5. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal.egg-info/PKG-INFO +1 -1
  6. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/api.proto +1 -0
  7. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/api_pb2.py +986 -986
  8. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/api_pb2.pyi +4 -1
  9. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_version/__init__.py +1 -1
  10. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/LICENSE +0 -0
  11. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/README.md +0 -0
  12. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/__init__.py +0 -0
  13. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/__main__.py +0 -0
  14. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_billing.py +0 -0
  15. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_clustered_functions.py +0 -0
  16. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_clustered_functions.pyi +0 -0
  17. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_container_entrypoint.py +0 -0
  18. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_functions.py +0 -0
  19. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_grpc_client.py +0 -0
  20. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_ipython.py +0 -0
  21. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_load_context.py +0 -0
  22. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_location.py +0 -0
  23. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_object.py +0 -0
  24. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_output.py +0 -0
  25. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_partial_function.py +0 -0
  26. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_pty.py +0 -0
  27. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_resolver.py +0 -0
  28. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_resources.py +0 -0
  29. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_runtime/__init__.py +0 -0
  30. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_runtime/asgi.py +0 -0
  31. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_runtime/container_io_manager.py +0 -0
  32. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_runtime/container_io_manager.pyi +0 -0
  33. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_runtime/execution_context.py +0 -0
  34. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_runtime/execution_context.pyi +0 -0
  35. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  36. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_runtime/telemetry.py +0 -0
  37. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_runtime/user_code_imports.py +0 -0
  38. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_serialization.py +0 -0
  39. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_traceback.py +0 -0
  40. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_tunnel.py +0 -0
  41. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_tunnel.pyi +0 -0
  42. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_type_manager.py +0 -0
  43. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/__init__.py +0 -0
  44. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/app_utils.py +0 -0
  45. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/async_utils.py +0 -0
  46. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/auth_token_manager.py +0 -0
  47. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/blob_utils.py +0 -0
  48. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/bytes_io_segment_payload.py +0 -0
  49. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/deprecation.py +0 -0
  50. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/docker_utils.py +0 -0
  51. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/function_utils.py +0 -0
  52. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/git_utils.py +0 -0
  53. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/grpc_testing.py +0 -0
  54. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/grpc_utils.py +0 -0
  55. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/hash_utils.py +0 -0
  56. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/http_utils.py +0 -0
  57. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/jwt_utils.py +0 -0
  58. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/logger.py +0 -0
  59. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/mount_utils.py +0 -0
  60. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/name_utils.py +0 -0
  61. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/package_utils.py +0 -0
  62. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/pattern_utils.py +0 -0
  63. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/rand_pb_testing.py +0 -0
  64. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/shell_utils.py +0 -0
  65. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/task_command_router_client.py +0 -0
  66. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_utils/time_utils.py +0 -0
  67. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_vendor/__init__.py +0 -0
  68. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  69. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_vendor/cloudpickle.py +0 -0
  70. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_vendor/tblib.py +0 -0
  71. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/_watcher.py +0 -0
  72. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/app.py +0 -0
  73. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/app.pyi +0 -0
  74. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/billing.py +0 -0
  75. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/builder/2023.12.312.txt +0 -0
  76. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/builder/2023.12.txt +0 -0
  77. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/builder/2024.04.txt +0 -0
  78. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/builder/2024.10.txt +0 -0
  79. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/builder/2025.06.txt +0 -0
  80. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/builder/PREVIEW.txt +0 -0
  81. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/builder/README.md +0 -0
  82. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/builder/base-images.json +0 -0
  83. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/call_graph.py +0 -0
  84. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/__init__.py +0 -0
  85. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/_download.py +0 -0
  86. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/_traceback.py +0 -0
  87. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/app.py +0 -0
  88. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/cluster.py +0 -0
  89. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/config.py +0 -0
  90. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/container.py +0 -0
  91. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/dict.py +0 -0
  92. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/entry_point.py +0 -0
  93. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/environment.py +0 -0
  94. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/import_refs.py +0 -0
  95. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/launch.py +0 -0
  96. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/network_file_system.py +0 -0
  97. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/profile.py +0 -0
  98. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/programs/__init__.py +0 -0
  99. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/programs/launch_instance_ssh.py +0 -0
  100. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/programs/run_jupyter.py +0 -0
  101. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/programs/run_marimo.py +0 -0
  102. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/programs/vscode.py +0 -0
  103. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/queues.py +0 -0
  104. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/secret.py +0 -0
  105. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/token.py +0 -0
  106. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/utils.py +0 -0
  107. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cli/volume.py +0 -0
  108. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/client.py +0 -0
  109. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cloud_bucket_mount.py +0 -0
  110. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cloud_bucket_mount.pyi +0 -0
  111. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cls.py +0 -0
  112. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/cls.pyi +0 -0
  113. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/config.py +0 -0
  114. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/container_process.py +0 -0
  115. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/container_process.pyi +0 -0
  116. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/dict.py +0 -0
  117. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/dict.pyi +0 -0
  118. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/environments.py +0 -0
  119. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/environments.pyi +0 -0
  120. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/exception.py +0 -0
  121. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/experimental/__init__.py +0 -0
  122. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/experimental/flash.py +0 -0
  123. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/experimental/flash.pyi +0 -0
  124. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/experimental/ipython.py +0 -0
  125. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/file_io.py +0 -0
  126. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/file_io.pyi +0 -0
  127. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/file_pattern_matcher.py +0 -0
  128. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/functions.py +0 -0
  129. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/gpu.py +0 -0
  130. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/image.py +0 -0
  131. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/image.pyi +0 -0
  132. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/io_streams.py +0 -0
  133. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/io_streams.pyi +0 -0
  134. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/mount.py +0 -0
  135. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/mount.pyi +0 -0
  136. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/network_file_system.py +0 -0
  137. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/network_file_system.pyi +0 -0
  138. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/object.py +0 -0
  139. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/object.pyi +0 -0
  140. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/output.py +0 -0
  141. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/parallel_map.py +0 -0
  142. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/parallel_map.pyi +0 -0
  143. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/partial_function.py +0 -0
  144. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/partial_function.pyi +0 -0
  145. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/proxy.py +0 -0
  146. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/proxy.pyi +0 -0
  147. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/py.typed +0 -0
  148. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/queue.py +0 -0
  149. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/queue.pyi +0 -0
  150. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/retries.py +0 -0
  151. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/runner.py +0 -0
  152. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/runner.pyi +0 -0
  153. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/running_app.py +0 -0
  154. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/sandbox.py +0 -0
  155. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/sandbox.pyi +0 -0
  156. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/schedule.py +0 -0
  157. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/scheduler_placement.py +0 -0
  158. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/secret.py +0 -0
  159. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/secret.pyi +0 -0
  160. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/serving.py +0 -0
  161. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/serving.pyi +0 -0
  162. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/snapshot.py +0 -0
  163. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/snapshot.pyi +0 -0
  164. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/stream_type.py +0 -0
  165. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/token_flow.py +0 -0
  166. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/token_flow.pyi +0 -0
  167. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/volume.py +0 -0
  168. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal/volume.pyi +0 -0
  169. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal.egg-info/SOURCES.txt +0 -0
  170. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal.egg-info/dependency_links.txt +0 -0
  171. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal.egg-info/entry_points.txt +0 -0
  172. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal.egg-info/requires.txt +0 -0
  173. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal.egg-info/top_level.txt +0 -0
  174. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_docs/__init__.py +0 -0
  175. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_docs/gen_cli_docs.py +0 -0
  176. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_docs/gen_reference_docs.py +0 -0
  177. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_docs/mdmd/__init__.py +0 -0
  178. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_docs/mdmd/mdmd.py +0 -0
  179. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_docs/mdmd/signatures.py +0 -0
  180. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/__init__.py +0 -0
  181. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/api_grpc.py +0 -0
  182. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/api_pb2_grpc.py +0 -0
  183. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/api_pb2_grpc.pyi +0 -0
  184. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/modal_api_grpc.py +0 -0
  185. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/py.typed +0 -0
  186. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/sandbox_router.proto +0 -0
  187. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/sandbox_router_grpc.py +0 -0
  188. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/sandbox_router_pb2.py +0 -0
  189. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/sandbox_router_pb2.pyi +0 -0
  190. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/sandbox_router_pb2_grpc.py +0 -0
  191. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/sandbox_router_pb2_grpc.pyi +0 -0
  192. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/task_command_router.proto +0 -0
  193. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/task_command_router_grpc.py +0 -0
  194. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/task_command_router_pb2.py +0 -0
  195. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/task_command_router_pb2.pyi +0 -0
  196. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  197. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  198. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/modal_version/__main__.py +0 -0
  199. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/pyproject.toml +0 -0
  200. {modal-1.2.3.dev5 → modal-1.2.3.dev7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.2.3.dev5
3
+ Version: 1.2.3.dev7
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -10,6 +10,7 @@ import time
10
10
  import typing
11
11
  from dataclasses import dataclass
12
12
  from functools import partial
13
+ from pathlib import Path, PurePosixPath
13
14
  from typing import Any, Callable, Optional
14
15
 
15
16
  import click
@@ -25,6 +26,7 @@ from ..environments import ensure_env
25
26
  from ..exception import ExecutionError, InvalidError, NotFoundError, _CliUserExecutionError
26
27
  from ..functions import Function
27
28
  from ..image import Image
29
+ from ..mount import _Mount
28
30
  from ..output import enable_output
29
31
  from ..runner import deploy_app, interactive_shell, run_app
30
32
  from ..secret import Secret
@@ -542,6 +544,13 @@ def shell(
542
544
  " Can be used multiple times."
543
545
  ),
544
546
  ),
547
+ add_local: Optional[list[str]] = typer.Option(
548
+ default=None,
549
+ help=(
550
+ "Local file or directory to mount inside the shell at `/mnt/{basename}` (if not using REF)."
551
+ " Can be used multiple times."
552
+ ),
553
+ ),
545
554
  secret: Optional[list[str]] = typer.Option(
546
555
  default=None,
547
556
  help=("Name of a `modal.Secret` to mount inside the shell (if not using REF). Can be used multiple times."),
@@ -692,9 +701,23 @@ def shell(
692
701
  modal_image = Image.from_registry(image, add_python=add_python) if image else None
693
702
  volumes = {} if volume is None else {f"/mnt/{vol}": Volume.from_name(vol) for vol in volume}
694
703
  secrets = [] if secret is None else [Secret.from_name(s) for s in secret]
704
+
705
+ mounts = []
706
+ if add_local:
707
+ for local_path_str in add_local:
708
+ local_path = Path(local_path_str).expanduser().resolve()
709
+ remote_path = PurePosixPath(f"/mnt/{local_path.name}")
710
+
711
+ if local_path.is_dir():
712
+ m = _Mount._from_local_dir(local_path, remote_path=remote_path)
713
+ else:
714
+ m = _Mount._from_local_file(local_path, remote_path=remote_path)
715
+ mounts.append(m)
716
+
695
717
  start_shell = partial(
696
718
  interactive_shell,
697
719
  image=modal_image,
720
+ mounts=mounts,
698
721
  cpu=cpu,
699
722
  memory=memory,
700
723
  gpu=gpu,
@@ -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.2.3.dev5",
36
+ version: str = "1.2.3.dev7",
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.2.3.dev5",
167
+ version: str = "1.2.3.dev7",
168
168
  ):
169
169
  """mdmd:hidden
170
170
  The Modal client object is not intended to be instantiated directly by users.
@@ -408,7 +408,7 @@ class Function(
408
408
 
409
409
  _call_generator: ___call_generator_spec[typing_extensions.Self]
410
410
 
411
- class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
411
+ class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
412
412
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
413
413
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
414
414
  ...
@@ -417,7 +417,7 @@ class Function(
417
417
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
418
418
  ...
419
419
 
420
- remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
420
+ remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
421
421
 
422
422
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
423
423
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -444,7 +444,7 @@ class Function(
444
444
  """
445
445
  ...
446
446
 
447
- class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
447
+ class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
448
448
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
449
449
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
450
450
 
@@ -468,7 +468,7 @@ class Function(
468
468
  ...
469
469
 
470
470
  _experimental_spawn: ___experimental_spawn_spec[
471
- modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
471
+ modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
472
472
  ]
473
473
 
474
474
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
@@ -477,7 +477,7 @@ class Function(
477
477
 
478
478
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
479
479
 
480
- class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
480
+ class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
481
481
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
482
482
  """Calls the function with the given arguments, without waiting for the results.
483
483
 
@@ -498,7 +498,7 @@ class Function(
498
498
  """
499
499
  ...
500
500
 
501
- spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
501
+ spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
502
502
 
503
503
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
504
504
  """Return the inner Python object wrapped by this Modal Function."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.2.3.dev5
3
+ Version: 1.2.3.dev7
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -367,6 +367,7 @@ message AppGetLogsRequest {
367
367
  float timeout = 2;
368
368
  string last_entry_id = 4;
369
369
  string function_id = 5;
370
+ string parametrized_function_id = 11;
370
371
  string input_id = 6;
371
372
  string task_id = 7;
372
373
  string function_call_id = 9;