modal 1.1.5.dev52__tar.gz → 1.1.5.dev54__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.dev52 → modal-1.1.5.dev54}/PKG-INFO +1 -1
  2. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/function_utils.py +6 -1
  3. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/client.pyi +2 -2
  4. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal.egg-info/PKG-INFO +1 -1
  5. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/api.proto +20 -0
  6. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/api_grpc.py +17 -0
  7. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/api_pb2.py +1039 -1005
  8. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/api_pb2.pyi +77 -0
  9. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/api_pb2_grpc.py +34 -1
  10. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/api_pb2_grpc.pyi +13 -3
  11. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/modal_api_grpc.py +1 -0
  12. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_version/__init__.py +1 -1
  13. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/LICENSE +0 -0
  14. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/README.md +0 -0
  15. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/__init__.py +0 -0
  16. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/__main__.py +0 -0
  17. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_clustered_functions.py +0 -0
  18. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_clustered_functions.pyi +0 -0
  19. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_container_entrypoint.py +0 -0
  20. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_functions.py +0 -0
  21. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_ipython.py +0 -0
  22. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_location.py +0 -0
  23. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_object.py +0 -0
  24. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_output.py +0 -0
  25. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_partial_function.py +0 -0
  26. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_pty.py +0 -0
  27. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_resolver.py +0 -0
  28. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_resources.py +0 -0
  29. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_runtime/__init__.py +0 -0
  30. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_runtime/asgi.py +0 -0
  31. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_runtime/container_io_manager.py +0 -0
  32. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_runtime/container_io_manager.pyi +0 -0
  33. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_runtime/execution_context.py +0 -0
  34. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_runtime/execution_context.pyi +0 -0
  35. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  36. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_runtime/telemetry.py +0 -0
  37. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_runtime/user_code_imports.py +0 -0
  38. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_serialization.py +0 -0
  39. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_traceback.py +0 -0
  40. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_tunnel.py +0 -0
  41. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_tunnel.pyi +0 -0
  42. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_type_manager.py +0 -0
  43. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/__init__.py +0 -0
  44. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/app_utils.py +0 -0
  45. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/async_utils.py +0 -0
  46. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/auth_token_manager.py +0 -0
  47. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/blob_utils.py +0 -0
  48. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/bytes_io_segment_payload.py +0 -0
  49. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/deprecation.py +0 -0
  50. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/docker_utils.py +0 -0
  51. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/git_utils.py +0 -0
  52. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/grpc_testing.py +0 -0
  53. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/grpc_utils.py +0 -0
  54. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/hash_utils.py +0 -0
  55. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/http_utils.py +0 -0
  56. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/jwt_utils.py +0 -0
  57. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/logger.py +0 -0
  58. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/mount_utils.py +0 -0
  59. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/name_utils.py +0 -0
  60. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/package_utils.py +0 -0
  61. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/pattern_utils.py +0 -0
  62. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/rand_pb_testing.py +0 -0
  63. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/shell_utils.py +0 -0
  64. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_utils/time_utils.py +0 -0
  65. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_vendor/__init__.py +0 -0
  66. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  67. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_vendor/cloudpickle.py +0 -0
  68. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_vendor/tblib.py +0 -0
  69. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/_watcher.py +0 -0
  70. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/app.py +0 -0
  71. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/app.pyi +0 -0
  72. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/builder/2023.12.312.txt +0 -0
  73. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/builder/2023.12.txt +0 -0
  74. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/builder/2024.04.txt +0 -0
  75. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/builder/2024.10.txt +0 -0
  76. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/builder/2025.06.txt +0 -0
  77. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/builder/PREVIEW.txt +0 -0
  78. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/builder/README.md +0 -0
  79. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/builder/base-images.json +0 -0
  80. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/call_graph.py +0 -0
  81. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/__init__.py +0 -0
  82. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/_download.py +0 -0
  83. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/_traceback.py +0 -0
  84. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/app.py +0 -0
  85. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/cluster.py +0 -0
  86. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/config.py +0 -0
  87. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/container.py +0 -0
  88. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/dict.py +0 -0
  89. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/entry_point.py +0 -0
  90. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/environment.py +0 -0
  91. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/import_refs.py +0 -0
  92. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/launch.py +0 -0
  93. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/network_file_system.py +0 -0
  94. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/profile.py +0 -0
  95. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/programs/__init__.py +0 -0
  96. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/programs/launch_instance_ssh.py +0 -0
  97. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/programs/run_jupyter.py +0 -0
  98. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/programs/run_marimo.py +0 -0
  99. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/programs/vscode.py +0 -0
  100. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/queues.py +0 -0
  101. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/run.py +0 -0
  102. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/secret.py +0 -0
  103. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/token.py +0 -0
  104. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/utils.py +0 -0
  105. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cli/volume.py +0 -0
  106. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/client.py +0 -0
  107. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cloud_bucket_mount.py +0 -0
  108. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cloud_bucket_mount.pyi +0 -0
  109. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cls.py +0 -0
  110. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/cls.pyi +0 -0
  111. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/config.py +0 -0
  112. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/container_process.py +0 -0
  113. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/container_process.pyi +0 -0
  114. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/dict.py +0 -0
  115. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/dict.pyi +0 -0
  116. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/environments.py +0 -0
  117. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/environments.pyi +0 -0
  118. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/exception.py +0 -0
  119. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/experimental/__init__.py +0 -0
  120. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/experimental/flash.py +0 -0
  121. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/experimental/flash.pyi +0 -0
  122. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/experimental/ipython.py +0 -0
  123. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/file_io.py +0 -0
  124. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/file_io.pyi +0 -0
  125. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/file_pattern_matcher.py +0 -0
  126. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/functions.py +0 -0
  127. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/functions.pyi +0 -0
  128. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/gpu.py +0 -0
  129. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/image.py +0 -0
  130. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/image.pyi +0 -0
  131. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/io_streams.py +0 -0
  132. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/io_streams.pyi +0 -0
  133. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/mount.py +0 -0
  134. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/mount.pyi +0 -0
  135. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/network_file_system.py +0 -0
  136. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/network_file_system.pyi +0 -0
  137. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/object.py +0 -0
  138. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/object.pyi +0 -0
  139. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/output.py +0 -0
  140. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/parallel_map.py +0 -0
  141. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/parallel_map.pyi +0 -0
  142. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/partial_function.py +0 -0
  143. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/partial_function.pyi +0 -0
  144. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/proxy.py +0 -0
  145. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/proxy.pyi +0 -0
  146. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/py.typed +0 -0
  147. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/queue.py +0 -0
  148. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/queue.pyi +0 -0
  149. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/retries.py +0 -0
  150. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/runner.py +0 -0
  151. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/runner.pyi +0 -0
  152. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/running_app.py +0 -0
  153. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/sandbox.py +0 -0
  154. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/sandbox.pyi +0 -0
  155. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/schedule.py +0 -0
  156. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/scheduler_placement.py +0 -0
  157. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/secret.py +0 -0
  158. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/secret.pyi +0 -0
  159. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/serving.py +0 -0
  160. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/serving.pyi +0 -0
  161. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/snapshot.py +0 -0
  162. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/snapshot.pyi +0 -0
  163. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/stream_type.py +0 -0
  164. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/token_flow.py +0 -0
  165. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/token_flow.pyi +0 -0
  166. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/volume.py +0 -0
  167. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal/volume.pyi +0 -0
  168. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal.egg-info/SOURCES.txt +0 -0
  169. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal.egg-info/dependency_links.txt +0 -0
  170. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal.egg-info/entry_points.txt +0 -0
  171. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal.egg-info/requires.txt +0 -0
  172. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal.egg-info/top_level.txt +0 -0
  173. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_docs/__init__.py +0 -0
  174. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_docs/gen_cli_docs.py +0 -0
  175. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_docs/gen_reference_docs.py +0 -0
  176. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_docs/mdmd/__init__.py +0 -0
  177. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_docs/mdmd/mdmd.py +0 -0
  178. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_docs/mdmd/signatures.py +0 -0
  179. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/__init__.py +0 -0
  180. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/modal_options_grpc.py +0 -0
  181. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/options.proto +0 -0
  182. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/options_grpc.py +0 -0
  183. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/options_pb2.py +0 -0
  184. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/options_pb2.pyi +0 -0
  185. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/options_pb2_grpc.py +0 -0
  186. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/options_pb2_grpc.pyi +0 -0
  187. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/py.typed +0 -0
  188. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/sandbox_router.proto +0 -0
  189. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/sandbox_router_grpc.py +0 -0
  190. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/sandbox_router_pb2.py +0 -0
  191. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/sandbox_router_pb2.pyi +0 -0
  192. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/sandbox_router_pb2_grpc.py +0 -0
  193. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_proto/sandbox_router_pb2_grpc.pyi +0 -0
  194. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/modal_version/__main__.py +0 -0
  195. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/pyproject.toml +0 -0
  196. {modal-1.1.5.dev52 → modal-1.1.5.dev54}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.5.dev52
3
+ Version: 1.1.5.dev54
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -492,7 +492,12 @@ async def _process_result(result: api_pb2.GenericResult, data_format: int, stub,
492
492
  elif result.status == api_pb2.GenericResult.GENERIC_STATUS_INTERNAL_FAILURE:
493
493
  raise InternalFailure(result.exception)
494
494
  elif result.status != api_pb2.GenericResult.GENERIC_STATUS_SUCCESS:
495
- if data and data_format == api_pb2.DATA_FORMAT_PICKLE:
495
+ if data and data_format in (api_pb2.DATA_FORMAT_PICKLE, api_pb2.DATA_FORMAT_UNSPECIFIED):
496
+ # *Unspecified data format here but data present usually means that the exception
497
+ # was created by the server representing an exception that occurred during container
498
+ # startup (crash looping) that eventually got escalated to input failures.
499
+ # TaskResult doesn't specify data format, so these results don't have that metadata
500
+ # the moment.
496
501
  try:
497
502
  exc = deserialize(data, client)
498
503
  except DeserializationError as deser_exc:
@@ -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.dev52",
36
+ version: str = "1.1.5.dev54",
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.dev52",
167
+ version: str = "1.1.5.dev54",
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.dev52
3
+ Version: 1.1.5.dev54
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -7,6 +7,7 @@ package modal.client;
7
7
  import "modal_proto/options.proto";
8
8
  import "google/protobuf/empty.proto";
9
9
  import "google/protobuf/struct.proto";
10
+ import "google/protobuf/timestamp.proto";
10
11
  import "google/protobuf/wrappers.proto";
11
12
 
12
13
  enum AppDeployVisibility {
@@ -3546,6 +3547,24 @@ message WebhookConfig {
3546
3547
  bool requires_proxy_auth = 10;
3547
3548
  }
3548
3549
 
3550
+
3551
+ message WorkspaceBillingReportItem {
3552
+ string object_id = 1;
3553
+ string description = 2;
3554
+ string environment_name = 3;
3555
+ google.protobuf.Timestamp interval = 4;
3556
+ string cost = 5;
3557
+ map<string, string> tags = 6;
3558
+ }
3559
+
3560
+ message WorkspaceBillingReportRequest {
3561
+ // Workspace ID will be implicit in the request metadata
3562
+ google.protobuf.Timestamp start_timestamp = 1;
3563
+ google.protobuf.Timestamp end_timestamp = 2;
3564
+ string resolution = 3; // e.g. 'd' or 'h'; server defines what we accept
3565
+ repeated string tag_names = 4;
3566
+ }
3567
+
3549
3568
  message WorkspaceNameLookupResponse {
3550
3569
  string workspace_name = 1 [deprecated=true];
3551
3570
  string username = 2;
@@ -3777,5 +3796,6 @@ service ModalClient {
3777
3796
  rpc VolumeRename(VolumeRenameRequest) returns (google.protobuf.Empty);
3778
3797
 
3779
3798
  // Workspaces
3799
+ rpc WorkspaceBillingReport(WorkspaceBillingReportRequest) returns (stream WorkspaceBillingReportItem);
3780
3800
  rpc WorkspaceNameLookup(google.protobuf.Empty) returns (WorkspaceNameLookupResponse);
3781
3801
  }
@@ -12,6 +12,7 @@ if typing.TYPE_CHECKING:
12
12
  import modal_proto.options_pb2
13
13
  import google.protobuf.empty_pb2
14
14
  import google.protobuf.struct_pb2
15
+ import google.protobuf.timestamp_pb2
15
16
  import google.protobuf.wrappers_pb2
16
17
  import modal_proto.api_pb2
17
18
 
@@ -702,6 +703,10 @@ class ModalClientBase(abc.ABC):
702
703
  async def VolumeRename(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.VolumeRenameRequest, google.protobuf.empty_pb2.Empty]') -> None:
703
704
  pass
704
705
 
706
+ @abc.abstractmethod
707
+ async def WorkspaceBillingReport(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.WorkspaceBillingReportRequest, modal_proto.api_pb2.WorkspaceBillingReportItem]') -> None:
708
+ pass
709
+
705
710
  @abc.abstractmethod
706
711
  async def WorkspaceNameLookup(self, stream: 'grpclib.server.Stream[google.protobuf.empty_pb2.Empty, modal_proto.api_pb2.WorkspaceNameLookupResponse]') -> None:
707
712
  pass
@@ -1734,6 +1739,12 @@ class ModalClientBase(abc.ABC):
1734
1739
  modal_proto.api_pb2.VolumeRenameRequest,
1735
1740
  google.protobuf.empty_pb2.Empty,
1736
1741
  ),
1742
+ '/modal.client.ModalClient/WorkspaceBillingReport': grpclib.const.Handler(
1743
+ self.WorkspaceBillingReport,
1744
+ grpclib.const.Cardinality.UNARY_STREAM,
1745
+ modal_proto.api_pb2.WorkspaceBillingReportRequest,
1746
+ modal_proto.api_pb2.WorkspaceBillingReportItem,
1747
+ ),
1737
1748
  '/modal.client.ModalClient/WorkspaceNameLookup': grpclib.const.Handler(
1738
1749
  self.WorkspaceNameLookup,
1739
1750
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -2772,6 +2783,12 @@ class ModalClientStub:
2772
2783
  modal_proto.api_pb2.VolumeRenameRequest,
2773
2784
  google.protobuf.empty_pb2.Empty,
2774
2785
  )
2786
+ self.WorkspaceBillingReport = grpclib.client.UnaryStreamMethod(
2787
+ channel,
2788
+ '/modal.client.ModalClient/WorkspaceBillingReport',
2789
+ modal_proto.api_pb2.WorkspaceBillingReportRequest,
2790
+ modal_proto.api_pb2.WorkspaceBillingReportItem,
2791
+ )
2775
2792
  self.WorkspaceNameLookup = grpclib.client.UnaryUnaryMethod(
2776
2793
  channel,
2777
2794
  '/modal.client.ModalClient/WorkspaceNameLookup',