modal 1.4.4.dev7__tar.gz → 1.4.4.dev9__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 (214) hide show
  1. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/PKG-INFO +1 -1
  2. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/shell.py +6 -6
  3. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/client.pyi +2 -2
  4. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/sandbox.py +43 -25
  5. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/sandbox.pyi +26 -24
  6. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/sandbox_fs.py +5 -5
  7. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/sandbox_fs.pyi +4 -4
  8. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal.egg-info/PKG-INFO +1 -1
  9. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_proto/api_pb2.py +358 -358
  10. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_proto/api_pb2.pyi +7 -1
  11. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_proto/task_command_router_pb2.py +80 -80
  12. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_proto/task_command_router_pb2.pyi +4 -1
  13. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_version/__init__.py +1 -1
  14. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/LICENSE +0 -0
  15. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/README.md +0 -0
  16. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/__init__.py +0 -0
  17. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/__main__.py +0 -0
  18. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_billing.py +0 -0
  19. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_clustered_functions.py +0 -0
  20. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_clustered_functions.pyi +0 -0
  21. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_container_entrypoint.py +0 -0
  22. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_environments.py +0 -0
  23. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_function_variants.py +0 -0
  24. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_functions.py +0 -0
  25. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_grpc_client.py +0 -0
  26. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_ipython.py +0 -0
  27. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_load_context.py +0 -0
  28. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_location.py +0 -0
  29. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_logs.py +0 -0
  30. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_object.py +0 -0
  31. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_output/__init__.py +0 -0
  32. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_output/manager.py +0 -0
  33. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_output/pty.py +0 -0
  34. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_output/rich.py +0 -0
  35. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_output/status.py +0 -0
  36. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_partial_function.py +0 -0
  37. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_resolver.py +0 -0
  38. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_resources.py +0 -0
  39. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_runtime/__init__.py +0 -0
  40. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_runtime/asgi.py +0 -0
  41. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_runtime/container_io_manager.py +0 -0
  42. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_runtime/container_io_manager.pyi +0 -0
  43. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_runtime/execution_context.py +0 -0
  44. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_runtime/execution_context.pyi +0 -0
  45. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  46. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_runtime/telemetry.py +0 -0
  47. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_runtime/user_code_event_loop.py +0 -0
  48. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_runtime/user_code_imports.py +0 -0
  49. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_serialization.py +0 -0
  50. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_server.py +0 -0
  51. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_traceback.py +0 -0
  52. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_tunnel.py +0 -0
  53. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_tunnel.pyi +0 -0
  54. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_type_manager.py +0 -0
  55. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/__init__.py +0 -0
  56. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/app_utils.py +0 -0
  57. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/async_utils.py +0 -0
  58. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/auth_token_manager.py +0 -0
  59. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/blob_utils.py +0 -0
  60. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/browser_utils.py +0 -0
  61. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/bytes_io_segment_payload.py +0 -0
  62. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/deprecation.py +0 -0
  63. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/docker_utils.py +0 -0
  64. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/function_utils.py +0 -0
  65. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/git_utils.py +0 -0
  66. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/grpc_testing.py +0 -0
  67. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/grpc_utils.py +0 -0
  68. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/hash_utils.py +0 -0
  69. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/http_utils.py +0 -0
  70. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/jwt_utils.py +0 -0
  71. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/logger.py +0 -0
  72. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/mount_utils.py +0 -0
  73. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/name_utils.py +0 -0
  74. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/package_utils.py +0 -0
  75. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/pattern_utils.py +0 -0
  76. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/rand_pb_testing.py +0 -0
  77. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/sandbox_fs_utils.py +0 -0
  78. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/shell_utils.py +0 -0
  79. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/task_command_router_client.py +0 -0
  80. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_utils/time_utils.py +0 -0
  81. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_vendor/__init__.py +0 -0
  82. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  83. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_vendor/cloudpickle.py +0 -0
  84. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_vendor/tblib.py +0 -0
  85. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_vendor/version.py +0 -0
  86. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/_watcher.py +0 -0
  87. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/app.py +0 -0
  88. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/app.pyi +0 -0
  89. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/billing.py +0 -0
  90. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/builder/2023.12.312.txt +0 -0
  91. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/builder/2023.12.txt +0 -0
  92. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/builder/2024.04.txt +0 -0
  93. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/builder/2024.10.txt +0 -0
  94. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/builder/2025.06.txt +0 -0
  95. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/builder/PREVIEW.txt +0 -0
  96. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/builder/README.md +0 -0
  97. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/builder/base-images.json +0 -0
  98. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/call_graph.py +0 -0
  99. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/__init__.py +0 -0
  100. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/_download.py +0 -0
  101. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/_help.py +0 -0
  102. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/_traceback.py +0 -0
  103. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/app.py +0 -0
  104. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/billing.py +0 -0
  105. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/bootstrap.py +0 -0
  106. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/changelog.py +0 -0
  107. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/cluster.py +0 -0
  108. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/config.py +0 -0
  109. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/container.py +0 -0
  110. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/dashboard.py +0 -0
  111. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/dict.py +0 -0
  112. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/entry_point.py +0 -0
  113. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/environment.py +0 -0
  114. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/import_refs.py +0 -0
  115. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/launch.py +0 -0
  116. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/logo.py +0 -0
  117. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/network_file_system.py +0 -0
  118. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/profile.py +0 -0
  119. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/programs/__init__.py +0 -0
  120. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/programs/run_jupyter.py +0 -0
  121. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/programs/vscode.py +0 -0
  122. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/queues.py +0 -0
  123. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/run.py +0 -0
  124. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/secret.py +0 -0
  125. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/selector.py +0 -0
  126. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/token.py +0 -0
  127. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/utils.py +0 -0
  128. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cli/volume.py +0 -0
  129. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/client.py +0 -0
  130. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cloud_bucket_mount.py +0 -0
  131. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cloud_bucket_mount.pyi +0 -0
  132. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cls.py +0 -0
  133. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/cls.pyi +0 -0
  134. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/config.py +0 -0
  135. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/container_process.py +0 -0
  136. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/container_process.pyi +0 -0
  137. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/dict.py +0 -0
  138. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/dict.pyi +0 -0
  139. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/environments.py +0 -0
  140. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/environments.pyi +0 -0
  141. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/exception.py +0 -0
  142. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/experimental/__init__.py +0 -0
  143. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/experimental/flash.py +0 -0
  144. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/experimental/flash.pyi +0 -0
  145. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/experimental/ipython.py +0 -0
  146. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/file_io.py +0 -0
  147. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/file_io.pyi +0 -0
  148. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/file_pattern_matcher.py +0 -0
  149. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/functions.py +0 -0
  150. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/functions.pyi +0 -0
  151. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/image.py +0 -0
  152. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/image.pyi +0 -0
  153. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/io_streams.py +0 -0
  154. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/io_streams.pyi +0 -0
  155. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/mount.py +0 -0
  156. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/mount.pyi +0 -0
  157. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/network_file_system.py +0 -0
  158. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/network_file_system.pyi +0 -0
  159. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/object.py +0 -0
  160. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/object.pyi +0 -0
  161. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/output.py +0 -0
  162. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/parallel_map.py +0 -0
  163. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/parallel_map.pyi +0 -0
  164. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/partial_function.py +0 -0
  165. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/partial_function.pyi +0 -0
  166. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/proxy.py +0 -0
  167. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/proxy.pyi +0 -0
  168. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/py.typed +0 -0
  169. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/queue.py +0 -0
  170. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/queue.pyi +0 -0
  171. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/retries.py +0 -0
  172. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/runner.py +0 -0
  173. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/runner.pyi +0 -0
  174. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/running_app.py +0 -0
  175. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/schedule.py +0 -0
  176. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/scheduler_placement.py +0 -0
  177. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/secret.py +0 -0
  178. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/secret.pyi +0 -0
  179. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/server.py +0 -0
  180. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/server.pyi +0 -0
  181. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/serving.py +0 -0
  182. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/serving.pyi +0 -0
  183. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/snapshot.py +0 -0
  184. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/snapshot.pyi +0 -0
  185. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/stream_type.py +0 -0
  186. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/token_flow.py +0 -0
  187. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/token_flow.pyi +0 -0
  188. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/volume.py +0 -0
  189. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal/volume.pyi +0 -0
  190. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal.egg-info/SOURCES.txt +0 -0
  191. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal.egg-info/dependency_links.txt +0 -0
  192. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal.egg-info/entry_points.txt +0 -0
  193. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal.egg-info/requires.txt +0 -0
  194. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal.egg-info/top_level.txt +0 -0
  195. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_docs/__init__.py +0 -0
  196. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_docs/gen_cli_docs.py +0 -0
  197. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_docs/gen_cli_docs_main.py +0 -0
  198. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_docs/gen_reference_docs.py +0 -0
  199. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_docs/gen_reference_docs_main.py +0 -0
  200. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_docs/mdmd/__init__.py +0 -0
  201. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_docs/mdmd/mdmd.py +0 -0
  202. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_docs/mdmd/signatures.py +0 -0
  203. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_proto/__init__.py +0 -0
  204. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_proto/api_grpc.py +0 -0
  205. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_proto/api_pb2_grpc.py +0 -0
  206. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_proto/api_pb2_grpc.pyi +0 -0
  207. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_proto/modal_api_grpc.py +0 -0
  208. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_proto/py.typed +0 -0
  209. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_proto/task_command_router_grpc.py +0 -0
  210. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  211. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  212. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/modal_version/__main__.py +0 -0
  213. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/pyproject.toml +0 -0
  214. {modal-1.4.4.dev7 → modal-1.4.4.dev9}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.4.4.dev7
3
+ Version: 1.4.4.dev9
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -16,7 +16,7 @@ from ..functions import Function
16
16
  from ..image import Image
17
17
  from ..mount import _Mount
18
18
  from ..runner import interactive_shell
19
- from ..sandbox import Sandbox
19
+ from ..sandbox import _MAIN_CONTAINER_NAME, Sandbox
20
20
  from ..secret import Secret
21
21
  from ..stream_type import StreamType
22
22
  from ..volume import Volume
@@ -106,8 +106,8 @@ def _is_running_container_ref(ref: Optional[str]) -> bool:
106
106
  return _is_valid_modal_id(sandbox_id, "sb-") or _is_valid_modal_id(ref, "ta-")
107
107
 
108
108
 
109
- def _start_shell_in_sandbox_container(sandbox_id: str, container_name: str, cmd: str, pty: bool) -> None:
110
- """Shell into a named container within a sandbox."""
109
+ def _start_shell_in_sidecar_container(sandbox_id: str, container_name: str, cmd: str, pty: bool) -> None:
110
+ """Shell into a sidecar container within a sandbox."""
111
111
  try:
112
112
  sandbox = Sandbox.from_id(sandbox_id)
113
113
  except NotFoundError:
@@ -116,7 +116,7 @@ def _start_shell_in_sandbox_container(sandbox_id: str, container_name: str, cmd:
116
116
  raise ClickException(f"Error connecting to Sandbox '{sandbox_id}': {str(e)}")
117
117
 
118
118
  try:
119
- sandbox_container = sandbox._experimental_containers.get(name=container_name)
119
+ sandbox_container = sandbox._experimental_sidecars.get(name=container_name)
120
120
  process: Union[ContainerProcess[bytes], ContainerProcess[str]]
121
121
  if pty:
122
122
  # PTY output is raw terminal bytes, not text; strict UTF-8 decode
@@ -138,8 +138,8 @@ def _start_shell_in_sandbox_container(sandbox_id: str, container_name: str, cmd:
138
138
  def _start_shell_in_running_container(ref: str, cmd: str, pty: bool) -> None:
139
139
  sandbox_id, container_name = _parse_sandbox_container_ref(ref)
140
140
 
141
- if container_name is not None:
142
- return _start_shell_in_sandbox_container(sandbox_id, container_name, cmd, pty)
141
+ if container_name is not None and container_name != _MAIN_CONTAINER_NAME:
142
+ return _start_shell_in_sidecar_container(sandbox_id, container_name, cmd, pty)
143
143
 
144
144
  if _is_valid_modal_id(sandbox_id, "sb-"):
145
145
  try:
@@ -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.4.dev7",
38
+ version: str = "1.4.4.dev9",
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.4.dev7",
178
+ version: str = "1.4.4.dev9",
179
179
  ):
180
180
  """mdmd:hidden
181
181
  The Modal client object is not intended to be instantiated directly by users.
@@ -695,7 +695,7 @@ class _Sandbox(_Object, type_prefix="sb"):
695
695
  cloud: Optional[str] = None,
696
696
  region: Optional[Union[str, Sequence[str]]] = None,
697
697
  block_network: bool = False,
698
- cidr_allowlist: Optional[Sequence[str]] = None,
698
+ outbound_cidr_allowlist: Optional[Sequence[str]] = None,
699
699
  inbound_cidr_allowlist: Optional[Sequence[str]] = None,
700
700
  volumes: dict[Union[str, os.PathLike], Union[_Volume, _CloudBucketMount]] = {},
701
701
  pty: bool = False,
@@ -773,21 +773,21 @@ class _Sandbox(_Object, type_prefix="sb"):
773
773
  )
774
774
 
775
775
  if block_network:
776
- if cidr_allowlist is not None:
777
- raise InvalidError("`cidr_allowlist` cannot be used when `block_network` is enabled")
776
+ if outbound_cidr_allowlist is not None:
777
+ raise InvalidError("`outbound_cidr_allowlist` cannot be used when `block_network` is enabled")
778
778
  if inbound_cidr_allowlist is not None:
779
779
  raise InvalidError("`inbound_cidr_allowlist` cannot be used when `block_network` is enabled")
780
780
  network_access = api_pb2.NetworkAccess(
781
781
  network_access_type=api_pb2.NetworkAccess.NetworkAccessType.BLOCKED,
782
782
  )
783
- elif cidr_allowlist is None:
783
+ elif outbound_cidr_allowlist is None:
784
784
  network_access = api_pb2.NetworkAccess(
785
785
  network_access_type=api_pb2.NetworkAccess.NetworkAccessType.OPEN,
786
786
  )
787
787
  else:
788
788
  network_access = api_pb2.NetworkAccess(
789
789
  network_access_type=api_pb2.NetworkAccess.NetworkAccessType.ALLOWLIST,
790
- allowed_cidrs=cidr_allowlist,
790
+ allowed_cidrs=outbound_cidr_allowlist,
791
791
  )
792
792
 
793
793
  async def _load(
@@ -1386,10 +1386,10 @@ class _Sandbox(_Object, type_prefix="sb"):
1386
1386
  return self._command_router_client
1387
1387
 
1388
1388
  @property
1389
- def _experimental_containers(self) -> "_SandboxContainerManager":
1390
- """Manage additional containers running in this Sandbox."""
1389
+ def _experimental_sidecars(self) -> "_SidecarManager":
1390
+ """Manage sidecar containers running in this Sandbox."""
1391
1391
  self._ensure_attached()
1392
- return _SandboxContainerManager(self)
1392
+ return _SidecarManager(self)
1393
1393
 
1394
1394
  @overload
1395
1395
  async def exec(
@@ -1661,6 +1661,10 @@ class _Sandbox(_Object, type_prefix="sb"):
1661
1661
  sandbox_name_override=name,
1662
1662
  sandbox_name_override_type=api_pb2.SandboxRestoreRequest.SANDBOX_NAME_OVERRIDE_TYPE_STRING,
1663
1663
  )
1664
+ # Pin the restored Sandbox to a specific worker when MODAL_WORKER_ID is
1665
+ # set.
1666
+ if worker_id := config.get("worker_id"):
1667
+ restore_req.worker_id = worker_id
1664
1668
  restore_resp: api_pb2.SandboxRestoreResponse = await client.stub.SandboxRestore(restore_req)
1665
1669
 
1666
1670
  sandbox = await _Sandbox.from_id(restore_resp.sandbox_id, client)
@@ -1854,7 +1858,7 @@ class _Sandbox(_Object, type_prefix="sb"):
1854
1858
  before_timestamp = resp.sandboxes[-1].created_at
1855
1859
 
1856
1860
 
1857
- class _SandboxContainer:
1861
+ class _SidecarContainer:
1858
1862
  """Handle to an additional container running in a Sandbox."""
1859
1863
 
1860
1864
  _result: Optional[api_pb2.GenericResult]
@@ -1882,9 +1886,9 @@ class _SandboxContainer:
1882
1886
  return self._container_name
1883
1887
 
1884
1888
  @staticmethod
1885
- def _from_container_info(sandbox: "_Sandbox", container_info: sr_pb2.TaskContainerInfo) -> "_SandboxContainer":
1889
+ def _from_container_info(sandbox: "_Sandbox", container_info: sr_pb2.TaskContainerInfo) -> "_SidecarContainer":
1886
1890
  result = container_info.result if container_info.HasField("result") else None
1887
- return _SandboxContainer(sandbox, container_info.container_id, container_info.container_name, result)
1891
+ return _SidecarContainer(sandbox, container_info.container_id, container_info.container_name, result)
1888
1892
 
1889
1893
  async def _get_command_router(self) -> tuple[str, "TaskCommandRouterClient"]:
1890
1894
  """Get task ID and command router client."""
@@ -2031,8 +2035,11 @@ class _SandboxContainer:
2031
2035
  return _result_returncode(self._result)
2032
2036
 
2033
2037
 
2034
- class _SandboxContainerManager:
2035
- """Creates and manages additional containers in a Sandbox."""
2038
+ _MAIN_CONTAINER_NAME: str = "main"
2039
+
2040
+
2041
+ class _SidecarManager:
2042
+ """Creates and manages sidecar containers in a Sandbox."""
2036
2043
 
2037
2044
  def __init__(self, sandbox: _Sandbox) -> None:
2038
2045
  self._sandbox = sandbox
@@ -2051,22 +2058,24 @@ class _SandboxContainerManager:
2051
2058
  env: Optional[dict[str, str]] = None,
2052
2059
  secrets: Optional[Collection[_Secret]] = None,
2053
2060
  workdir: Optional[str] = None,
2054
- ) -> _SandboxContainer:
2061
+ ) -> _SidecarContainer:
2062
+ if name == _MAIN_CONTAINER_NAME:
2063
+ raise InvalidError(f"The name {_MAIN_CONTAINER_NAME!r} is reserved for the sandbox's main container.")
2055
2064
  if workdir is not None and not workdir.startswith("/"):
2056
2065
  raise InvalidError(f"workdir must be an absolute path, got: {workdir}")
2057
2066
  _validate_exec_args(args)
2058
2067
 
2059
2068
  if image._mount_layers:
2060
2069
  raise InvalidError(
2061
- "Sandbox._experimental_containers.create(image=...) only supports pre-built images. "
2070
+ "Sandbox._experimental_sidecars.create(image=...) only supports pre-built images. "
2062
2071
  "When using `add_local*` methods, specify `copy=True` and call `.build()` before passing "
2063
- "the image to `._experimental_containers.create()`:\n\nE.g.\n"
2072
+ "the image to `._experimental_sidecars.create()`:\n\nE.g.\n"
2064
2073
  'img = modal.Image.debian_slim().add_local_file("foo", "/foo", copy=True).build(app)\n'
2065
- 'sandbox._experimental_containers.create(name="worker", image=img)'
2074
+ 'sandbox._experimental_sidecars.create(name="worker", image=img)'
2066
2075
  )
2067
2076
  if not image._object_id:
2068
2077
  raise InvalidError(
2069
- "Sandbox._experimental_containers.create(image=...) currently only supports Images that are "
2078
+ "Sandbox._experimental_sidecars.create(image=...) currently only supports Images that are "
2070
2079
  "either:\n"
2071
2080
  "- prebuilt using `image.build()`\n"
2072
2081
  "- referenced by id, e.g. `Image.from_id()`\n"
@@ -2092,9 +2101,14 @@ class _SandboxContainerManager:
2092
2101
  create_resp = await command_router_client.container_create(create_req)
2093
2102
  container_id = create_resp.container_id
2094
2103
  container_name = create_resp.container_name or name
2095
- return _SandboxContainer(self._sandbox, container_id, container_name)
2104
+ return _SidecarContainer(self._sandbox, container_id, container_name)
2096
2105
 
2097
- async def get(self, *, name: str, include_terminated: bool = False) -> "_SandboxContainer":
2106
+ async def get(self, *, name: str, include_terminated: bool = False) -> "_SidecarContainer":
2107
+ if name == _MAIN_CONTAINER_NAME:
2108
+ raise InvalidError(
2109
+ "Cannot get the main sandbox container through the sidecars API. "
2110
+ "Use Sandbox methods directly to interact with the main container."
2111
+ )
2098
2112
  task_id, command_router_client = await self._get_command_router()
2099
2113
  resp = await command_router_client.container_get(
2100
2114
  sr_pb2.TaskContainerGetRequest(
@@ -2103,16 +2117,20 @@ class _SandboxContainerManager:
2103
2117
  include_terminated=include_terminated,
2104
2118
  )
2105
2119
  )
2106
- return _SandboxContainer._from_container_info(self._sandbox, resp.container)
2120
+ return _SidecarContainer._from_container_info(self._sandbox, resp.container)
2107
2121
 
2108
- async def list(self, include_terminated: bool = False) -> builtins.list[_SandboxContainer]:
2122
+ async def list(self, include_terminated: bool = False) -> builtins.list[_SidecarContainer]:
2109
2123
  task_id, command_router_client = await self._get_command_router()
2110
2124
  resp = await command_router_client.container_list(
2111
2125
  sr_pb2.TaskContainerListRequest(task_id=task_id, include_terminated=include_terminated)
2112
2126
  )
2113
- return [_SandboxContainer._from_container_info(self._sandbox, container) for container in resp.containers]
2127
+ return [
2128
+ _SidecarContainer._from_container_info(self._sandbox, container)
2129
+ for container in resp.containers
2130
+ if container.container_name != _MAIN_CONTAINER_NAME
2131
+ ]
2114
2132
 
2115
2133
 
2116
- SandboxContainer = synchronize_api(_SandboxContainer)
2117
- SandboxContainerManager = synchronize_api(_SandboxContainerManager)
2134
+ SidecarContainer = synchronize_api(_SidecarContainer)
2135
+ SidecarManager = synchronize_api(_SidecarManager)
2118
2136
  Sandbox = synchronize_api(_Sandbox)
@@ -323,7 +323,7 @@ class _Sandbox(modal._object._Object):
323
323
  cloud: typing.Optional[str] = None,
324
324
  region: typing.Union[str, collections.abc.Sequence[str], None] = None,
325
325
  block_network: bool = False,
326
- cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
326
+ outbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
327
327
  inbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
328
328
  volumes: dict[
329
329
  typing.Union[str, os.PathLike],
@@ -533,8 +533,8 @@ class _Sandbox(modal._object._Object):
533
533
  self, task_id: str
534
534
  ) -> modal._utils.task_command_router_client.TaskCommandRouterClient: ...
535
535
  @property
536
- def _experimental_containers(self) -> _SandboxContainerManager:
537
- """Manage additional containers running in this Sandbox."""
536
+ def _experimental_sidecars(self) -> _SidecarManager:
537
+ """Manage sidecar containers running in this Sandbox."""
538
538
  ...
539
539
 
540
540
  @typing.overload
@@ -697,7 +697,7 @@ class _Sandbox(modal._object._Object):
697
697
  """
698
698
  ...
699
699
 
700
- class _SandboxContainer:
700
+ class _SidecarContainer:
701
701
  """Handle to an additional container running in a Sandbox."""
702
702
 
703
703
  _result: typing.Optional[modal_proto.api_pb2.GenericResult]
@@ -720,7 +720,7 @@ class _SandboxContainer:
720
720
  @staticmethod
721
721
  def _from_container_info(
722
722
  sandbox: _Sandbox, container_info: modal_proto.task_command_router_pb2.TaskContainerInfo
723
- ) -> _SandboxContainer: ...
723
+ ) -> _SidecarContainer: ...
724
724
  async def _get_command_router(self) -> tuple[str, modal._utils.task_command_router_client.TaskCommandRouterClient]:
725
725
  """Get task ID and command router client."""
726
726
  ...
@@ -765,8 +765,8 @@ class _SandboxContainer:
765
765
  @typing.overload
766
766
  async def terminate(self, *, wait: typing.Literal[False] = False) -> None: ...
767
767
 
768
- class _SandboxContainerManager:
769
- """Creates and manages additional containers in a Sandbox."""
768
+ class _SidecarManager:
769
+ """Creates and manages sidecar containers in a Sandbox."""
770
770
  def __init__(self, sandbox: _Sandbox) -> None:
771
771
  """Initialize self. See help(type(self)) for accurate signature."""
772
772
  ...
@@ -783,11 +783,11 @@ class _SandboxContainerManager:
783
783
  env: typing.Optional[dict[str, str]] = None,
784
784
  secrets: typing.Optional[collections.abc.Collection[modal.secret._Secret]] = None,
785
785
  workdir: typing.Optional[str] = None,
786
- ) -> _SandboxContainer: ...
787
- async def get(self, *, name: str, include_terminated: bool = False) -> _SandboxContainer: ...
788
- async def list(self, include_terminated: bool = False) -> list[_SandboxContainer]: ...
786
+ ) -> _SidecarContainer: ...
787
+ async def get(self, *, name: str, include_terminated: bool = False) -> _SidecarContainer: ...
788
+ async def list(self, include_terminated: bool = False) -> list[_SidecarContainer]: ...
789
789
 
790
- class SandboxContainer:
790
+ class SidecarContainer:
791
791
  """Handle to an additional container running in a Sandbox."""
792
792
 
793
793
  _result: typing.Optional[modal_proto.api_pb2.GenericResult]
@@ -807,7 +807,7 @@ class SandboxContainer:
807
807
  @staticmethod
808
808
  def _from_container_info(
809
809
  sandbox: Sandbox, container_info: modal_proto.task_command_router_pb2.TaskContainerInfo
810
- ) -> SandboxContainer: ...
810
+ ) -> SidecarContainer: ...
811
811
 
812
812
  class ___get_command_router_spec(typing_extensions.Protocol):
813
813
  def __call__(self, /) -> tuple[str, modal._utils.task_command_router_client.TaskCommandRouterClient]:
@@ -913,8 +913,8 @@ class SandboxContainer:
913
913
 
914
914
  terminate: __terminate_spec
915
915
 
916
- class SandboxContainerManager:
917
- """Creates and manages additional containers in a Sandbox."""
916
+ class SidecarManager:
917
+ """Creates and manages sidecar containers in a Sandbox."""
918
918
  def __init__(self, sandbox: Sandbox) -> None: ...
919
919
 
920
920
  class ___get_command_router_spec(typing_extensions.Protocol):
@@ -938,7 +938,7 @@ class SandboxContainerManager:
938
938
  env: typing.Optional[dict[str, str]] = None,
939
939
  secrets: typing.Optional[collections.abc.Collection[modal.secret.Secret]] = None,
940
940
  workdir: typing.Optional[str] = None,
941
- ) -> SandboxContainer: ...
941
+ ) -> SidecarContainer: ...
942
942
  async def aio(
943
943
  self,
944
944
  /,
@@ -948,19 +948,19 @@ class SandboxContainerManager:
948
948
  env: typing.Optional[dict[str, str]] = None,
949
949
  secrets: typing.Optional[collections.abc.Collection[modal.secret.Secret]] = None,
950
950
  workdir: typing.Optional[str] = None,
951
- ) -> SandboxContainer: ...
951
+ ) -> SidecarContainer: ...
952
952
 
953
953
  create: __create_spec
954
954
 
955
955
  class __get_spec(typing_extensions.Protocol):
956
- def __call__(self, /, *, name: str, include_terminated: bool = False) -> SandboxContainer: ...
957
- async def aio(self, /, *, name: str, include_terminated: bool = False) -> SandboxContainer: ...
956
+ def __call__(self, /, *, name: str, include_terminated: bool = False) -> SidecarContainer: ...
957
+ async def aio(self, /, *, name: str, include_terminated: bool = False) -> SidecarContainer: ...
958
958
 
959
959
  get: __get_spec
960
960
 
961
961
  class __list_spec(typing_extensions.Protocol):
962
- def __call__(self, /, include_terminated: bool = False) -> list[SandboxContainer]: ...
963
- async def aio(self, /, include_terminated: bool = False) -> list[SandboxContainer]: ...
962
+ def __call__(self, /, include_terminated: bool = False) -> list[SidecarContainer]: ...
963
+ async def aio(self, /, include_terminated: bool = False) -> list[SidecarContainer]: ...
964
964
 
965
965
  list: __list_spec
966
966
 
@@ -1272,7 +1272,7 @@ class Sandbox(modal.object.Object):
1272
1272
  cloud: typing.Optional[str] = None,
1273
1273
  region: typing.Union[str, collections.abc.Sequence[str], None] = None,
1274
1274
  block_network: bool = False,
1275
- cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
1275
+ outbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
1276
1276
  inbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
1277
1277
  volumes: dict[
1278
1278
  typing.Union[str, os.PathLike],
@@ -1320,7 +1320,7 @@ class Sandbox(modal.object.Object):
1320
1320
  cloud: typing.Optional[str] = None,
1321
1321
  region: typing.Union[str, collections.abc.Sequence[str], None] = None,
1322
1322
  block_network: bool = False,
1323
- cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
1323
+ outbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
1324
1324
  inbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
1325
1325
  volumes: dict[
1326
1326
  typing.Union[str, os.PathLike],
@@ -1760,8 +1760,8 @@ class Sandbox(modal.object.Object):
1760
1760
  _get_command_router_client: ___get_command_router_client_spec
1761
1761
 
1762
1762
  @property
1763
- def _experimental_containers(self) -> SandboxContainerManager:
1764
- """Manage additional containers running in this Sandbox."""
1763
+ def _experimental_sidecars(self) -> SidecarManager:
1764
+ """Manage sidecar containers running in this Sandbox."""
1765
1765
  ...
1766
1766
 
1767
1767
  class __exec_spec(typing_extensions.Protocol):
@@ -2113,3 +2113,5 @@ class Sandbox(modal.object.Object):
2113
2113
  list: typing.ClassVar[__list_spec]
2114
2114
 
2115
2115
  _default_image: modal.image._Image
2116
+
2117
+ _MAIN_CONTAINER_NAME: str
@@ -87,14 +87,14 @@ class _SandboxFilesystem:
87
87
  """mdmd:namespace
88
88
  Namespace for Sandbox filesystem APIs."""
89
89
 
90
- _container: Union["modal.sandbox._Sandbox", "modal.sandbox._SandboxContainer"]
90
+ _container: Union["modal.sandbox._Sandbox", "modal.sandbox._SidecarContainer"]
91
91
 
92
- def __init__(self, container: Union["modal.sandbox._Sandbox", "modal.sandbox._SandboxContainer"]) -> None:
92
+ def __init__(self, container: Union["modal.sandbox._Sandbox", "modal.sandbox._SidecarContainer"]) -> None:
93
93
  """mdmd:hidden"""
94
- from modal.sandbox import _Sandbox, _SandboxContainer
94
+ from modal.sandbox import _Sandbox, _SidecarContainer
95
95
 
96
- # Use a weakref proxy to avoid circular references between Sandbox/SandboxContainer and SandboxFilesystem.
97
- self._container = cast(Union[_Sandbox, _SandboxContainer], weakref.proxy(container))
96
+ # Use a weakref proxy to avoid circular references between Sandbox/SidecarContainer and SandboxFilesystem.
97
+ self._container = cast(Union[_Sandbox, _SidecarContainer], weakref.proxy(container))
98
98
 
99
99
  async def copy_from_local(self, local_path: Union[str, os.PathLike], remote_path: str) -> None:
100
100
  """Copy a local file into the Sandbox.
@@ -80,9 +80,9 @@ class _SandboxFilesystem:
80
80
  Namespace for Sandbox filesystem APIs.
81
81
  """
82
82
 
83
- _container: typing.Union[modal.sandbox._Sandbox, modal.sandbox._SandboxContainer]
83
+ _container: typing.Union[modal.sandbox._Sandbox, modal.sandbox._SidecarContainer]
84
84
 
85
- def __init__(self, container: typing.Union[modal.sandbox._Sandbox, modal.sandbox._SandboxContainer]) -> None:
85
+ def __init__(self, container: typing.Union[modal.sandbox._Sandbox, modal.sandbox._SidecarContainer]) -> None:
86
86
  """mdmd:hidden"""
87
87
  ...
88
88
 
@@ -346,9 +346,9 @@ class SandboxFilesystem:
346
346
  Namespace for Sandbox filesystem APIs.
347
347
  """
348
348
 
349
- _container: typing.Union[modal.sandbox.Sandbox, modal.sandbox.SandboxContainer]
349
+ _container: typing.Union[modal.sandbox.Sandbox, modal.sandbox.SidecarContainer]
350
350
 
351
- def __init__(self, container: typing.Union[modal.sandbox.Sandbox, modal.sandbox.SandboxContainer]) -> None:
351
+ def __init__(self, container: typing.Union[modal.sandbox.Sandbox, modal.sandbox.SidecarContainer]) -> None:
352
352
  """mdmd:hidden"""
353
353
  ...
354
354
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.4.4.dev7
3
+ Version: 1.4.4.dev9
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0