modAL 1.4.1.dev0__tar.gz → 1.4.1.dev1__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.dev0 → modal-1.4.1.dev1}/PKG-INFO +1 -1
  2. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/container.py +25 -4
  3. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/client.pyi +2 -2
  4. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/functions.pyi +6 -6
  5. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/mount.py +7 -5
  6. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal.egg-info/PKG-INFO +1 -1
  7. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/api_pb2.py +1040 -1040
  8. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/api_pb2.pyi +4 -1
  9. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_version/__init__.py +1 -1
  10. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/LICENSE +0 -0
  11. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/README.md +0 -0
  12. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/__init__.py +0 -0
  13. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/__main__.py +0 -0
  14. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_billing.py +0 -0
  15. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_clustered_functions.py +0 -0
  16. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_clustered_functions.pyi +0 -0
  17. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_container_entrypoint.py +0 -0
  18. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_functions.py +0 -0
  19. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_grpc_client.py +0 -0
  20. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_ipython.py +0 -0
  21. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_load_context.py +0 -0
  22. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_location.py +0 -0
  23. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_logs.py +0 -0
  24. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_object.py +0 -0
  25. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_output/__init__.py +0 -0
  26. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_output/manager.py +0 -0
  27. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_output/pty.py +0 -0
  28. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_output/rich.py +0 -0
  29. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_output/status.py +0 -0
  30. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_partial_function.py +0 -0
  31. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_resolver.py +0 -0
  32. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_resources.py +0 -0
  33. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/__init__.py +0 -0
  34. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/asgi.py +0 -0
  35. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/container_io_manager.py +0 -0
  36. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/container_io_manager.pyi +0 -0
  37. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/execution_context.py +0 -0
  38. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/execution_context.pyi +0 -0
  39. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  40. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/telemetry.py +0 -0
  41. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/user_code_event_loop.py +0 -0
  42. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/user_code_imports.py +0 -0
  43. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_serialization.py +0 -0
  44. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_server.py +0 -0
  45. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_traceback.py +0 -0
  46. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_tunnel.py +0 -0
  47. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_tunnel.pyi +0 -0
  48. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_type_manager.py +0 -0
  49. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/__init__.py +0 -0
  50. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/app_utils.py +0 -0
  51. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/async_utils.py +0 -0
  52. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/auth_token_manager.py +0 -0
  53. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/blob_utils.py +0 -0
  54. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/browser_utils.py +0 -0
  55. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/bytes_io_segment_payload.py +0 -0
  56. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/deprecation.py +0 -0
  57. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/docker_utils.py +0 -0
  58. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/function_utils.py +0 -0
  59. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/git_utils.py +0 -0
  60. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/grpc_testing.py +0 -0
  61. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/grpc_utils.py +0 -0
  62. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/hash_utils.py +0 -0
  63. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/http_utils.py +0 -0
  64. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/jwt_utils.py +0 -0
  65. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/logger.py +0 -0
  66. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/mount_utils.py +0 -0
  67. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/name_utils.py +0 -0
  68. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/package_utils.py +0 -0
  69. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/pattern_utils.py +0 -0
  70. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/rand_pb_testing.py +0 -0
  71. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/sandbox_fs_utils.py +0 -0
  72. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/shell_utils.py +0 -0
  73. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/task_command_router_client.py +0 -0
  74. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/time_utils.py +0 -0
  75. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_vendor/__init__.py +0 -0
  76. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  77. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_vendor/cloudpickle.py +0 -0
  78. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_vendor/tblib.py +0 -0
  79. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_vendor/version.py +0 -0
  80. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_watcher.py +0 -0
  81. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/app.py +0 -0
  82. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/app.pyi +0 -0
  83. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/billing.py +0 -0
  84. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/2023.12.312.txt +0 -0
  85. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/2023.12.txt +0 -0
  86. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/2024.04.txt +0 -0
  87. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/2024.10.txt +0 -0
  88. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/2025.06.txt +0 -0
  89. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/PREVIEW.txt +0 -0
  90. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/README.md +0 -0
  91. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/base-images.json +0 -0
  92. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/call_graph.py +0 -0
  93. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/__init__.py +0 -0
  94. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/_download.py +0 -0
  95. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/_traceback.py +0 -0
  96. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/app.py +0 -0
  97. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/billing.py +0 -0
  98. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/changelog.py +0 -0
  99. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/cluster.py +0 -0
  100. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/config.py +0 -0
  101. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/dashboard.py +0 -0
  102. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/dict.py +0 -0
  103. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/entry_point.py +0 -0
  104. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/environment.py +0 -0
  105. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/import_refs.py +0 -0
  106. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/launch.py +0 -0
  107. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/network_file_system.py +0 -0
  108. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/profile.py +0 -0
  109. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/programs/__init__.py +0 -0
  110. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/programs/run_jupyter.py +0 -0
  111. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/programs/vscode.py +0 -0
  112. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/queues.py +0 -0
  113. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/run.py +0 -0
  114. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/secret.py +0 -0
  115. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/selector.py +0 -0
  116. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/shell.py +0 -0
  117. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/token.py +0 -0
  118. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/utils.py +0 -0
  119. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/volume.py +0 -0
  120. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/client.py +0 -0
  121. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cloud_bucket_mount.py +0 -0
  122. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cloud_bucket_mount.pyi +0 -0
  123. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cls.py +0 -0
  124. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cls.pyi +0 -0
  125. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/config.py +0 -0
  126. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/container_process.py +0 -0
  127. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/container_process.pyi +0 -0
  128. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/dict.py +0 -0
  129. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/dict.pyi +0 -0
  130. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/environments.py +0 -0
  131. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/environments.pyi +0 -0
  132. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/exception.py +0 -0
  133. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/experimental/__init__.py +0 -0
  134. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/experimental/flash.py +0 -0
  135. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/experimental/flash.pyi +0 -0
  136. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/experimental/ipython.py +0 -0
  137. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/file_io.py +0 -0
  138. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/file_io.pyi +0 -0
  139. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/file_pattern_matcher.py +0 -0
  140. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/functions.py +0 -0
  141. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/image.py +0 -0
  142. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/image.pyi +0 -0
  143. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/io_streams.py +0 -0
  144. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/io_streams.pyi +0 -0
  145. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/mount.pyi +0 -0
  146. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/network_file_system.py +0 -0
  147. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/network_file_system.pyi +0 -0
  148. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/object.py +0 -0
  149. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/object.pyi +0 -0
  150. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/output.py +0 -0
  151. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/parallel_map.py +0 -0
  152. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/parallel_map.pyi +0 -0
  153. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/partial_function.py +0 -0
  154. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/partial_function.pyi +0 -0
  155. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/proxy.py +0 -0
  156. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/proxy.pyi +0 -0
  157. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/py.typed +0 -0
  158. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/queue.py +0 -0
  159. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/queue.pyi +0 -0
  160. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/retries.py +0 -0
  161. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/runner.py +0 -0
  162. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/runner.pyi +0 -0
  163. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/running_app.py +0 -0
  164. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/sandbox.py +0 -0
  165. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/sandbox.pyi +0 -0
  166. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/sandbox_fs.py +0 -0
  167. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/sandbox_fs.pyi +0 -0
  168. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/schedule.py +0 -0
  169. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/scheduler_placement.py +0 -0
  170. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/secret.py +0 -0
  171. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/secret.pyi +0 -0
  172. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/server.py +0 -0
  173. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/server.pyi +0 -0
  174. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/serving.py +0 -0
  175. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/serving.pyi +0 -0
  176. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/snapshot.py +0 -0
  177. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/snapshot.pyi +0 -0
  178. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/stream_type.py +0 -0
  179. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/token_flow.py +0 -0
  180. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/token_flow.pyi +0 -0
  181. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/volume.py +0 -0
  182. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/volume.pyi +0 -0
  183. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal.egg-info/SOURCES.txt +0 -0
  184. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal.egg-info/dependency_links.txt +0 -0
  185. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal.egg-info/entry_points.txt +0 -0
  186. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal.egg-info/requires.txt +0 -0
  187. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal.egg-info/top_level.txt +0 -0
  188. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/__init__.py +0 -0
  189. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/gen_cli_docs.py +0 -0
  190. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/gen_cli_docs_main.py +0 -0
  191. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/gen_reference_docs.py +0 -0
  192. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/gen_reference_docs_main.py +0 -0
  193. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/mdmd/__init__.py +0 -0
  194. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/mdmd/mdmd.py +0 -0
  195. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/mdmd/signatures.py +0 -0
  196. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/__init__.py +0 -0
  197. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/api_grpc.py +0 -0
  198. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/api_pb2_grpc.py +0 -0
  199. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/api_pb2_grpc.pyi +0 -0
  200. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/modal_api_grpc.py +0 -0
  201. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/py.typed +0 -0
  202. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/task_command_router_grpc.py +0 -0
  203. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/task_command_router_pb2.py +0 -0
  204. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/task_command_router_pb2.pyi +0 -0
  205. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  206. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  207. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_version/__main__.py +0 -0
  208. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/pyproject.toml +0 -0
  209. {modal-1.4.1.dev0 → modal-1.4.1.dev1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.4.1.dev0
3
+ Version: 1.4.1.dev1
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -1,4 +1,5 @@
1
1
  # Copyright Modal Labs 2022
2
+ import warnings
2
3
  from datetime import datetime, timezone
3
4
  from typing import Optional, Union
4
5
 
@@ -185,20 +186,40 @@ async def logs(
185
186
  task_info_resp = await client.stub.TaskGetInfo(api_pb2.TaskGetInfoRequest(task_id=task_id))
186
187
  app_id = task_info_resp.app_id
187
188
 
189
+ if not task_info_resp.info.started_at:
190
+ # Unlikely race or Modal backend issue, don't treat as a usage exception
191
+ return
192
+ container_started_dt = datetime.fromtimestamp(task_info_resp.info.started_at, timezone.utc)
193
+
188
194
  now = datetime.now(timezone.utc)
189
195
  if all_logs:
190
- since_dt = datetime.fromtimestamp(task_info_resp.info.started_at, timezone.utc)
196
+ since_dt = container_started_dt
191
197
  if task_info_resp.info.finished_at:
192
198
  until_dt = datetime.fromtimestamp(task_info_resp.info.finished_at, timezone.utc)
193
199
  else:
194
200
  until_dt = now
195
201
  else:
196
- since_dt = _parse_time_arg(since, default=now) if since else None
197
- until_dt = _parse_time_arg(until, default=now) if until else None
202
+ since_dt = _parse_time_arg(since, default=container_started_dt)
203
+ if task_info_resp.info.finished_at:
204
+ default_until_dt = datetime.fromtimestamp(task_info_resp.info.finished_at, timezone.utc)
205
+ else:
206
+ default_until_dt = now
207
+ until_dt = _parse_time_arg(until, default=default_until_dt)
198
208
 
199
- if since_dt is not None and until_dt is not None and since_dt >= until_dt:
209
+ if since is not None and until is not None and since_dt >= until_dt:
210
+ # User provided both --since and --until, but did so incorrectly
200
211
  raise UsageError("--since must be before --until.")
201
212
 
213
+ if since is not None and until is None and since_dt >= until_dt:
214
+ # User provided only --since and it is after the container finished
215
+ warnings.warn("--since time is after the Container finished, no logs to fetch.", UserWarning)
216
+ return
217
+
218
+ if until is not None and since is None and since_dt >= until_dt:
219
+ # User provided only --until and it is before the Container started
220
+ warnings.warn("--until time is before the Container started, no logs to fetch.", UserWarning)
221
+ return
222
+
202
223
  if since_dt is not None:
203
224
  effective_until = until_dt or now
204
225
  if effective_until - since_dt > _MAX_FETCH_RANGE:
@@ -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.dev0",
38
+ version: str = "1.4.1.dev1",
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.dev0",
174
+ version: str = "1.4.1.dev1",
175
175
  ):
176
176
  """mdmd:hidden
177
177
  The Modal client object is not intended to be instantiated directly by users.
@@ -348,7 +348,7 @@ class Function(
348
348
 
349
349
  _call_generator: ___call_generator_spec
350
350
 
351
- class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
351
+ class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
352
352
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
353
353
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
354
354
  ...
@@ -357,7 +357,7 @@ class Function(
357
357
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
358
358
  ...
359
359
 
360
- remote: __remote_spec[modal._functions.ReturnType, modal._functions.P]
360
+ remote: __remote_spec[modal._functions.P, modal._functions.ReturnType]
361
361
 
362
362
  class __remote_gen_spec(typing_extensions.Protocol):
363
363
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -384,7 +384,7 @@ class Function(
384
384
  """
385
385
  ...
386
386
 
387
- class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
387
+ class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
388
388
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
389
389
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
390
390
 
@@ -407,7 +407,7 @@ class Function(
407
407
  """
408
408
  ...
409
409
 
410
- _experimental_spawn: ___experimental_spawn_spec[modal._functions.ReturnType, modal._functions.P]
410
+ _experimental_spawn: ___experimental_spawn_spec[modal._functions.P, modal._functions.ReturnType]
411
411
 
412
412
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
413
413
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
@@ -415,7 +415,7 @@ class Function(
415
415
 
416
416
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
417
417
 
418
- class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
418
+ class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
419
419
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
420
420
  """Calls the function with the given arguments, without waiting for the results.
421
421
 
@@ -436,7 +436,7 @@ class Function(
436
436
  """
437
437
  ...
438
438
 
439
- spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P]
439
+ spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType]
440
440
 
441
441
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
442
442
  """Return the inner Python object wrapped by this Modal Function."""
@@ -699,16 +699,18 @@ Mount = synchronize_api(_Mount)
699
699
 
700
700
  def _create_client_mount():
701
701
  # TODO(erikbern): make this a static method on the Mount class
702
- import synchronicity
702
+ import importlib
703
703
 
704
- import modal
704
+ import synchronicity
705
705
 
706
- # Get the base_path because it also contains `modal_proto`.
707
- modal_parent_dir, _ = os.path.split(modal.__path__[0])
708
706
  client_mount = _Mount._new()
709
707
 
710
708
  for pkg_name in MODAL_PACKAGES:
711
- package_base_path = Path(modal_parent_dir) / pkg_name
709
+ # Look up each package's actual install path via importlib rather than
710
+ # assuming all packages are siblings of `modal`. In Bazel runfiles,
711
+ # modal and modal_proto live in different directories.
712
+ pkg_module = importlib.import_module(pkg_name)
713
+ package_base_path = Path(pkg_module.__path__[0])
712
714
  client_mount = client_mount.add_local_dir(
713
715
  package_base_path,
714
716
  remote_path=f"/pkg/{pkg_name}",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.4.1.dev0
3
+ Version: 1.4.1.dev1
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0