modal 1.6.0__tar.gz → 1.6.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 (242) hide show
  1. {modal-1.6.0 → modal-1.6.1.dev1}/PKG-INFO +1 -1
  2. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_functions.py +2 -2
  3. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_object.py +17 -9
  4. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/grpc_utils.py +11 -12
  5. modal-1.6.1.dev1/modal/cli/endpoint.py +779 -0
  6. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/server.py +170 -107
  7. {modal-1.6.0 → modal-1.6.1.dev1}/modal/client.pyi +2 -2
  8. {modal-1.6.0 → modal-1.6.1.dev1}/modal/config.py +14 -0
  9. {modal-1.6.0 → modal-1.6.1.dev1}/modal/dict.py +4 -4
  10. {modal-1.6.0 → modal-1.6.1.dev1}/modal/dict.pyi +9 -9
  11. {modal-1.6.0 → modal-1.6.1.dev1}/modal/functions.pyi +6 -4
  12. {modal-1.6.0 → modal-1.6.1.dev1}/modal/network_file_system.py +3 -3
  13. {modal-1.6.0 → modal-1.6.1.dev1}/modal/network_file_system.pyi +6 -6
  14. {modal-1.6.0 → modal-1.6.1.dev1}/modal/object.pyi +1 -1
  15. {modal-1.6.0 → modal-1.6.1.dev1}/modal/parallel_map.py +4 -4
  16. {modal-1.6.0 → modal-1.6.1.dev1}/modal/parallel_map.pyi +3 -3
  17. {modal-1.6.0 → modal-1.6.1.dev1}/modal/sandbox.py +15 -0
  18. {modal-1.6.0 → modal-1.6.1.dev1}/modal/sandbox.pyi +12 -0
  19. {modal-1.6.0 → modal-1.6.1.dev1}/modal/token_flow.py +2 -1
  20. {modal-1.6.0 → modal-1.6.1.dev1}/modal/volume.py +2 -2
  21. {modal-1.6.0 → modal-1.6.1.dev1}/modal/volume.pyi +9 -3
  22. {modal-1.6.0 → modal-1.6.1.dev1}/modal.egg-info/PKG-INFO +1 -1
  23. {modal-1.6.0 → modal-1.6.1.dev1}/modal_version/__init__.py +1 -1
  24. {modal-1.6.0 → modal-1.6.1.dev1}/pyproject.toml +1 -1
  25. modal-1.6.0/modal/cli/endpoint.py +0 -372
  26. {modal-1.6.0 → modal-1.6.1.dev1}/LICENSE +0 -0
  27. {modal-1.6.0 → modal-1.6.1.dev1}/README.md +0 -0
  28. {modal-1.6.0 → modal-1.6.1.dev1}/modal/__init__.py +0 -0
  29. {modal-1.6.0 → modal-1.6.1.dev1}/modal/__main__.py +0 -0
  30. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_billing.py +0 -0
  31. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_cluster.py +0 -0
  32. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_cluster.pyi +0 -0
  33. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_container_entrypoint.py +0 -0
  34. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_environments.py +0 -0
  35. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_function_variants.py +0 -0
  36. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_grpc_client.py +0 -0
  37. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_image.py +0 -0
  38. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_ipython.py +0 -0
  39. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_load_context.py +0 -0
  40. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_location.py +0 -0
  41. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_logs.py +0 -0
  42. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_logs_manager.py +0 -0
  43. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_logs_manager.pyi +0 -0
  44. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_outbound_policy.py +0 -0
  45. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_outbound_policy.pyi +0 -0
  46. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_output/__init__.py +0 -0
  47. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_output/manager.py +0 -0
  48. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_output/pty.py +0 -0
  49. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_output/rich.py +0 -0
  50. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_output/status.py +0 -0
  51. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_partial_function.py +0 -0
  52. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_resolver.py +0 -0
  53. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_resources.py +0 -0
  54. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/__init__.py +0 -0
  55. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/asgi.py +0 -0
  56. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/container_io_manager.py +0 -0
  57. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/container_io_manager.pyi +0 -0
  58. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/execution_context.py +0 -0
  59. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/execution_context.pyi +0 -0
  60. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  61. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/task_lifecycle_manager.py +0 -0
  62. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
  63. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/telemetry.py +0 -0
  64. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/user_code_event_loop.py +0 -0
  65. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_runtime/user_code_imports.py +0 -0
  66. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_serialization.py +0 -0
  67. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_server.py +0 -0
  68. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_server.pyi +0 -0
  69. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_supports_logs.py +0 -0
  70. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_traceback.py +0 -0
  71. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_tunnel.py +0 -0
  72. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_tunnel.pyi +0 -0
  73. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_type_manager.py +0 -0
  74. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/__init__.py +0 -0
  75. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/app_utils.py +0 -0
  76. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/async_utils.py +0 -0
  77. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/auth_token_manager.py +0 -0
  78. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/blob_utils.py +0 -0
  79. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/browser_utils.py +0 -0
  80. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/bytes_io_segment_payload.py +0 -0
  81. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/curl_utils.py +0 -0
  82. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/deprecation.py +0 -0
  83. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/display_utils.py +0 -0
  84. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/docker_utils.py +0 -0
  85. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/function_utils.py +0 -0
  86. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/git_utils.py +0 -0
  87. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/grpc_testing.py +0 -0
  88. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/hash_utils.py +0 -0
  89. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/http_utils.py +0 -0
  90. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/idle_countdown.py +0 -0
  91. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/jwt_utils.py +0 -0
  92. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/logger.py +0 -0
  93. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/mount_utils.py +0 -0
  94. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/name_utils.py +0 -0
  95. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/package_utils.py +0 -0
  96. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/pattern_utils.py +0 -0
  97. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/proxy_support.py +0 -0
  98. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/rand_pb_testing.py +0 -0
  99. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/sandbox_fs_utils.py +0 -0
  100. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/shell_utils.py +0 -0
  101. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/task_command_router_client.py +0 -0
  102. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_utils/time_utils.py +0 -0
  103. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_vendor/__init__.py +0 -0
  104. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  105. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_vendor/cloudpickle.py +0 -0
  106. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_vendor/tblib.py +0 -0
  107. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_vendor/version.py +0 -0
  108. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_watcher.py +0 -0
  109. {modal-1.6.0 → modal-1.6.1.dev1}/modal/_workspace.py +0 -0
  110. {modal-1.6.0 → modal-1.6.1.dev1}/modal/app.py +0 -0
  111. {modal-1.6.0 → modal-1.6.1.dev1}/modal/app.pyi +0 -0
  112. {modal-1.6.0 → modal-1.6.1.dev1}/modal/billing.py +0 -0
  113. {modal-1.6.0 → modal-1.6.1.dev1}/modal/billing.pyi +0 -0
  114. {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/2023.12.312.txt +0 -0
  115. {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/2023.12.txt +0 -0
  116. {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/2024.04.txt +0 -0
  117. {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/2024.10.txt +0 -0
  118. {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/2025.06.txt +0 -0
  119. {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/PREVIEW.txt +0 -0
  120. {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/README.md +0 -0
  121. {modal-1.6.0 → modal-1.6.1.dev1}/modal/builder/base-images.json +0 -0
  122. {modal-1.6.0 → modal-1.6.1.dev1}/modal/call_graph.py +0 -0
  123. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/__init__.py +0 -0
  124. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/_download.py +0 -0
  125. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/_help.py +0 -0
  126. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/_logs.py +0 -0
  127. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/_stats.py +0 -0
  128. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/_traceback.py +0 -0
  129. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/app.py +0 -0
  130. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/billing.py +0 -0
  131. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/changelog.py +0 -0
  132. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/config.py +0 -0
  133. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/container.py +0 -0
  134. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/curl.py +0 -0
  135. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/dashboard.py +0 -0
  136. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/dict.py +0 -0
  137. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/entry_point.py +0 -0
  138. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/environment.py +0 -0
  139. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/function.py +0 -0
  140. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/image.py +0 -0
  141. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/import_refs.py +0 -0
  142. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/logo.py +0 -0
  143. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/network_file_system.py +0 -0
  144. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/profile.py +0 -0
  145. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/queues.py +0 -0
  146. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/run.py +0 -0
  147. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/secret.py +0 -0
  148. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/selector.py +0 -0
  149. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/shell.py +0 -0
  150. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/skills.py +0 -0
  151. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/token.py +0 -0
  152. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/utils.py +0 -0
  153. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/volume.py +0 -0
  154. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cli/workspace.py +0 -0
  155. {modal-1.6.0 → modal-1.6.1.dev1}/modal/client.py +0 -0
  156. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cloud_bucket_mount.py +0 -0
  157. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cloud_bucket_mount.pyi +0 -0
  158. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cls.py +0 -0
  159. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cls.pyi +0 -0
  160. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cluster.py +0 -0
  161. {modal-1.6.0 → modal-1.6.1.dev1}/modal/cluster.pyi +0 -0
  162. {modal-1.6.0 → modal-1.6.1.dev1}/modal/container_process.py +0 -0
  163. {modal-1.6.0 → modal-1.6.1.dev1}/modal/container_process.pyi +0 -0
  164. {modal-1.6.0 → modal-1.6.1.dev1}/modal/environments.py +0 -0
  165. {modal-1.6.0 → modal-1.6.1.dev1}/modal/environments.pyi +0 -0
  166. {modal-1.6.0 → modal-1.6.1.dev1}/modal/exception.py +0 -0
  167. {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/__init__.py +0 -0
  168. {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/_flash_container_entry.py +0 -0
  169. {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/flash.py +0 -0
  170. {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/flash.pyi +0 -0
  171. {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/flash_server.py +0 -0
  172. {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/flash_server.pyi +0 -0
  173. {modal-1.6.0 → modal-1.6.1.dev1}/modal/experimental/ipython.py +0 -0
  174. {modal-1.6.0 → modal-1.6.1.dev1}/modal/file_pattern_matcher.py +0 -0
  175. {modal-1.6.0 → modal-1.6.1.dev1}/modal/functions.py +0 -0
  176. {modal-1.6.0 → modal-1.6.1.dev1}/modal/image.py +0 -0
  177. {modal-1.6.0 → modal-1.6.1.dev1}/modal/image.pyi +0 -0
  178. {modal-1.6.0 → modal-1.6.1.dev1}/modal/io_streams.py +0 -0
  179. {modal-1.6.0 → modal-1.6.1.dev1}/modal/io_streams.pyi +0 -0
  180. {modal-1.6.0 → modal-1.6.1.dev1}/modal/mount.py +0 -0
  181. {modal-1.6.0 → modal-1.6.1.dev1}/modal/mount.pyi +0 -0
  182. {modal-1.6.0 → modal-1.6.1.dev1}/modal/object.py +0 -0
  183. {modal-1.6.0 → modal-1.6.1.dev1}/modal/output.py +0 -0
  184. {modal-1.6.0 → modal-1.6.1.dev1}/modal/partial_function.py +0 -0
  185. {modal-1.6.0 → modal-1.6.1.dev1}/modal/partial_function.pyi +0 -0
  186. {modal-1.6.0 → modal-1.6.1.dev1}/modal/proxy.py +0 -0
  187. {modal-1.6.0 → modal-1.6.1.dev1}/modal/proxy.pyi +0 -0
  188. {modal-1.6.0 → modal-1.6.1.dev1}/modal/py.typed +0 -0
  189. {modal-1.6.0 → modal-1.6.1.dev1}/modal/queue.py +0 -0
  190. {modal-1.6.0 → modal-1.6.1.dev1}/modal/queue.pyi +0 -0
  191. {modal-1.6.0 → modal-1.6.1.dev1}/modal/retries.py +0 -0
  192. {modal-1.6.0 → modal-1.6.1.dev1}/modal/runner.py +0 -0
  193. {modal-1.6.0 → modal-1.6.1.dev1}/modal/runner.pyi +0 -0
  194. {modal-1.6.0 → modal-1.6.1.dev1}/modal/running_app.py +0 -0
  195. {modal-1.6.0 → modal-1.6.1.dev1}/modal/sandbox_fs.py +0 -0
  196. {modal-1.6.0 → modal-1.6.1.dev1}/modal/sandbox_fs.pyi +0 -0
  197. {modal-1.6.0 → modal-1.6.1.dev1}/modal/schedule.py +0 -0
  198. {modal-1.6.0 → modal-1.6.1.dev1}/modal/scheduler_placement.py +0 -0
  199. {modal-1.6.0 → modal-1.6.1.dev1}/modal/secret.py +0 -0
  200. {modal-1.6.0 → modal-1.6.1.dev1}/modal/secret.pyi +0 -0
  201. {modal-1.6.0 → modal-1.6.1.dev1}/modal/server.py +0 -0
  202. {modal-1.6.0 → modal-1.6.1.dev1}/modal/server.pyi +0 -0
  203. {modal-1.6.0 → modal-1.6.1.dev1}/modal/serving.py +0 -0
  204. {modal-1.6.0 → modal-1.6.1.dev1}/modal/serving.pyi +0 -0
  205. {modal-1.6.0 → modal-1.6.1.dev1}/modal/skills/modal/SKILL.md +0 -0
  206. {modal-1.6.0 → modal-1.6.1.dev1}/modal/snapshot.py +0 -0
  207. {modal-1.6.0 → modal-1.6.1.dev1}/modal/snapshot.pyi +0 -0
  208. {modal-1.6.0 → modal-1.6.1.dev1}/modal/stream_type.py +0 -0
  209. {modal-1.6.0 → modal-1.6.1.dev1}/modal/token_flow.pyi +0 -0
  210. {modal-1.6.0 → modal-1.6.1.dev1}/modal/types.py +0 -0
  211. {modal-1.6.0 → modal-1.6.1.dev1}/modal/workspace.py +0 -0
  212. {modal-1.6.0 → modal-1.6.1.dev1}/modal/workspace.pyi +0 -0
  213. {modal-1.6.0 → modal-1.6.1.dev1}/modal.egg-info/SOURCES.txt +0 -0
  214. {modal-1.6.0 → modal-1.6.1.dev1}/modal.egg-info/dependency_links.txt +0 -0
  215. {modal-1.6.0 → modal-1.6.1.dev1}/modal.egg-info/entry_points.txt +0 -0
  216. {modal-1.6.0 → modal-1.6.1.dev1}/modal.egg-info/requires.txt +0 -0
  217. {modal-1.6.0 → modal-1.6.1.dev1}/modal.egg-info/top_level.txt +0 -0
  218. {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/__init__.py +0 -0
  219. {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/gen_cli_docs.py +0 -0
  220. {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/gen_cli_docs_main.py +0 -0
  221. {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/gen_reference_docs.py +0 -0
  222. {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/gen_reference_docs_main.py +0 -0
  223. {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/mdmd/__init__.py +0 -0
  224. {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/mdmd/mdmd.py +0 -0
  225. {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/mdmd/signatures.py +0 -0
  226. {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/mdmd/types.py +0 -0
  227. {modal-1.6.0 → modal-1.6.1.dev1}/modal_docs/reference_intro.md +0 -0
  228. {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/__init__.py +0 -0
  229. {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/api_grpc.py +0 -0
  230. {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/api_pb2.py +0 -0
  231. {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/api_pb2.pyi +0 -0
  232. {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/api_pb2_grpc.py +0 -0
  233. {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/api_pb2_grpc.pyi +0 -0
  234. {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/modal_api_grpc.py +0 -0
  235. {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/py.typed +0 -0
  236. {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/task_command_router_grpc.py +0 -0
  237. {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/task_command_router_pb2.py +0 -0
  238. {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/task_command_router_pb2.pyi +0 -0
  239. {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/task_command_router_pb2_grpc.py +0 -0
  240. {modal-1.6.0 → modal-1.6.1.dev1}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
  241. {modal-1.6.0 → modal-1.6.1.dev1}/modal_version/__main__.py +0 -0
  242. {modal-1.6.0 → modal-1.6.1.dev1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.6.0
3
+ Version: 1.6.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
@@ -7,7 +7,7 @@ import time
7
7
  import typing
8
8
  import warnings
9
9
  from collections import OrderedDict
10
- from collections.abc import AsyncGenerator, AsyncIterator, Callable, Collection, Sequence
10
+ from collections.abc import AsyncGenerator, Callable, Collection, Sequence
11
11
  from dataclasses import dataclass
12
12
  from datetime import datetime, timedelta, timezone
13
13
  from pathlib import PurePosixPath
@@ -2405,7 +2405,7 @@ class _FunctionCall(typing.Generic[ReturnType], _Object, type_prefix="fc"):
2405
2405
  return await self._invocation().poll_function(timeout=timeout, index=index)
2406
2406
 
2407
2407
  @live_method_gen
2408
- async def iter(self, *, start: int = 0, end: int | None = None) -> AsyncIterator[ReturnType]:
2408
+ async def iter(self, *, start: int = 0, end: int | None = None) -> AsyncGenerator[ReturnType, None]:
2409
2409
  """Iterate in-order over the results of the function call.
2410
2410
 
2411
2411
  Optionally, specify a range [start, end) to iterate over.
@@ -4,10 +4,10 @@ import typing
4
4
  import uuid
5
5
  from collections.abc import Awaitable, Callable, Hashable, Sequence
6
6
  from functools import wraps
7
- from typing import ClassVar
7
+ from typing import Any, AsyncContextManager, AsyncGenerator, AsyncIterator, ClassVar, ParamSpec, TypeVar
8
8
 
9
9
  from google.protobuf.message import Message
10
- from typing_extensions import Self
10
+ from typing_extensions import Concatenate, Self
11
11
 
12
12
  from ._load_context import LoadContext
13
13
  from ._resolver import Resolver
@@ -38,18 +38,24 @@ def _get_environment_name(
38
38
  return config.get("environment") or ""
39
39
 
40
40
 
41
- def live_method(method):
41
+ P = ParamSpec("P")
42
+ T = TypeVar("T")
43
+
44
+
45
+ def live_method(method: Callable[Concatenate[Any, P], Awaitable[T]]) -> Callable[Concatenate[Any, P], Awaitable[T]]:
42
46
  @wraps(method)
43
- async def wrapped(self, *args, **kwargs):
47
+ async def wrapped(self, *args: P.args, **kwargs: P.kwargs) -> T:
44
48
  await self.hydrate()
45
49
  return await method(self, *args, **kwargs)
46
50
 
47
51
  return wrapped
48
52
 
49
53
 
50
- def live_method_gen(method):
54
+ def live_method_gen(
55
+ method: Callable[Concatenate[Any, P], AsyncGenerator[T, None]],
56
+ ) -> Callable[Concatenate[Any, P], AsyncIterator[T]]:
51
57
  @wraps(method)
52
- async def wrapped(self, *args, **kwargs):
58
+ async def wrapped(self, *args: P.args, **kwargs: P.kwargs) -> AsyncIterator[T]:
53
59
  await self.hydrate()
54
60
  async with aclosing(method(self, *args, **kwargs)) as stream:
55
61
  async for item in stream:
@@ -58,14 +64,16 @@ def live_method_gen(method):
58
64
  return wrapped
59
65
 
60
66
 
61
- def live_method_contextmanager(method):
67
+ def live_method_contextmanager(
68
+ method: Callable[Concatenate[Any, P], AsyncContextManager[T]],
69
+ ) -> Callable[Concatenate[Any, P], AsyncContextManager[T]]:
62
70
  # make sure a wrapped function returning an async context manager
63
71
  # will not require both an `await func.aio()` and `async with`
64
72
  # which would have been the case if it was wrapped in live_method
65
73
 
66
74
  @wraps(method)
67
75
  @contextlib.asynccontextmanager
68
- async def wrapped(self, *args, **kwargs):
76
+ async def wrapped(self, *args: P.args, **kwargs: P.kwargs):
69
77
  await self.hydrate()
70
78
  async with method(self, *args, **kwargs) as ctx:
71
79
  yield ctx
@@ -75,7 +83,7 @@ def live_method_contextmanager(method):
75
83
 
76
84
  class _Object:
77
85
  _type_prefix: ClassVar[str | None] = None
78
- _prefix_to_type: ClassVar[dict[str, type]] = {}
86
+ _prefix_to_type: ClassVar[dict[str, type["_Object"]]] = {}
79
87
 
80
88
  # For constructors
81
89
  _load: Callable[[Self, Resolver, LoadContext, str | None], Awaitable[None]] | None = None
@@ -307,20 +307,19 @@ def create_channel_config(*, sustained_keepalive: bool = False) -> grpclib.confi
307
307
  HTTP/2 keepalive probes keep idle transports warm through stateful
308
308
  middleboxes and surface dead connections before retries reuse them.
309
309
 
310
- `sustained_keepalive` clears the two grpclib defaults such that a probe
311
- actually goes out every `_keepalive_time`, for as long as the connection is
312
- open.
310
+ A probe goes out every `_keepalive_time` while the connection keeps sending
311
+ requests. `sustained_keepalive` also keeps probing a connection that only
312
+ awaits responses, for as long as it is open.
313
313
  """
314
- ping_throttle_overrides: dict[str, Any] = {}
314
+ ping_throttle_overrides: dict[str, Any] = {
315
+ # Default 300s floor between probes, applied regardless of data
316
+ # despite the name, so it has to stay under `_keepalive_time`.
317
+ "_http2_min_sent_ping_interval_without_data": GRPC_KEEPALIVE_TIME_SECS / 2,
318
+ }
315
319
  if sustained_keepalive:
316
- ping_throttle_overrides = {
317
- # Default 2: probing stops after two probes with no request sent in
318
- # between. Requests reset the count, acks don't. 0 = no cap.
319
- "_http2_max_pings_without_data": 0,
320
- # Default 300s floor between probes, applied regardless of data
321
- # despite the name, so it has to stay under `_keepalive_time`.
322
- "_http2_min_sent_ping_interval_without_data": GRPC_KEEPALIVE_TIME_SECS / 2,
323
- }
320
+ # Default 2: probing stops after two probes with no request sent in
321
+ # between. Requests reset the count, acks don't. 0 = no cap.
322
+ ping_throttle_overrides["_http2_max_pings_without_data"] = 0
324
323
 
325
324
  return grpclib.config.Configuration(
326
325
  _keepalive_time=GRPC_KEEPALIVE_TIME_SECS,