modal 1.6.2.dev9__tar.gz → 1.6.2.dev10__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 (246) hide show
  1. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/PKG-INFO +1 -1
  2. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_workspace.py +14 -11
  3. modal-1.6.2.dev10/modal/cli/workspace.py +633 -0
  4. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/client.pyi +2 -2
  5. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/functions.pyi +6 -6
  6. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/workspace.pyi +6 -18
  7. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal.egg-info/PKG-INFO +1 -1
  8. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_version/__init__.py +1 -1
  9. modal-1.6.2.dev9/modal/cli/workspace.py +0 -269
  10. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/LICENSE +0 -0
  11. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/README.md +0 -0
  12. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/__init__.py +0 -0
  13. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/__main__.py +0 -0
  14. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_billing.py +0 -0
  15. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_cluster.py +0 -0
  16. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_cluster.pyi +0 -0
  17. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_container_entrypoint.py +0 -0
  18. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_environments.py +0 -0
  19. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_function_variants.py +0 -0
  20. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_functions.py +0 -0
  21. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_grpc_client.py +0 -0
  22. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_image.py +0 -0
  23. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_ipython.py +0 -0
  24. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_load_context.py +0 -0
  25. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_location.py +0 -0
  26. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_logs.py +0 -0
  27. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_logs_manager.py +0 -0
  28. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_logs_manager.pyi +0 -0
  29. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_metrics.py +0 -0
  30. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_metrics.pyi +0 -0
  31. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_object.py +0 -0
  32. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_outbound_policy.py +0 -0
  33. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_outbound_policy.pyi +0 -0
  34. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_output/__init__.py +0 -0
  35. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_output/manager.py +0 -0
  36. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_output/pty.py +0 -0
  37. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_output/rich.py +0 -0
  38. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_output/status.py +0 -0
  39. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_partial_function.py +0 -0
  40. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_resolver.py +0 -0
  41. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_resources.py +0 -0
  42. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_runtime/__init__.py +0 -0
  43. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_runtime/asgi.py +0 -0
  44. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_runtime/container_io_manager.py +0 -0
  45. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_runtime/container_io_manager.pyi +0 -0
  46. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_runtime/execution_context.py +0 -0
  47. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_runtime/execution_context.pyi +0 -0
  48. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  49. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_runtime/task_lifecycle_manager.py +0 -0
  50. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  51. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_runtime/telemetry.py +0 -0
  52. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_runtime/user_code_event_loop.py +0 -0
  53. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_runtime/user_code_imports.py +0 -0
  54. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_serialization.py +0 -0
  55. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_server.py +0 -0
  56. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_server.pyi +0 -0
  57. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_supports_logs.py +0 -0
  58. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_traceback.py +0 -0
  59. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_tunnel.py +0 -0
  60. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_tunnel.pyi +0 -0
  61. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_type_manager.py +0 -0
  62. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/__init__.py +0 -0
  63. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/app_utils.py +0 -0
  64. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/async_utils.py +0 -0
  65. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/auth_token_manager.py +0 -0
  66. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/blob_utils.py +0 -0
  67. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/browser_utils.py +0 -0
  68. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/bytes_io_segment_payload.py +0 -0
  69. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/curl_utils.py +0 -0
  70. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/deprecation.py +0 -0
  71. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/display_utils.py +0 -0
  72. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/docker_utils.py +0 -0
  73. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/function_utils.py +0 -0
  74. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/git_utils.py +0 -0
  75. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/grpc_testing.py +0 -0
  76. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/grpc_utils.py +0 -0
  77. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/hash_utils.py +0 -0
  78. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/http_utils.py +0 -0
  79. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/idle_countdown.py +0 -0
  80. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/jwt_utils.py +0 -0
  81. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/logger.py +0 -0
  82. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/mount_utils.py +0 -0
  83. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/name_utils.py +0 -0
  84. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/package_utils.py +0 -0
  85. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/pattern_utils.py +0 -0
  86. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/proxy_support.py +0 -0
  87. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/rand_pb_testing.py +0 -0
  88. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/sandbox_fs_utils.py +0 -0
  89. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/shell_utils.py +0 -0
  90. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_utils/time_utils.py +0 -0
  91. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_vendor/__init__.py +0 -0
  92. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  93. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_vendor/cloudpickle.py +0 -0
  94. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_vendor/tblib.py +0 -0
  95. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_vendor/version.py +0 -0
  96. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/_watcher.py +0 -0
  97. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/app.py +0 -0
  98. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/app.pyi +0 -0
  99. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/billing.py +0 -0
  100. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/billing.pyi +0 -0
  101. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/builder/2023.12.312.txt +0 -0
  102. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/builder/2023.12.txt +0 -0
  103. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/builder/2024.04.txt +0 -0
  104. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/builder/2024.10.txt +0 -0
  105. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/builder/2025.06.txt +0 -0
  106. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/builder/PREVIEW.txt +0 -0
  107. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/builder/README.md +0 -0
  108. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/builder/base-images.json +0 -0
  109. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/call_graph.py +0 -0
  110. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/__init__.py +0 -0
  111. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/_download.py +0 -0
  112. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/_help.py +0 -0
  113. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/_logs.py +0 -0
  114. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/_stats.py +0 -0
  115. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/_traceback.py +0 -0
  116. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/app.py +0 -0
  117. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/billing.py +0 -0
  118. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/changelog.py +0 -0
  119. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/config.py +0 -0
  120. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/container.py +0 -0
  121. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/curl.py +0 -0
  122. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/dashboard.py +0 -0
  123. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/dict.py +0 -0
  124. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/endpoint.py +0 -0
  125. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/entry_point.py +0 -0
  126. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/environment.py +0 -0
  127. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/function.py +0 -0
  128. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/image.py +0 -0
  129. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/import_refs.py +0 -0
  130. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/logo.py +0 -0
  131. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/network_file_system.py +0 -0
  132. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/profile.py +0 -0
  133. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/queues.py +0 -0
  134. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/run.py +0 -0
  135. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/secret.py +0 -0
  136. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/selector.py +0 -0
  137. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/server.py +0 -0
  138. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/shell.py +0 -0
  139. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/skills.py +0 -0
  140. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/token.py +0 -0
  141. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/utils.py +0 -0
  142. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cli/volume.py +0 -0
  143. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/client.py +0 -0
  144. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cloud_bucket_mount.py +0 -0
  145. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cloud_bucket_mount.pyi +0 -0
  146. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cls.py +0 -0
  147. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cls.pyi +0 -0
  148. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cluster.py +0 -0
  149. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/cluster.pyi +0 -0
  150. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/config.py +0 -0
  151. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/container_process.py +0 -0
  152. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/container_process.pyi +0 -0
  153. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/dict.py +0 -0
  154. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/dict.pyi +0 -0
  155. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/environments.py +0 -0
  156. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/environments.pyi +0 -0
  157. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/exception.py +0 -0
  158. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/experimental/__init__.py +0 -0
  159. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/experimental/_flash_container_entry.py +0 -0
  160. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/experimental/flash.py +0 -0
  161. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/experimental/flash.pyi +0 -0
  162. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/experimental/flash_server.py +0 -0
  163. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/experimental/flash_server.pyi +0 -0
  164. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/experimental/ipython.py +0 -0
  165. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/file_pattern_matcher.py +0 -0
  166. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/functions.py +0 -0
  167. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/image.py +0 -0
  168. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/image.pyi +0 -0
  169. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/io_streams.py +0 -0
  170. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/io_streams.pyi +0 -0
  171. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/mount.py +0 -0
  172. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/mount.pyi +0 -0
  173. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/network_file_system.py +0 -0
  174. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/network_file_system.pyi +0 -0
  175. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/object.py +0 -0
  176. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/object.pyi +0 -0
  177. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/output.py +0 -0
  178. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/parallel_map.py +0 -0
  179. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/parallel_map.pyi +0 -0
  180. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/partial_function.py +0 -0
  181. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/partial_function.pyi +0 -0
  182. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/proxy.py +0 -0
  183. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/proxy.pyi +0 -0
  184. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/py.typed +0 -0
  185. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/queue.py +0 -0
  186. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/queue.pyi +0 -0
  187. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/retries.py +0 -0
  188. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/runner.py +0 -0
  189. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/runner.pyi +0 -0
  190. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/running_app.py +0 -0
  191. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/sandbox/__init__.py +0 -0
  192. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/sandbox/_common.py +0 -0
  193. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/sandbox/_filesystem.py +0 -0
  194. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/sandbox/_sandbox.py +0 -0
  195. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/sandbox/_sidecar.py +0 -0
  196. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/sandbox/_snapshot.py +0 -0
  197. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/sandbox/_task_command_router_client.py +0 -0
  198. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/sandbox/sandbox.py +0 -0
  199. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/sandbox/sandbox.pyi +0 -0
  200. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/schedule.py +0 -0
  201. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/scheduler_placement.py +0 -0
  202. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/secret.py +0 -0
  203. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/secret.pyi +0 -0
  204. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/server.py +0 -0
  205. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/server.pyi +0 -0
  206. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/serving.py +0 -0
  207. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/serving.pyi +0 -0
  208. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/skills/modal/SKILL.md +0 -0
  209. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/stream_type.py +0 -0
  210. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/token_flow.py +0 -0
  211. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/token_flow.pyi +0 -0
  212. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/types.py +0 -0
  213. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/volume.py +0 -0
  214. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/volume.pyi +0 -0
  215. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal/workspace.py +0 -0
  216. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal.egg-info/SOURCES.txt +0 -0
  217. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal.egg-info/dependency_links.txt +0 -0
  218. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal.egg-info/entry_points.txt +0 -0
  219. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal.egg-info/requires.txt +0 -0
  220. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal.egg-info/top_level.txt +0 -0
  221. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_docs/__init__.py +0 -0
  222. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_docs/gen_cli_docs.py +0 -0
  223. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_docs/gen_cli_docs_main.py +0 -0
  224. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_docs/gen_reference_docs.py +0 -0
  225. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_docs/gen_reference_docs_main.py +0 -0
  226. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_docs/mdmd/__init__.py +0 -0
  227. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_docs/mdmd/mdmd.py +0 -0
  228. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_docs/mdmd/signatures.py +0 -0
  229. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_docs/mdmd/types.py +0 -0
  230. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_docs/reference_intro.md +0 -0
  231. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_proto/__init__.py +0 -0
  232. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_proto/api_grpc.py +0 -0
  233. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_proto/api_pb2.py +0 -0
  234. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_proto/api_pb2.pyi +0 -0
  235. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_proto/api_pb2_grpc.py +0 -0
  236. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_proto/api_pb2_grpc.pyi +0 -0
  237. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_proto/modal_api_grpc.py +0 -0
  238. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_proto/py.typed +0 -0
  239. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_proto/task_command_router_grpc.py +0 -0
  240. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_proto/task_command_router_pb2.py +0 -0
  241. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_proto/task_command_router_pb2.pyi +0 -0
  242. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  243. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  244. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/modal_version/__main__.py +0 -0
  245. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/pyproject.toml +0 -0
  246. {modal-1.6.2.dev9 → modal-1.6.2.dev10}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.6.2.dev9
3
+ Version: 1.6.2.dev10
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -8,7 +8,7 @@ from typing import Optional
8
8
 
9
9
  from google.protobuf.empty_pb2 import Empty
10
10
 
11
- from modal.exception import DeprecationError, InvalidError
11
+ from modal.exception import DeprecationError, InvalidError, NotFoundError
12
12
  from modal.types import ServiceUserInfo
13
13
  from modal_proto import api_pb2
14
14
 
@@ -629,8 +629,7 @@ class _WorkspaceServiceUserManager:
629
629
  service_user_name: The name of the Service User.
630
630
  environment_name: The name of the Environment to which the Service User's new role will
631
631
  apply.
632
- role: The access level to grant this Service User. Must be one of the strings `"no-access"`,
633
- `"viewer"`, or `"contributor"`.
632
+ role: The access level to grant this Service User.
634
633
 
635
634
  Examples:
636
635
 
@@ -644,6 +643,9 @@ class _WorkspaceServiceUserManager:
644
643
  ```
645
644
  """
646
645
 
646
+ if not role:
647
+ raise InvalidError("Invalid argument: `role` must not be empty.")
648
+
647
649
  if not self._workspace._is_hydrated:
648
650
  await self._workspace.hydrate()
649
651
 
@@ -663,8 +665,6 @@ class _WorkspaceServiceUserManager:
663
665
  async def info(self, name: str) -> ServiceUserInfo:
664
666
  """Get information about a specific Service User.
665
667
 
666
- To call this function, you are required to have Manager permissions in the Workspace.
667
-
668
668
  Args:
669
669
  name: The name of the Service User to introspect.
670
670
 
@@ -691,8 +691,6 @@ class _WorkspaceServiceUserManager:
691
691
  async def list(self) -> list[ServiceUserInfo]:
692
692
  """List all Service Users in the current workspace.
693
693
 
694
- To call this function, you are required to have Manager permissions in the Workspace.
695
-
696
694
  Returns:
697
695
  A list of `ServiceUserInfo` dataclasses.
698
696
 
@@ -712,13 +710,12 @@ class _WorkspaceServiceUserManager:
712
710
 
713
711
  return [ServiceUserInfo._from_proto(su) for su in resp.service_users]
714
712
 
715
- async def delete(self, name: str) -> None:
713
+ async def delete(self, name: str, *, allow_missing: bool = False) -> None:
716
714
  """Permanently delete a Service User.
717
715
 
718
- To call this function, you are required to have Manager permissions in the Workspace.
719
-
720
716
  Args:
721
717
  name: The name of the Service User to delete.
718
+ allow_missing: If `True`, do not throw an exception if the Service User does not exist.
722
719
 
723
720
  Examples:
724
721
 
@@ -731,4 +728,10 @@ class _WorkspaceServiceUserManager:
731
728
  if not self._workspace._is_hydrated:
732
729
  await self._workspace.hydrate()
733
730
 
734
- await self._workspace.client._stub.ServiceUserDelete(api_pb2.ServiceUserDeleteRequest(service_user_name=name))
731
+ try:
732
+ await self._workspace.client._stub.ServiceUserDelete(
733
+ api_pb2.ServiceUserDeleteRequest(service_user_name=name)
734
+ )
735
+ except NotFoundError:
736
+ if not allow_missing:
737
+ raise