modal 1.5.1.dev9__tar.gz → 1.5.1.dev11__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 (225) hide show
  1. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/PKG-INFO +2 -2
  2. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_image.py +36 -0
  3. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_server.py +1 -1
  4. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/client.pyi +2 -2
  5. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/server.pyi +1 -1
  6. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal.egg-info/PKG-INFO +2 -2
  7. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal.egg-info/requires.txt +1 -1
  8. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_proto/api_grpc.py +128 -0
  9. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_proto/api_pb2.py +985 -848
  10. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_proto/api_pb2.pyi +240 -1
  11. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_proto/api_pb2_grpc.py +265 -0
  12. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_proto/api_pb2_grpc.pyi +82 -0
  13. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_proto/modal_api_grpc.py +8 -0
  14. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_version/__init__.py +1 -1
  15. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/pyproject.toml +24 -11
  16. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/LICENSE +0 -0
  17. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/README.md +0 -0
  18. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/__init__.py +0 -0
  19. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/__main__.py +0 -0
  20. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_billing.py +0 -0
  21. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_clustered_functions.py +0 -0
  22. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_clustered_functions.pyi +0 -0
  23. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_container_entrypoint.py +0 -0
  24. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_environments.py +0 -0
  25. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_function_variants.py +0 -0
  26. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_functions.py +0 -0
  27. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_grpc_client.py +0 -0
  28. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_ipython.py +0 -0
  29. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_load_context.py +0 -0
  30. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_location.py +0 -0
  31. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_logs.py +0 -0
  32. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_object.py +0 -0
  33. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_output/__init__.py +0 -0
  34. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_output/manager.py +0 -0
  35. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_output/pty.py +0 -0
  36. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_output/rich.py +0 -0
  37. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_output/status.py +0 -0
  38. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_partial_function.py +0 -0
  39. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_resolver.py +0 -0
  40. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_resources.py +0 -0
  41. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_runtime/__init__.py +0 -0
  42. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_runtime/asgi.py +0 -0
  43. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_runtime/container_io_manager.py +0 -0
  44. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_runtime/container_io_manager.pyi +0 -0
  45. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_runtime/execution_context.py +0 -0
  46. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_runtime/execution_context.pyi +0 -0
  47. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  48. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_runtime/task_lifecycle_manager.py +0 -0
  49. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  50. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_runtime/telemetry.py +0 -0
  51. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_runtime/user_code_event_loop.py +0 -0
  52. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_runtime/user_code_imports.py +0 -0
  53. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_serialization.py +0 -0
  54. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_traceback.py +0 -0
  55. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_tunnel.py +0 -0
  56. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_tunnel.pyi +0 -0
  57. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_type_manager.py +0 -0
  58. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/__init__.py +0 -0
  59. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/app_utils.py +0 -0
  60. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/async_utils.py +0 -0
  61. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/auth_token_manager.py +0 -0
  62. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/blob_utils.py +0 -0
  63. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/browser_utils.py +0 -0
  64. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/bytes_io_segment_payload.py +0 -0
  65. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/deprecation.py +0 -0
  66. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/docker_utils.py +0 -0
  67. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/function_utils.py +0 -0
  68. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/git_utils.py +0 -0
  69. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/grpc_testing.py +0 -0
  70. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/grpc_utils.py +0 -0
  71. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/hash_utils.py +0 -0
  72. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/http_utils.py +0 -0
  73. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/jwt_utils.py +0 -0
  74. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/logger.py +0 -0
  75. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/mount_utils.py +0 -0
  76. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/name_utils.py +0 -0
  77. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/package_utils.py +0 -0
  78. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/pattern_utils.py +0 -0
  79. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/rand_pb_testing.py +0 -0
  80. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/sandbox_fs_utils.py +0 -0
  81. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/shell_utils.py +0 -0
  82. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/task_command_router_client.py +0 -0
  83. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_utils/time_utils.py +0 -0
  84. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_vendor/__init__.py +0 -0
  85. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  86. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_vendor/cloudpickle.py +0 -0
  87. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_vendor/tblib.py +0 -0
  88. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_vendor/version.py +0 -0
  89. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_watcher.py +0 -0
  90. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/_workspace.py +0 -0
  91. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/app.py +0 -0
  92. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/app.pyi +0 -0
  93. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/billing.py +0 -0
  94. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/billing.pyi +0 -0
  95. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/builder/2023.12.312.txt +0 -0
  96. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/builder/2023.12.txt +0 -0
  97. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/builder/2024.04.txt +0 -0
  98. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/builder/2024.10.txt +0 -0
  99. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/builder/2025.06.txt +0 -0
  100. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/builder/PREVIEW.txt +0 -0
  101. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/builder/README.md +0 -0
  102. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/builder/base-images.json +0 -0
  103. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/call_graph.py +0 -0
  104. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/__init__.py +0 -0
  105. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/_download.py +0 -0
  106. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/_help.py +0 -0
  107. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/_traceback.py +0 -0
  108. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/app.py +0 -0
  109. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/billing.py +0 -0
  110. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/bootstrap.py +0 -0
  111. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/changelog.py +0 -0
  112. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/cluster.py +0 -0
  113. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/config.py +0 -0
  114. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/container.py +0 -0
  115. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/dashboard.py +0 -0
  116. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/dict.py +0 -0
  117. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/entry_point.py +0 -0
  118. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/environment.py +0 -0
  119. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/image.py +0 -0
  120. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/import_refs.py +0 -0
  121. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/launch.py +0 -0
  122. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/logo.py +0 -0
  123. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/network_file_system.py +0 -0
  124. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/profile.py +0 -0
  125. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/programs/__init__.py +0 -0
  126. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/programs/run_jupyter.py +0 -0
  127. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/programs/vscode.py +0 -0
  128. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/queues.py +0 -0
  129. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/run.py +0 -0
  130. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/secret.py +0 -0
  131. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/selector.py +0 -0
  132. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/shell.py +0 -0
  133. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/skills.py +0 -0
  134. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/token.py +0 -0
  135. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/utils.py +0 -0
  136. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cli/volume.py +0 -0
  137. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/client.py +0 -0
  138. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cloud_bucket_mount.py +0 -0
  139. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cloud_bucket_mount.pyi +0 -0
  140. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cls.py +0 -0
  141. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/cls.pyi +0 -0
  142. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/config.py +0 -0
  143. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/container_process.py +0 -0
  144. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/container_process.pyi +0 -0
  145. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/dict.py +0 -0
  146. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/dict.pyi +0 -0
  147. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/environments.py +0 -0
  148. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/environments.pyi +0 -0
  149. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/exception.py +0 -0
  150. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/experimental/__init__.py +0 -0
  151. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/experimental/flash.py +0 -0
  152. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/experimental/flash.pyi +0 -0
  153. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/experimental/ipython.py +0 -0
  154. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/file_io.py +0 -0
  155. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/file_io.pyi +0 -0
  156. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/file_pattern_matcher.py +0 -0
  157. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/functions.py +0 -0
  158. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/functions.pyi +0 -0
  159. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/image.py +0 -0
  160. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/image.pyi +0 -0
  161. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/io_streams.py +0 -0
  162. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/io_streams.pyi +0 -0
  163. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/mount.py +0 -0
  164. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/mount.pyi +0 -0
  165. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/network_file_system.py +0 -0
  166. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/network_file_system.pyi +0 -0
  167. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/object.py +0 -0
  168. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/object.pyi +0 -0
  169. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/output.py +0 -0
  170. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/parallel_map.py +0 -0
  171. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/parallel_map.pyi +0 -0
  172. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/partial_function.py +0 -0
  173. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/partial_function.pyi +0 -0
  174. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/proxy.py +0 -0
  175. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/proxy.pyi +0 -0
  176. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/py.typed +0 -0
  177. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/queue.py +0 -0
  178. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/queue.pyi +0 -0
  179. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/retries.py +0 -0
  180. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/runner.py +0 -0
  181. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/runner.pyi +0 -0
  182. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/running_app.py +0 -0
  183. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/sandbox.py +0 -0
  184. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/sandbox.pyi +0 -0
  185. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/sandbox_fs.py +0 -0
  186. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/sandbox_fs.pyi +0 -0
  187. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/schedule.py +0 -0
  188. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/scheduler_placement.py +0 -0
  189. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/secret.py +0 -0
  190. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/secret.pyi +0 -0
  191. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/server.py +0 -0
  192. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/serving.py +0 -0
  193. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/serving.pyi +0 -0
  194. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/skills/modal/SKILL.md +0 -0
  195. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/snapshot.py +0 -0
  196. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/snapshot.pyi +0 -0
  197. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/stream_type.py +0 -0
  198. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/token_flow.py +0 -0
  199. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/token_flow.pyi +0 -0
  200. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/volume.py +0 -0
  201. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/volume.pyi +0 -0
  202. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/workspace.py +0 -0
  203. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal/workspace.pyi +0 -0
  204. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal.egg-info/SOURCES.txt +0 -0
  205. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal.egg-info/dependency_links.txt +0 -0
  206. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal.egg-info/entry_points.txt +0 -0
  207. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal.egg-info/top_level.txt +0 -0
  208. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_docs/__init__.py +0 -0
  209. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_docs/gen_cli_docs.py +0 -0
  210. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_docs/gen_cli_docs_main.py +0 -0
  211. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_docs/gen_reference_docs.py +0 -0
  212. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_docs/gen_reference_docs_main.py +0 -0
  213. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_docs/mdmd/__init__.py +0 -0
  214. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_docs/mdmd/mdmd.py +0 -0
  215. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_docs/mdmd/signatures.py +0 -0
  216. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_docs/mdmd/types.py +0 -0
  217. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_proto/__init__.py +0 -0
  218. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_proto/py.typed +0 -0
  219. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_proto/task_command_router_grpc.py +0 -0
  220. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_proto/task_command_router_pb2.py +0 -0
  221. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_proto/task_command_router_pb2.pyi +0 -0
  222. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  223. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  224. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/modal_version/__main__.py +0 -0
  225. {modal-1.5.1.dev9 → modal-1.5.1.dev11}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.1.dev9
3
+ Version: 1.5.1.dev11
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -23,7 +23,7 @@ Requires-Dist: grpclib<0.4.10,>=0.4.7; python_version < "3.14"
23
23
  Requires-Dist: grpclib<0.4.10,>=0.4.9; python_version >= "3.14"
24
24
  Requires-Dist: protobuf!=4.24.0,<7.0,>=3.19
25
25
  Requires-Dist: rich>=12.0.0
26
- Requires-Dist: synchronicity~=0.12.3
26
+ Requires-Dist: synchronicity~=0.12.5
27
27
  Requires-Dist: toml
28
28
  Requires-Dist: types-certifi
29
29
  Requires-Dist: types-toml
@@ -9,6 +9,7 @@ import typing
9
9
  import warnings
10
10
  from collections.abc import Callable, Collection, Sequence
11
11
  from dataclasses import dataclass, field
12
+ from functools import wraps
12
13
  from inspect import isfunction
13
14
  from pathlib import Path, PurePosixPath
14
15
  from typing import (
@@ -424,6 +425,20 @@ async def _image_await_build_result(image_id: str, client: _Client) -> api_pb2.I
424
425
  return result_response
425
426
 
426
427
 
428
+ def _requires_image_instance(method):
429
+ @wraps(method)
430
+ def wrapper(self, *args, **kwargs):
431
+ if not isinstance(self, _Image):
432
+ raise InvalidError(
433
+ "Image has not been constructed yet. "
434
+ f"Use one of the static factory methods prior to calling {method.__name__} "
435
+ "like `modal.Image.debian_slim`, `modal.Image.from_registry`, or `modal.Image.micromamba`"
436
+ )
437
+ return method(self, *args, **kwargs)
438
+
439
+ return wrapper
440
+
441
+
427
442
  class _Image(_Object, type_prefix="im"):
428
443
  """Base class for container images to run functions in.
429
444
 
@@ -755,6 +770,7 @@ class _Image(_Object, type_prefix="im"):
755
770
  context_mount_function=lambda: mount,
756
771
  )
757
772
 
773
+ @_requires_image_instance
758
774
  def add_local_file(self, local_path: str | Path, remote_path: str, *, copy: bool = False) -> "_Image":
759
775
  """Adds a local file to the image at `remote_path` within the container.
760
776
 
@@ -791,6 +807,7 @@ class _Image(_Object, type_prefix="im"):
791
807
  mount = _Mount._from_local_file(local_path, remote_path)
792
808
  return self._add_mount_layer_or_copy(mount, copy=copy)
793
809
 
810
+ @_requires_image_instance
794
811
  def add_local_dir(
795
812
  self,
796
813
  local_path: str | Path,
@@ -869,6 +886,7 @@ class _Image(_Object, type_prefix="im"):
869
886
  mount = _Mount._add_local_dir(Path(local_path), PurePosixPath(remote_path), ignore=_ignore_fn(ignore))
870
887
  return self._add_mount_layer_or_copy(mount, copy=copy)
871
888
 
889
+ @_requires_image_instance
872
890
  def add_local_python_source(
873
891
  self, *modules: str, copy: bool = False, ignore: Sequence[str] | Callable[[Path], bool] = NON_PYTHON_FILES
874
892
  ) -> "_Image":
@@ -1012,6 +1030,7 @@ class _Image(_Object, type_prefix="im"):
1012
1030
  await resolver.load(self, load_context)
1013
1031
  return self
1014
1032
 
1033
+ @_requires_image_instance
1015
1034
  def pip_install(
1016
1035
  self,
1017
1036
  *packages: str | list[str],
@@ -1098,6 +1117,7 @@ class _Image(_Object, type_prefix="im"):
1098
1117
  secrets=secrets,
1099
1118
  )
1100
1119
 
1120
+ @_requires_image_instance
1101
1121
  def pip_install_private_repos(
1102
1122
  self,
1103
1123
  *repositories: str,
@@ -1218,6 +1238,7 @@ class _Image(_Object, type_prefix="im"):
1218
1238
  force_build=self.force_build or force_build,
1219
1239
  )
1220
1240
 
1241
+ @_requires_image_instance
1221
1242
  def pip_install_from_requirements(
1222
1243
  self,
1223
1244
  requirements_txt: str,
@@ -1279,6 +1300,7 @@ class _Image(_Object, type_prefix="im"):
1279
1300
  secrets=secrets,
1280
1301
  )
1281
1302
 
1303
+ @_requires_image_instance
1282
1304
  def pip_install_from_pyproject(
1283
1305
  self,
1284
1306
  pyproject_toml: str,
@@ -1362,6 +1384,7 @@ class _Image(_Object, type_prefix="im"):
1362
1384
  gpu_config=parse_gpu_config(gpu),
1363
1385
  )
1364
1386
 
1387
+ @_requires_image_instance
1365
1388
  def uv_pip_install(
1366
1389
  self,
1367
1390
  *packages: str | list[str],
@@ -1493,6 +1516,7 @@ class _Image(_Object, type_prefix="im"):
1493
1516
  secrets=secrets,
1494
1517
  )
1495
1518
 
1519
+ @_requires_image_instance
1496
1520
  def poetry_install_from_file(
1497
1521
  self,
1498
1522
  poetry_pyproject_toml: str,
@@ -1602,6 +1626,7 @@ class _Image(_Object, type_prefix="im"):
1602
1626
  gpu_config=parse_gpu_config(gpu),
1603
1627
  )
1604
1628
 
1629
+ @_requires_image_instance
1605
1630
  def uv_sync(
1606
1631
  self,
1607
1632
  uv_project_dir: str = "./",
@@ -1785,6 +1810,7 @@ class _Image(_Object, type_prefix="im"):
1785
1810
  gpu_config=parse_gpu_config(gpu),
1786
1811
  )
1787
1812
 
1813
+ @_requires_image_instance
1788
1814
  def dockerfile_commands(
1789
1815
  self,
1790
1816
  *dockerfile_commands: str | list[str],
@@ -1873,6 +1899,7 @@ class _Image(_Object, type_prefix="im"):
1873
1899
  build_args=build_args,
1874
1900
  )
1875
1901
 
1902
+ @_requires_image_instance
1876
1903
  def entrypoint(
1877
1904
  self,
1878
1905
  entrypoint_commands: list[str],
@@ -1893,6 +1920,7 @@ class _Image(_Object, type_prefix="im"):
1893
1920
 
1894
1921
  return self.dockerfile_commands(dockerfile_cmd)
1895
1922
 
1923
+ @_requires_image_instance
1896
1924
  def shell(
1897
1925
  self,
1898
1926
  shell_commands: list[str],
@@ -1913,6 +1941,7 @@ class _Image(_Object, type_prefix="im"):
1913
1941
 
1914
1942
  return self.dockerfile_commands(dockerfile_cmd)
1915
1943
 
1944
+ @_requires_image_instance
1916
1945
  def run_commands(
1917
1946
  self,
1918
1947
  *commands: str | list[str],
@@ -1997,6 +2026,7 @@ class _Image(_Object, type_prefix="im"):
1997
2026
  _namespace=api_pb2.DEPLOYMENT_NAMESPACE_GLOBAL,
1998
2027
  )
1999
2028
 
2029
+ @_requires_image_instance
2000
2030
  def micromamba_install(
2001
2031
  self,
2002
2032
  *packages: str | list[str],
@@ -2528,6 +2558,7 @@ class _Image(_Object, type_prefix="im"):
2528
2558
  _namespace=api_pb2.DEPLOYMENT_NAMESPACE_GLOBAL,
2529
2559
  )
2530
2560
 
2561
+ @_requires_image_instance
2531
2562
  def apt_install(
2532
2563
  self,
2533
2564
  *packages: str | list[str],
@@ -2579,6 +2610,7 @@ class _Image(_Object, type_prefix="im"):
2579
2610
  secrets=secrets,
2580
2611
  )
2581
2612
 
2613
+ @_requires_image_instance
2582
2614
  def run_function(
2583
2615
  self,
2584
2616
  raw_f: Callable[..., Any],
@@ -2697,6 +2729,7 @@ class _Image(_Object, type_prefix="im"):
2697
2729
  force_build=self.force_build or force_build,
2698
2730
  )
2699
2731
 
2732
+ @_requires_image_instance
2700
2733
  def env(self, vars: dict[str, str]) -> "_Image":
2701
2734
  """Sets the environment variables in an Image.
2702
2735
 
@@ -2727,6 +2760,7 @@ class _Image(_Object, type_prefix="im"):
2727
2760
  dockerfile_function=build_dockerfile,
2728
2761
  )
2729
2762
 
2763
+ @_requires_image_instance
2730
2764
  def workdir(self, path: str | PurePosixPath) -> "_Image":
2731
2765
  """Set the working directory for subsequent image build steps and function execution.
2732
2766
 
@@ -2756,6 +2790,7 @@ class _Image(_Object, type_prefix="im"):
2756
2790
  dockerfile_function=build_dockerfile,
2757
2791
  )
2758
2792
 
2793
+ @_requires_image_instance
2759
2794
  def cmd(self, cmd: list[str]) -> "_Image":
2760
2795
  """Set the default command (`CMD`) to run when a container is started.
2761
2796
 
@@ -2784,6 +2819,7 @@ class _Image(_Object, type_prefix="im"):
2784
2819
 
2785
2820
  return self.dockerfile_commands(dockerfile_cmd)
2786
2821
 
2822
+ @_requires_image_instance
2787
2823
  def pipe(
2788
2824
  self,
2789
2825
  func: Callable[Concatenate["modal.Image", P], "modal.Image"],
@@ -52,7 +52,7 @@ class _Server:
52
52
  Instead, use the [`@app.server()`](https://modal.com/docs/sdk/py/latest/modal.App#server) decorator.
53
53
 
54
54
  ```python notest
55
- @app.server(port=8000, routing_region="us-east")
55
+ @app.server(port=8080, routing_region="us-east")
56
56
  class MyServer:
57
57
  @modal.enter()
58
58
  def start_server(self):
@@ -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.5.1.dev9",
38
+ version: str = "1.5.1.dev11",
39
39
  ):
40
40
  """mdmd:hidden
41
41
  The Modal client object is not intended to be instantiated directly by users.
@@ -205,7 +205,7 @@ class Client:
205
205
  server_url: str,
206
206
  client_type: int,
207
207
  credentials: typing.Optional[tuple[str, str]],
208
- version: str = "1.5.1.dev9",
208
+ version: str = "1.5.1.dev11",
209
209
  ):
210
210
  """mdmd:hidden
211
211
  The Modal client object is not intended to be instantiated directly by users.
@@ -14,7 +14,7 @@ class Server:
14
14
  Instead, use the [`@app.server()`](https://modal.com/docs/sdk/py/latest/modal.App#server) decorator.
15
15
 
16
16
  ```python notest
17
- @app.server(port=8000, routing_region="us-east")
17
+ @app.server(port=8080, routing_region="us-east")
18
18
  class MyServer:
19
19
  @modal.enter()
20
20
  def start_server(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.1.dev9
3
+ Version: 1.5.1.dev11
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -23,7 +23,7 @@ Requires-Dist: grpclib<0.4.10,>=0.4.7; python_version < "3.14"
23
23
  Requires-Dist: grpclib<0.4.10,>=0.4.9; python_version >= "3.14"
24
24
  Requires-Dist: protobuf!=4.24.0,<7.0,>=3.19
25
25
  Requires-Dist: rich>=12.0.0
26
- Requires-Dist: synchronicity~=0.12.3
26
+ Requires-Dist: synchronicity~=0.12.5
27
27
  Requires-Dist: toml
28
28
  Requires-Dist: types-certifi
29
29
  Requires-Dist: types-toml
@@ -4,7 +4,7 @@ certifi
4
4
  click~=8.1
5
5
  protobuf!=4.24.0,<7.0,>=3.19
6
6
  rich>=12.0.0
7
- synchronicity~=0.12.3
7
+ synchronicity~=0.12.5
8
8
  toml
9
9
  types-certifi
10
10
  types-toml
@@ -267,6 +267,10 @@ class ModalClientBase(abc.ABC):
267
267
  async def EndpointGetByName(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.EndpointGetByNameRequest, modal_proto.api_pb2.EndpointGetByNameResponse]') -> None:
268
268
  pass
269
269
 
270
+ @abc.abstractmethod
271
+ async def EndpointGetLifecycle(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.EndpointGetLifecycleRequest, modal_proto.api_pb2.EndpointGetLifecycleResponse]') -> None:
272
+ pass
273
+
270
274
  @abc.abstractmethod
271
275
  async def EndpointList(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.EndpointListRequest, modal_proto.api_pb2.EndpointListResponse]') -> None:
272
276
  pass
@@ -839,6 +843,34 @@ class ModalClientBase(abc.ABC):
839
843
  async def VolumeRename(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.VolumeRenameRequest, google.protobuf.empty_pb2.Empty]') -> None:
840
844
  pass
841
845
 
846
+ @abc.abstractmethod
847
+ async def WebhookTokenCreate(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.WebhookTokenCreateRequest, modal_proto.api_pb2.TokenCreateResponse]') -> None:
848
+ pass
849
+
850
+ @abc.abstractmethod
851
+ async def WebhookTokenDelete(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TokenDeleteRequest, google.protobuf.empty_pb2.Empty]') -> None:
852
+ pass
853
+
854
+ @abc.abstractmethod
855
+ async def WebhookTokenEnvironmentAdd(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.WebhookTokenEnvironmentAddRequest, google.protobuf.empty_pb2.Empty]') -> None:
856
+ pass
857
+
858
+ @abc.abstractmethod
859
+ async def WebhookTokenEnvironmentList(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.WebhookTokenEnvironmentListRequest, modal_proto.api_pb2.WebhookTokenEnvironmentListResponse]') -> None:
860
+ pass
861
+
862
+ @abc.abstractmethod
863
+ async def WebhookTokenEnvironmentRemove(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.WebhookTokenEnvironmentRemoveRequest, google.protobuf.empty_pb2.Empty]') -> None:
864
+ pass
865
+
866
+ @abc.abstractmethod
867
+ async def WebhookTokenList(self, stream: 'grpclib.server.Stream[google.protobuf.empty_pb2.Empty, modal_proto.api_pb2.WebhookTokenListResponse]') -> None:
868
+ pass
869
+
870
+ @abc.abstractmethod
871
+ async def WebhookTokenListForEnvironment(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.WebhookTokenListForEnvironmentRequest, modal_proto.api_pb2.WebhookTokenListResponse]') -> None:
872
+ pass
873
+
842
874
  @abc.abstractmethod
843
875
  async def WorkspaceBillingReport(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.WorkspaceBillingReportRequest, modal_proto.api_pb2.WorkspaceBillingReportItem]') -> None:
844
876
  pass
@@ -1229,6 +1261,12 @@ class ModalClientBase(abc.ABC):
1229
1261
  modal_proto.api_pb2.EndpointGetByNameRequest,
1230
1262
  modal_proto.api_pb2.EndpointGetByNameResponse,
1231
1263
  ),
1264
+ '/modal.client.ModalClient/EndpointGetLifecycle': grpclib.const.Handler(
1265
+ self.EndpointGetLifecycle,
1266
+ grpclib.const.Cardinality.UNARY_UNARY,
1267
+ modal_proto.api_pb2.EndpointGetLifecycleRequest,
1268
+ modal_proto.api_pb2.EndpointGetLifecycleResponse,
1269
+ ),
1232
1270
  '/modal.client.ModalClient/EndpointList': grpclib.const.Handler(
1233
1271
  self.EndpointList,
1234
1272
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -2087,6 +2125,48 @@ class ModalClientBase(abc.ABC):
2087
2125
  modal_proto.api_pb2.VolumeRenameRequest,
2088
2126
  google.protobuf.empty_pb2.Empty,
2089
2127
  ),
2128
+ '/modal.client.ModalClient/WebhookTokenCreate': grpclib.const.Handler(
2129
+ self.WebhookTokenCreate,
2130
+ grpclib.const.Cardinality.UNARY_UNARY,
2131
+ modal_proto.api_pb2.WebhookTokenCreateRequest,
2132
+ modal_proto.api_pb2.TokenCreateResponse,
2133
+ ),
2134
+ '/modal.client.ModalClient/WebhookTokenDelete': grpclib.const.Handler(
2135
+ self.WebhookTokenDelete,
2136
+ grpclib.const.Cardinality.UNARY_UNARY,
2137
+ modal_proto.api_pb2.TokenDeleteRequest,
2138
+ google.protobuf.empty_pb2.Empty,
2139
+ ),
2140
+ '/modal.client.ModalClient/WebhookTokenEnvironmentAdd': grpclib.const.Handler(
2141
+ self.WebhookTokenEnvironmentAdd,
2142
+ grpclib.const.Cardinality.UNARY_UNARY,
2143
+ modal_proto.api_pb2.WebhookTokenEnvironmentAddRequest,
2144
+ google.protobuf.empty_pb2.Empty,
2145
+ ),
2146
+ '/modal.client.ModalClient/WebhookTokenEnvironmentList': grpclib.const.Handler(
2147
+ self.WebhookTokenEnvironmentList,
2148
+ grpclib.const.Cardinality.UNARY_UNARY,
2149
+ modal_proto.api_pb2.WebhookTokenEnvironmentListRequest,
2150
+ modal_proto.api_pb2.WebhookTokenEnvironmentListResponse,
2151
+ ),
2152
+ '/modal.client.ModalClient/WebhookTokenEnvironmentRemove': grpclib.const.Handler(
2153
+ self.WebhookTokenEnvironmentRemove,
2154
+ grpclib.const.Cardinality.UNARY_UNARY,
2155
+ modal_proto.api_pb2.WebhookTokenEnvironmentRemoveRequest,
2156
+ google.protobuf.empty_pb2.Empty,
2157
+ ),
2158
+ '/modal.client.ModalClient/WebhookTokenList': grpclib.const.Handler(
2159
+ self.WebhookTokenList,
2160
+ grpclib.const.Cardinality.UNARY_UNARY,
2161
+ google.protobuf.empty_pb2.Empty,
2162
+ modal_proto.api_pb2.WebhookTokenListResponse,
2163
+ ),
2164
+ '/modal.client.ModalClient/WebhookTokenListForEnvironment': grpclib.const.Handler(
2165
+ self.WebhookTokenListForEnvironment,
2166
+ grpclib.const.Cardinality.UNARY_UNARY,
2167
+ modal_proto.api_pb2.WebhookTokenListForEnvironmentRequest,
2168
+ modal_proto.api_pb2.WebhookTokenListResponse,
2169
+ ),
2090
2170
  '/modal.client.ModalClient/WorkspaceBillingReport': grpclib.const.Handler(
2091
2171
  self.WorkspaceBillingReport,
2092
2172
  grpclib.const.Cardinality.UNARY_STREAM,
@@ -2489,6 +2569,12 @@ class ModalClientStub:
2489
2569
  modal_proto.api_pb2.EndpointGetByNameRequest,
2490
2570
  modal_proto.api_pb2.EndpointGetByNameResponse,
2491
2571
  )
2572
+ self.EndpointGetLifecycle = grpclib.client.UnaryUnaryMethod(
2573
+ channel,
2574
+ '/modal.client.ModalClient/EndpointGetLifecycle',
2575
+ modal_proto.api_pb2.EndpointGetLifecycleRequest,
2576
+ modal_proto.api_pb2.EndpointGetLifecycleResponse,
2577
+ )
2492
2578
  self.EndpointList = grpclib.client.UnaryUnaryMethod(
2493
2579
  channel,
2494
2580
  '/modal.client.ModalClient/EndpointList',
@@ -3347,6 +3433,48 @@ class ModalClientStub:
3347
3433
  modal_proto.api_pb2.VolumeRenameRequest,
3348
3434
  google.protobuf.empty_pb2.Empty,
3349
3435
  )
3436
+ self.WebhookTokenCreate = grpclib.client.UnaryUnaryMethod(
3437
+ channel,
3438
+ '/modal.client.ModalClient/WebhookTokenCreate',
3439
+ modal_proto.api_pb2.WebhookTokenCreateRequest,
3440
+ modal_proto.api_pb2.TokenCreateResponse,
3441
+ )
3442
+ self.WebhookTokenDelete = grpclib.client.UnaryUnaryMethod(
3443
+ channel,
3444
+ '/modal.client.ModalClient/WebhookTokenDelete',
3445
+ modal_proto.api_pb2.TokenDeleteRequest,
3446
+ google.protobuf.empty_pb2.Empty,
3447
+ )
3448
+ self.WebhookTokenEnvironmentAdd = grpclib.client.UnaryUnaryMethod(
3449
+ channel,
3450
+ '/modal.client.ModalClient/WebhookTokenEnvironmentAdd',
3451
+ modal_proto.api_pb2.WebhookTokenEnvironmentAddRequest,
3452
+ google.protobuf.empty_pb2.Empty,
3453
+ )
3454
+ self.WebhookTokenEnvironmentList = grpclib.client.UnaryUnaryMethod(
3455
+ channel,
3456
+ '/modal.client.ModalClient/WebhookTokenEnvironmentList',
3457
+ modal_proto.api_pb2.WebhookTokenEnvironmentListRequest,
3458
+ modal_proto.api_pb2.WebhookTokenEnvironmentListResponse,
3459
+ )
3460
+ self.WebhookTokenEnvironmentRemove = grpclib.client.UnaryUnaryMethod(
3461
+ channel,
3462
+ '/modal.client.ModalClient/WebhookTokenEnvironmentRemove',
3463
+ modal_proto.api_pb2.WebhookTokenEnvironmentRemoveRequest,
3464
+ google.protobuf.empty_pb2.Empty,
3465
+ )
3466
+ self.WebhookTokenList = grpclib.client.UnaryUnaryMethod(
3467
+ channel,
3468
+ '/modal.client.ModalClient/WebhookTokenList',
3469
+ google.protobuf.empty_pb2.Empty,
3470
+ modal_proto.api_pb2.WebhookTokenListResponse,
3471
+ )
3472
+ self.WebhookTokenListForEnvironment = grpclib.client.UnaryUnaryMethod(
3473
+ channel,
3474
+ '/modal.client.ModalClient/WebhookTokenListForEnvironment',
3475
+ modal_proto.api_pb2.WebhookTokenListForEnvironmentRequest,
3476
+ modal_proto.api_pb2.WebhookTokenListResponse,
3477
+ )
3350
3478
  self.WorkspaceBillingReport = grpclib.client.UnaryStreamMethod(
3351
3479
  channel,
3352
3480
  '/modal.client.ModalClient/WorkspaceBillingReport',