hmdev-cli 1.0.0 → 1.0.2

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 (1149) hide show
  1. package/package.json +1 -1
  2. package/python/.venv/Lib/site-packages/__pycache__/typing_extensions.cpython-312.pyc +0 -0
  3. package/python/.venv/Lib/site-packages/anyio/__init__.py +0 -111
  4. package/python/.venv/Lib/site-packages/anyio/__pycache__/__init__.cpython-312.pyc +0 -0
  5. package/python/.venv/Lib/site-packages/anyio/__pycache__/from_thread.cpython-312.pyc +0 -0
  6. package/python/.venv/Lib/site-packages/anyio/__pycache__/functools.cpython-312.pyc +0 -0
  7. package/python/.venv/Lib/site-packages/anyio/__pycache__/lowlevel.cpython-312.pyc +0 -0
  8. package/python/.venv/Lib/site-packages/anyio/__pycache__/pytest_plugin.cpython-312.pyc +0 -0
  9. package/python/.venv/Lib/site-packages/anyio/__pycache__/to_interpreter.cpython-312.pyc +0 -0
  10. package/python/.venv/Lib/site-packages/anyio/__pycache__/to_process.cpython-312.pyc +0 -0
  11. package/python/.venv/Lib/site-packages/anyio/__pycache__/to_thread.cpython-312.pyc +0 -0
  12. package/python/.venv/Lib/site-packages/anyio/_backends/__init__.py +0 -0
  13. package/python/.venv/Lib/site-packages/anyio/_backends/__pycache__/__init__.cpython-312.pyc +0 -0
  14. package/python/.venv/Lib/site-packages/anyio/_backends/__pycache__/_asyncio.cpython-312.pyc +0 -0
  15. package/python/.venv/Lib/site-packages/anyio/_backends/__pycache__/_trio.cpython-312.pyc +0 -0
  16. package/python/.venv/Lib/site-packages/anyio/_backends/_asyncio.py +0 -2996
  17. package/python/.venv/Lib/site-packages/anyio/_backends/_trio.py +0 -1343
  18. package/python/.venv/Lib/site-packages/anyio/_core/__init__.py +0 -0
  19. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/__init__.cpython-312.pyc +0 -0
  20. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_asyncio_selector_thread.cpython-312.pyc +0 -0
  21. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_contextmanagers.cpython-312.pyc +0 -0
  22. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_eventloop.cpython-312.pyc +0 -0
  23. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_exceptions.cpython-312.pyc +0 -0
  24. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_fileio.cpython-312.pyc +0 -0
  25. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_resources.cpython-312.pyc +0 -0
  26. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_signals.cpython-312.pyc +0 -0
  27. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_sockets.cpython-312.pyc +0 -0
  28. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_streams.cpython-312.pyc +0 -0
  29. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_subprocesses.cpython-312.pyc +0 -0
  30. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_synchronization.cpython-312.pyc +0 -0
  31. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_tasks.cpython-312.pyc +0 -0
  32. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_tempfile.cpython-312.pyc +0 -0
  33. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_testing.cpython-312.pyc +0 -0
  34. package/python/.venv/Lib/site-packages/anyio/_core/__pycache__/_typedattr.cpython-312.pyc +0 -0
  35. package/python/.venv/Lib/site-packages/anyio/_core/_asyncio_selector_thread.py +0 -167
  36. package/python/.venv/Lib/site-packages/anyio/_core/_contextmanagers.py +0 -200
  37. package/python/.venv/Lib/site-packages/anyio/_core/_eventloop.py +0 -234
  38. package/python/.venv/Lib/site-packages/anyio/_core/_exceptions.py +0 -156
  39. package/python/.venv/Lib/site-packages/anyio/_core/_fileio.py +0 -799
  40. package/python/.venv/Lib/site-packages/anyio/_core/_resources.py +0 -18
  41. package/python/.venv/Lib/site-packages/anyio/_core/_signals.py +0 -29
  42. package/python/.venv/Lib/site-packages/anyio/_core/_sockets.py +0 -1003
  43. package/python/.venv/Lib/site-packages/anyio/_core/_streams.py +0 -52
  44. package/python/.venv/Lib/site-packages/anyio/_core/_subprocesses.py +0 -196
  45. package/python/.venv/Lib/site-packages/anyio/_core/_synchronization.py +0 -757
  46. package/python/.venv/Lib/site-packages/anyio/_core/_tasks.py +0 -173
  47. package/python/.venv/Lib/site-packages/anyio/_core/_tempfile.py +0 -613
  48. package/python/.venv/Lib/site-packages/anyio/_core/_testing.py +0 -82
  49. package/python/.venv/Lib/site-packages/anyio/_core/_typedattr.py +0 -81
  50. package/python/.venv/Lib/site-packages/anyio/abc/__init__.py +0 -58
  51. package/python/.venv/Lib/site-packages/anyio/abc/__pycache__/__init__.cpython-312.pyc +0 -0
  52. package/python/.venv/Lib/site-packages/anyio/abc/__pycache__/_eventloop.cpython-312.pyc +0 -0
  53. package/python/.venv/Lib/site-packages/anyio/abc/__pycache__/_resources.cpython-312.pyc +0 -0
  54. package/python/.venv/Lib/site-packages/anyio/abc/__pycache__/_sockets.cpython-312.pyc +0 -0
  55. package/python/.venv/Lib/site-packages/anyio/abc/__pycache__/_streams.cpython-312.pyc +0 -0
  56. package/python/.venv/Lib/site-packages/anyio/abc/__pycache__/_subprocesses.cpython-312.pyc +0 -0
  57. package/python/.venv/Lib/site-packages/anyio/abc/__pycache__/_tasks.cpython-312.pyc +0 -0
  58. package/python/.venv/Lib/site-packages/anyio/abc/__pycache__/_testing.cpython-312.pyc +0 -0
  59. package/python/.venv/Lib/site-packages/anyio/abc/_eventloop.py +0 -409
  60. package/python/.venv/Lib/site-packages/anyio/abc/_resources.py +0 -33
  61. package/python/.venv/Lib/site-packages/anyio/abc/_sockets.py +0 -399
  62. package/python/.venv/Lib/site-packages/anyio/abc/_streams.py +0 -233
  63. package/python/.venv/Lib/site-packages/anyio/abc/_subprocesses.py +0 -79
  64. package/python/.venv/Lib/site-packages/anyio/abc/_tasks.py +0 -117
  65. package/python/.venv/Lib/site-packages/anyio/abc/_testing.py +0 -65
  66. package/python/.venv/Lib/site-packages/anyio/from_thread.py +0 -578
  67. package/python/.venv/Lib/site-packages/anyio/functools.py +0 -409
  68. package/python/.venv/Lib/site-packages/anyio/lowlevel.py +0 -196
  69. package/python/.venv/Lib/site-packages/anyio/py.typed +0 -0
  70. package/python/.venv/Lib/site-packages/anyio/pytest_plugin.py +0 -363
  71. package/python/.venv/Lib/site-packages/anyio/streams/__init__.py +0 -0
  72. package/python/.venv/Lib/site-packages/anyio/streams/__pycache__/__init__.cpython-312.pyc +0 -0
  73. package/python/.venv/Lib/site-packages/anyio/streams/__pycache__/buffered.cpython-312.pyc +0 -0
  74. package/python/.venv/Lib/site-packages/anyio/streams/__pycache__/file.cpython-312.pyc +0 -0
  75. package/python/.venv/Lib/site-packages/anyio/streams/__pycache__/memory.cpython-312.pyc +0 -0
  76. package/python/.venv/Lib/site-packages/anyio/streams/__pycache__/stapled.cpython-312.pyc +0 -0
  77. package/python/.venv/Lib/site-packages/anyio/streams/__pycache__/text.cpython-312.pyc +0 -0
  78. package/python/.venv/Lib/site-packages/anyio/streams/__pycache__/tls.cpython-312.pyc +0 -0
  79. package/python/.venv/Lib/site-packages/anyio/streams/buffered.py +0 -188
  80. package/python/.venv/Lib/site-packages/anyio/streams/file.py +0 -154
  81. package/python/.venv/Lib/site-packages/anyio/streams/memory.py +0 -325
  82. package/python/.venv/Lib/site-packages/anyio/streams/stapled.py +0 -147
  83. package/python/.venv/Lib/site-packages/anyio/streams/text.py +0 -176
  84. package/python/.venv/Lib/site-packages/anyio/streams/tls.py +0 -421
  85. package/python/.venv/Lib/site-packages/anyio/to_interpreter.py +0 -246
  86. package/python/.venv/Lib/site-packages/anyio/to_process.py +0 -266
  87. package/python/.venv/Lib/site-packages/anyio/to_thread.py +0 -78
  88. package/python/.venv/Lib/site-packages/anyio-4.13.0.dist-info/INSTALLER +0 -1
  89. package/python/.venv/Lib/site-packages/anyio-4.13.0.dist-info/METADATA +0 -105
  90. package/python/.venv/Lib/site-packages/anyio-4.13.0.dist-info/RECORD +0 -92
  91. package/python/.venv/Lib/site-packages/anyio-4.13.0.dist-info/WHEEL +0 -5
  92. package/python/.venv/Lib/site-packages/anyio-4.13.0.dist-info/entry_points.txt +0 -2
  93. package/python/.venv/Lib/site-packages/anyio-4.13.0.dist-info/licenses/LICENSE +0 -20
  94. package/python/.venv/Lib/site-packages/anyio-4.13.0.dist-info/top_level.txt +0 -1
  95. package/python/.venv/Lib/site-packages/certifi/__init__.py +0 -4
  96. package/python/.venv/Lib/site-packages/certifi/__main__.py +0 -12
  97. package/python/.venv/Lib/site-packages/certifi/__pycache__/__init__.cpython-312.pyc +0 -0
  98. package/python/.venv/Lib/site-packages/certifi/__pycache__/__main__.cpython-312.pyc +0 -0
  99. package/python/.venv/Lib/site-packages/certifi/__pycache__/core.cpython-312.pyc +0 -0
  100. package/python/.venv/Lib/site-packages/certifi/cacert.pem +0 -3933
  101. package/python/.venv/Lib/site-packages/certifi/core.py +0 -83
  102. package/python/.venv/Lib/site-packages/certifi/py.typed +0 -0
  103. package/python/.venv/Lib/site-packages/certifi-2026.4.22.dist-info/INSTALLER +0 -1
  104. package/python/.venv/Lib/site-packages/certifi-2026.4.22.dist-info/METADATA +0 -78
  105. package/python/.venv/Lib/site-packages/certifi-2026.4.22.dist-info/RECORD +0 -14
  106. package/python/.venv/Lib/site-packages/certifi-2026.4.22.dist-info/WHEEL +0 -5
  107. package/python/.venv/Lib/site-packages/certifi-2026.4.22.dist-info/licenses/LICENSE +0 -20
  108. package/python/.venv/Lib/site-packages/certifi-2026.4.22.dist-info/top_level.txt +0 -1
  109. package/python/.venv/Lib/site-packages/h11/__init__.py +0 -62
  110. package/python/.venv/Lib/site-packages/h11/__pycache__/__init__.cpython-312.pyc +0 -0
  111. package/python/.venv/Lib/site-packages/h11/__pycache__/_abnf.cpython-312.pyc +0 -0
  112. package/python/.venv/Lib/site-packages/h11/__pycache__/_connection.cpython-312.pyc +0 -0
  113. package/python/.venv/Lib/site-packages/h11/__pycache__/_events.cpython-312.pyc +0 -0
  114. package/python/.venv/Lib/site-packages/h11/__pycache__/_headers.cpython-312.pyc +0 -0
  115. package/python/.venv/Lib/site-packages/h11/__pycache__/_readers.cpython-312.pyc +0 -0
  116. package/python/.venv/Lib/site-packages/h11/__pycache__/_receivebuffer.cpython-312.pyc +0 -0
  117. package/python/.venv/Lib/site-packages/h11/__pycache__/_state.cpython-312.pyc +0 -0
  118. package/python/.venv/Lib/site-packages/h11/__pycache__/_util.cpython-312.pyc +0 -0
  119. package/python/.venv/Lib/site-packages/h11/__pycache__/_version.cpython-312.pyc +0 -0
  120. package/python/.venv/Lib/site-packages/h11/__pycache__/_writers.cpython-312.pyc +0 -0
  121. package/python/.venv/Lib/site-packages/h11/_abnf.py +0 -132
  122. package/python/.venv/Lib/site-packages/h11/_connection.py +0 -659
  123. package/python/.venv/Lib/site-packages/h11/_events.py +0 -369
  124. package/python/.venv/Lib/site-packages/h11/_headers.py +0 -282
  125. package/python/.venv/Lib/site-packages/h11/_readers.py +0 -250
  126. package/python/.venv/Lib/site-packages/h11/_receivebuffer.py +0 -153
  127. package/python/.venv/Lib/site-packages/h11/_state.py +0 -365
  128. package/python/.venv/Lib/site-packages/h11/_util.py +0 -135
  129. package/python/.venv/Lib/site-packages/h11/_version.py +0 -16
  130. package/python/.venv/Lib/site-packages/h11/_writers.py +0 -145
  131. package/python/.venv/Lib/site-packages/h11/py.typed +0 -1
  132. package/python/.venv/Lib/site-packages/h11-0.16.0.dist-info/INSTALLER +0 -1
  133. package/python/.venv/Lib/site-packages/h11-0.16.0.dist-info/METADATA +0 -202
  134. package/python/.venv/Lib/site-packages/h11-0.16.0.dist-info/RECORD +0 -29
  135. package/python/.venv/Lib/site-packages/h11-0.16.0.dist-info/WHEEL +0 -5
  136. package/python/.venv/Lib/site-packages/h11-0.16.0.dist-info/licenses/LICENSE.txt +0 -22
  137. package/python/.venv/Lib/site-packages/h11-0.16.0.dist-info/top_level.txt +0 -1
  138. package/python/.venv/Lib/site-packages/httpcore/__init__.py +0 -141
  139. package/python/.venv/Lib/site-packages/httpcore/__pycache__/__init__.cpython-312.pyc +0 -0
  140. package/python/.venv/Lib/site-packages/httpcore/__pycache__/_api.cpython-312.pyc +0 -0
  141. package/python/.venv/Lib/site-packages/httpcore/__pycache__/_exceptions.cpython-312.pyc +0 -0
  142. package/python/.venv/Lib/site-packages/httpcore/__pycache__/_models.cpython-312.pyc +0 -0
  143. package/python/.venv/Lib/site-packages/httpcore/__pycache__/_ssl.cpython-312.pyc +0 -0
  144. package/python/.venv/Lib/site-packages/httpcore/__pycache__/_synchronization.cpython-312.pyc +0 -0
  145. package/python/.venv/Lib/site-packages/httpcore/__pycache__/_trace.cpython-312.pyc +0 -0
  146. package/python/.venv/Lib/site-packages/httpcore/__pycache__/_utils.cpython-312.pyc +0 -0
  147. package/python/.venv/Lib/site-packages/httpcore/_api.py +0 -94
  148. package/python/.venv/Lib/site-packages/httpcore/_async/__init__.py +0 -39
  149. package/python/.venv/Lib/site-packages/httpcore/_async/__pycache__/__init__.cpython-312.pyc +0 -0
  150. package/python/.venv/Lib/site-packages/httpcore/_async/__pycache__/connection.cpython-312.pyc +0 -0
  151. package/python/.venv/Lib/site-packages/httpcore/_async/__pycache__/connection_pool.cpython-312.pyc +0 -0
  152. package/python/.venv/Lib/site-packages/httpcore/_async/__pycache__/http11.cpython-312.pyc +0 -0
  153. package/python/.venv/Lib/site-packages/httpcore/_async/__pycache__/http2.cpython-312.pyc +0 -0
  154. package/python/.venv/Lib/site-packages/httpcore/_async/__pycache__/http_proxy.cpython-312.pyc +0 -0
  155. package/python/.venv/Lib/site-packages/httpcore/_async/__pycache__/interfaces.cpython-312.pyc +0 -0
  156. package/python/.venv/Lib/site-packages/httpcore/_async/__pycache__/socks_proxy.cpython-312.pyc +0 -0
  157. package/python/.venv/Lib/site-packages/httpcore/_async/connection.py +0 -222
  158. package/python/.venv/Lib/site-packages/httpcore/_async/connection_pool.py +0 -420
  159. package/python/.venv/Lib/site-packages/httpcore/_async/http11.py +0 -379
  160. package/python/.venv/Lib/site-packages/httpcore/_async/http2.py +0 -592
  161. package/python/.venv/Lib/site-packages/httpcore/_async/http_proxy.py +0 -367
  162. package/python/.venv/Lib/site-packages/httpcore/_async/interfaces.py +0 -137
  163. package/python/.venv/Lib/site-packages/httpcore/_async/socks_proxy.py +0 -341
  164. package/python/.venv/Lib/site-packages/httpcore/_backends/__init__.py +0 -0
  165. package/python/.venv/Lib/site-packages/httpcore/_backends/__pycache__/__init__.cpython-312.pyc +0 -0
  166. package/python/.venv/Lib/site-packages/httpcore/_backends/__pycache__/anyio.cpython-312.pyc +0 -0
  167. package/python/.venv/Lib/site-packages/httpcore/_backends/__pycache__/auto.cpython-312.pyc +0 -0
  168. package/python/.venv/Lib/site-packages/httpcore/_backends/__pycache__/base.cpython-312.pyc +0 -0
  169. package/python/.venv/Lib/site-packages/httpcore/_backends/__pycache__/mock.cpython-312.pyc +0 -0
  170. package/python/.venv/Lib/site-packages/httpcore/_backends/__pycache__/sync.cpython-312.pyc +0 -0
  171. package/python/.venv/Lib/site-packages/httpcore/_backends/__pycache__/trio.cpython-312.pyc +0 -0
  172. package/python/.venv/Lib/site-packages/httpcore/_backends/anyio.py +0 -146
  173. package/python/.venv/Lib/site-packages/httpcore/_backends/auto.py +0 -52
  174. package/python/.venv/Lib/site-packages/httpcore/_backends/base.py +0 -101
  175. package/python/.venv/Lib/site-packages/httpcore/_backends/mock.py +0 -143
  176. package/python/.venv/Lib/site-packages/httpcore/_backends/sync.py +0 -241
  177. package/python/.venv/Lib/site-packages/httpcore/_backends/trio.py +0 -159
  178. package/python/.venv/Lib/site-packages/httpcore/_exceptions.py +0 -81
  179. package/python/.venv/Lib/site-packages/httpcore/_models.py +0 -516
  180. package/python/.venv/Lib/site-packages/httpcore/_ssl.py +0 -9
  181. package/python/.venv/Lib/site-packages/httpcore/_sync/__init__.py +0 -39
  182. package/python/.venv/Lib/site-packages/httpcore/_sync/__pycache__/__init__.cpython-312.pyc +0 -0
  183. package/python/.venv/Lib/site-packages/httpcore/_sync/__pycache__/connection.cpython-312.pyc +0 -0
  184. package/python/.venv/Lib/site-packages/httpcore/_sync/__pycache__/connection_pool.cpython-312.pyc +0 -0
  185. package/python/.venv/Lib/site-packages/httpcore/_sync/__pycache__/http11.cpython-312.pyc +0 -0
  186. package/python/.venv/Lib/site-packages/httpcore/_sync/__pycache__/http2.cpython-312.pyc +0 -0
  187. package/python/.venv/Lib/site-packages/httpcore/_sync/__pycache__/http_proxy.cpython-312.pyc +0 -0
  188. package/python/.venv/Lib/site-packages/httpcore/_sync/__pycache__/interfaces.cpython-312.pyc +0 -0
  189. package/python/.venv/Lib/site-packages/httpcore/_sync/__pycache__/socks_proxy.cpython-312.pyc +0 -0
  190. package/python/.venv/Lib/site-packages/httpcore/_sync/connection.py +0 -222
  191. package/python/.venv/Lib/site-packages/httpcore/_sync/connection_pool.py +0 -420
  192. package/python/.venv/Lib/site-packages/httpcore/_sync/http11.py +0 -379
  193. package/python/.venv/Lib/site-packages/httpcore/_sync/http2.py +0 -592
  194. package/python/.venv/Lib/site-packages/httpcore/_sync/http_proxy.py +0 -367
  195. package/python/.venv/Lib/site-packages/httpcore/_sync/interfaces.py +0 -137
  196. package/python/.venv/Lib/site-packages/httpcore/_sync/socks_proxy.py +0 -341
  197. package/python/.venv/Lib/site-packages/httpcore/_synchronization.py +0 -318
  198. package/python/.venv/Lib/site-packages/httpcore/_trace.py +0 -107
  199. package/python/.venv/Lib/site-packages/httpcore/_utils.py +0 -37
  200. package/python/.venv/Lib/site-packages/httpcore/py.typed +0 -0
  201. package/python/.venv/Lib/site-packages/httpcore-1.0.9.dist-info/INSTALLER +0 -1
  202. package/python/.venv/Lib/site-packages/httpcore-1.0.9.dist-info/METADATA +0 -625
  203. package/python/.venv/Lib/site-packages/httpcore-1.0.9.dist-info/RECORD +0 -68
  204. package/python/.venv/Lib/site-packages/httpcore-1.0.9.dist-info/WHEEL +0 -4
  205. package/python/.venv/Lib/site-packages/httpcore-1.0.9.dist-info/licenses/LICENSE.md +0 -27
  206. package/python/.venv/Lib/site-packages/httpx/__init__.py +0 -105
  207. package/python/.venv/Lib/site-packages/httpx/__pycache__/__init__.cpython-312.pyc +0 -0
  208. package/python/.venv/Lib/site-packages/httpx/__pycache__/__version__.cpython-312.pyc +0 -0
  209. package/python/.venv/Lib/site-packages/httpx/__pycache__/_api.cpython-312.pyc +0 -0
  210. package/python/.venv/Lib/site-packages/httpx/__pycache__/_auth.cpython-312.pyc +0 -0
  211. package/python/.venv/Lib/site-packages/httpx/__pycache__/_client.cpython-312.pyc +0 -0
  212. package/python/.venv/Lib/site-packages/httpx/__pycache__/_config.cpython-312.pyc +0 -0
  213. package/python/.venv/Lib/site-packages/httpx/__pycache__/_content.cpython-312.pyc +0 -0
  214. package/python/.venv/Lib/site-packages/httpx/__pycache__/_decoders.cpython-312.pyc +0 -0
  215. package/python/.venv/Lib/site-packages/httpx/__pycache__/_exceptions.cpython-312.pyc +0 -0
  216. package/python/.venv/Lib/site-packages/httpx/__pycache__/_main.cpython-312.pyc +0 -0
  217. package/python/.venv/Lib/site-packages/httpx/__pycache__/_models.cpython-312.pyc +0 -0
  218. package/python/.venv/Lib/site-packages/httpx/__pycache__/_multipart.cpython-312.pyc +0 -0
  219. package/python/.venv/Lib/site-packages/httpx/__pycache__/_status_codes.cpython-312.pyc +0 -0
  220. package/python/.venv/Lib/site-packages/httpx/__pycache__/_types.cpython-312.pyc +0 -0
  221. package/python/.venv/Lib/site-packages/httpx/__pycache__/_urlparse.cpython-312.pyc +0 -0
  222. package/python/.venv/Lib/site-packages/httpx/__pycache__/_urls.cpython-312.pyc +0 -0
  223. package/python/.venv/Lib/site-packages/httpx/__pycache__/_utils.cpython-312.pyc +0 -0
  224. package/python/.venv/Lib/site-packages/httpx/__version__.py +0 -3
  225. package/python/.venv/Lib/site-packages/httpx/_api.py +0 -438
  226. package/python/.venv/Lib/site-packages/httpx/_auth.py +0 -348
  227. package/python/.venv/Lib/site-packages/httpx/_client.py +0 -2019
  228. package/python/.venv/Lib/site-packages/httpx/_config.py +0 -248
  229. package/python/.venv/Lib/site-packages/httpx/_content.py +0 -240
  230. package/python/.venv/Lib/site-packages/httpx/_decoders.py +0 -393
  231. package/python/.venv/Lib/site-packages/httpx/_exceptions.py +0 -379
  232. package/python/.venv/Lib/site-packages/httpx/_main.py +0 -506
  233. package/python/.venv/Lib/site-packages/httpx/_models.py +0 -1277
  234. package/python/.venv/Lib/site-packages/httpx/_multipart.py +0 -300
  235. package/python/.venv/Lib/site-packages/httpx/_status_codes.py +0 -162
  236. package/python/.venv/Lib/site-packages/httpx/_transports/__init__.py +0 -15
  237. package/python/.venv/Lib/site-packages/httpx/_transports/__pycache__/__init__.cpython-312.pyc +0 -0
  238. package/python/.venv/Lib/site-packages/httpx/_transports/__pycache__/asgi.cpython-312.pyc +0 -0
  239. package/python/.venv/Lib/site-packages/httpx/_transports/__pycache__/base.cpython-312.pyc +0 -0
  240. package/python/.venv/Lib/site-packages/httpx/_transports/__pycache__/default.cpython-312.pyc +0 -0
  241. package/python/.venv/Lib/site-packages/httpx/_transports/__pycache__/mock.cpython-312.pyc +0 -0
  242. package/python/.venv/Lib/site-packages/httpx/_transports/__pycache__/wsgi.cpython-312.pyc +0 -0
  243. package/python/.venv/Lib/site-packages/httpx/_transports/asgi.py +0 -187
  244. package/python/.venv/Lib/site-packages/httpx/_transports/base.py +0 -86
  245. package/python/.venv/Lib/site-packages/httpx/_transports/default.py +0 -406
  246. package/python/.venv/Lib/site-packages/httpx/_transports/mock.py +0 -43
  247. package/python/.venv/Lib/site-packages/httpx/_transports/wsgi.py +0 -149
  248. package/python/.venv/Lib/site-packages/httpx/_types.py +0 -114
  249. package/python/.venv/Lib/site-packages/httpx/_urlparse.py +0 -527
  250. package/python/.venv/Lib/site-packages/httpx/_urls.py +0 -641
  251. package/python/.venv/Lib/site-packages/httpx/_utils.py +0 -242
  252. package/python/.venv/Lib/site-packages/httpx/py.typed +0 -0
  253. package/python/.venv/Lib/site-packages/httpx-0.28.1.dist-info/INSTALLER +0 -1
  254. package/python/.venv/Lib/site-packages/httpx-0.28.1.dist-info/METADATA +0 -203
  255. package/python/.venv/Lib/site-packages/httpx-0.28.1.dist-info/RECORD +0 -55
  256. package/python/.venv/Lib/site-packages/httpx-0.28.1.dist-info/REQUESTED +0 -0
  257. package/python/.venv/Lib/site-packages/httpx-0.28.1.dist-info/WHEEL +0 -4
  258. package/python/.venv/Lib/site-packages/httpx-0.28.1.dist-info/entry_points.txt +0 -2
  259. package/python/.venv/Lib/site-packages/httpx-0.28.1.dist-info/licenses/LICENSE.md +0 -12
  260. package/python/.venv/Lib/site-packages/idna/__init__.py +0 -45
  261. package/python/.venv/Lib/site-packages/idna/__pycache__/__init__.cpython-312.pyc +0 -0
  262. package/python/.venv/Lib/site-packages/idna/__pycache__/codec.cpython-312.pyc +0 -0
  263. package/python/.venv/Lib/site-packages/idna/__pycache__/compat.cpython-312.pyc +0 -0
  264. package/python/.venv/Lib/site-packages/idna/__pycache__/core.cpython-312.pyc +0 -0
  265. package/python/.venv/Lib/site-packages/idna/__pycache__/idnadata.cpython-312.pyc +0 -0
  266. package/python/.venv/Lib/site-packages/idna/__pycache__/intranges.cpython-312.pyc +0 -0
  267. package/python/.venv/Lib/site-packages/idna/__pycache__/package_data.cpython-312.pyc +0 -0
  268. package/python/.venv/Lib/site-packages/idna/__pycache__/uts46data.cpython-312.pyc +0 -0
  269. package/python/.venv/Lib/site-packages/idna/codec.py +0 -159
  270. package/python/.venv/Lib/site-packages/idna/compat.py +0 -41
  271. package/python/.venv/Lib/site-packages/idna/core.py +0 -620
  272. package/python/.venv/Lib/site-packages/idna/idnadata.py +0 -4367
  273. package/python/.venv/Lib/site-packages/idna/intranges.py +0 -56
  274. package/python/.venv/Lib/site-packages/idna/package_data.py +0 -1
  275. package/python/.venv/Lib/site-packages/idna/py.typed +0 -0
  276. package/python/.venv/Lib/site-packages/idna/uts46data.py +0 -8383
  277. package/python/.venv/Lib/site-packages/idna-3.15.dist-info/INSTALLER +0 -1
  278. package/python/.venv/Lib/site-packages/idna-3.15.dist-info/METADATA +0 -194
  279. package/python/.venv/Lib/site-packages/idna-3.15.dist-info/RECORD +0 -22
  280. package/python/.venv/Lib/site-packages/idna-3.15.dist-info/WHEEL +0 -4
  281. package/python/.venv/Lib/site-packages/idna-3.15.dist-info/licenses/LICENSE.md +0 -31
  282. package/python/.venv/Lib/site-packages/pip/__init__.py +0 -13
  283. package/python/.venv/Lib/site-packages/pip/__main__.py +0 -24
  284. package/python/.venv/Lib/site-packages/pip/__pip-runner__.py +0 -50
  285. package/python/.venv/Lib/site-packages/pip/__pycache__/__init__.cpython-312.pyc +0 -0
  286. package/python/.venv/Lib/site-packages/pip/__pycache__/__main__.cpython-312.pyc +0 -0
  287. package/python/.venv/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc +0 -0
  288. package/python/.venv/Lib/site-packages/pip/_internal/__init__.py +0 -18
  289. package/python/.venv/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc +0 -0
  290. package/python/.venv/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc +0 -0
  291. package/python/.venv/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc +0 -0
  292. package/python/.venv/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc +0 -0
  293. package/python/.venv/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc +0 -0
  294. package/python/.venv/Lib/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc +0 -0
  295. package/python/.venv/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc +0 -0
  296. package/python/.venv/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc +0 -0
  297. package/python/.venv/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc +0 -0
  298. package/python/.venv/Lib/site-packages/pip/_internal/build_env.py +0 -322
  299. package/python/.venv/Lib/site-packages/pip/_internal/cache.py +0 -290
  300. package/python/.venv/Lib/site-packages/pip/_internal/cli/__init__.py +0 -4
  301. package/python/.venv/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc +0 -0
  302. package/python/.venv/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc +0 -0
  303. package/python/.venv/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc +0 -0
  304. package/python/.venv/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc +0 -0
  305. package/python/.venv/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc +0 -0
  306. package/python/.venv/Lib/site-packages/pip/_internal/cli/__pycache__/index_command.cpython-312.pyc +0 -0
  307. package/python/.venv/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc +0 -0
  308. package/python/.venv/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc +0 -0
  309. package/python/.venv/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc +0 -0
  310. package/python/.venv/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc +0 -0
  311. package/python/.venv/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc +0 -0
  312. package/python/.venv/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc +0 -0
  313. package/python/.venv/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc +0 -0
  314. package/python/.venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +0 -176
  315. package/python/.venv/Lib/site-packages/pip/_internal/cli/base_command.py +0 -240
  316. package/python/.venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +0 -1075
  317. package/python/.venv/Lib/site-packages/pip/_internal/cli/command_context.py +0 -27
  318. package/python/.venv/Lib/site-packages/pip/_internal/cli/index_command.py +0 -171
  319. package/python/.venv/Lib/site-packages/pip/_internal/cli/main.py +0 -80
  320. package/python/.venv/Lib/site-packages/pip/_internal/cli/main_parser.py +0 -134
  321. package/python/.venv/Lib/site-packages/pip/_internal/cli/parser.py +0 -294
  322. package/python/.venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +0 -94
  323. package/python/.venv/Lib/site-packages/pip/_internal/cli/req_command.py +0 -329
  324. package/python/.venv/Lib/site-packages/pip/_internal/cli/spinners.py +0 -159
  325. package/python/.venv/Lib/site-packages/pip/_internal/cli/status_codes.py +0 -6
  326. package/python/.venv/Lib/site-packages/pip/_internal/commands/__init__.py +0 -132
  327. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc +0 -0
  328. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/cache.cpython-312.pyc +0 -0
  329. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-312.pyc +0 -0
  330. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-312.pyc +0 -0
  331. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-312.pyc +0 -0
  332. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-312.pyc +0 -0
  333. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc +0 -0
  334. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-312.pyc +0 -0
  335. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc +0 -0
  336. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc +0 -0
  337. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-312.pyc +0 -0
  338. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc +0 -0
  339. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc +0 -0
  340. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-312.pyc +0 -0
  341. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-312.pyc +0 -0
  342. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-312.pyc +0 -0
  343. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc +0 -0
  344. package/python/.venv/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc +0 -0
  345. package/python/.venv/Lib/site-packages/pip/_internal/commands/cache.py +0 -228
  346. package/python/.venv/Lib/site-packages/pip/_internal/commands/check.py +0 -67
  347. package/python/.venv/Lib/site-packages/pip/_internal/commands/completion.py +0 -130
  348. package/python/.venv/Lib/site-packages/pip/_internal/commands/configuration.py +0 -280
  349. package/python/.venv/Lib/site-packages/pip/_internal/commands/debug.py +0 -201
  350. package/python/.venv/Lib/site-packages/pip/_internal/commands/download.py +0 -146
  351. package/python/.venv/Lib/site-packages/pip/_internal/commands/freeze.py +0 -109
  352. package/python/.venv/Lib/site-packages/pip/_internal/commands/hash.py +0 -59
  353. package/python/.venv/Lib/site-packages/pip/_internal/commands/help.py +0 -41
  354. package/python/.venv/Lib/site-packages/pip/_internal/commands/index.py +0 -139
  355. package/python/.venv/Lib/site-packages/pip/_internal/commands/inspect.py +0 -92
  356. package/python/.venv/Lib/site-packages/pip/_internal/commands/install.py +0 -784
  357. package/python/.venv/Lib/site-packages/pip/_internal/commands/list.py +0 -375
  358. package/python/.venv/Lib/site-packages/pip/_internal/commands/search.py +0 -172
  359. package/python/.venv/Lib/site-packages/pip/_internal/commands/show.py +0 -224
  360. package/python/.venv/Lib/site-packages/pip/_internal/commands/uninstall.py +0 -114
  361. package/python/.venv/Lib/site-packages/pip/_internal/commands/wheel.py +0 -182
  362. package/python/.venv/Lib/site-packages/pip/_internal/configuration.py +0 -383
  363. package/python/.venv/Lib/site-packages/pip/_internal/distributions/__init__.py +0 -21
  364. package/python/.venv/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc +0 -0
  365. package/python/.venv/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc +0 -0
  366. package/python/.venv/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc +0 -0
  367. package/python/.venv/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc +0 -0
  368. package/python/.venv/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc +0 -0
  369. package/python/.venv/Lib/site-packages/pip/_internal/distributions/base.py +0 -53
  370. package/python/.venv/Lib/site-packages/pip/_internal/distributions/installed.py +0 -29
  371. package/python/.venv/Lib/site-packages/pip/_internal/distributions/sdist.py +0 -158
  372. package/python/.venv/Lib/site-packages/pip/_internal/distributions/wheel.py +0 -42
  373. package/python/.venv/Lib/site-packages/pip/_internal/exceptions.py +0 -809
  374. package/python/.venv/Lib/site-packages/pip/_internal/index/__init__.py +0 -2
  375. package/python/.venv/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc +0 -0
  376. package/python/.venv/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc +0 -0
  377. package/python/.venv/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc +0 -0
  378. package/python/.venv/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc +0 -0
  379. package/python/.venv/Lib/site-packages/pip/_internal/index/collector.py +0 -494
  380. package/python/.venv/Lib/site-packages/pip/_internal/index/package_finder.py +0 -1029
  381. package/python/.venv/Lib/site-packages/pip/_internal/index/sources.py +0 -284
  382. package/python/.venv/Lib/site-packages/pip/_internal/locations/__init__.py +0 -456
  383. package/python/.venv/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc +0 -0
  384. package/python/.venv/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc +0 -0
  385. package/python/.venv/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc +0 -0
  386. package/python/.venv/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc +0 -0
  387. package/python/.venv/Lib/site-packages/pip/_internal/locations/_distutils.py +0 -172
  388. package/python/.venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +0 -214
  389. package/python/.venv/Lib/site-packages/pip/_internal/locations/base.py +0 -81
  390. package/python/.venv/Lib/site-packages/pip/_internal/main.py +0 -12
  391. package/python/.venv/Lib/site-packages/pip/_internal/metadata/__init__.py +0 -128
  392. package/python/.venv/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc +0 -0
  393. package/python/.venv/Lib/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc +0 -0
  394. package/python/.venv/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc +0 -0
  395. package/python/.venv/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc +0 -0
  396. package/python/.venv/Lib/site-packages/pip/_internal/metadata/_json.py +0 -86
  397. package/python/.venv/Lib/site-packages/pip/_internal/metadata/base.py +0 -688
  398. package/python/.venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +0 -6
  399. package/python/.venv/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc +0 -0
  400. package/python/.venv/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc +0 -0
  401. package/python/.venv/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc +0 -0
  402. package/python/.venv/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc +0 -0
  403. package/python/.venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +0 -85
  404. package/python/.venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +0 -228
  405. package/python/.venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +0 -189
  406. package/python/.venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +0 -301
  407. package/python/.venv/Lib/site-packages/pip/_internal/models/__init__.py +0 -2
  408. package/python/.venv/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc +0 -0
  409. package/python/.venv/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc +0 -0
  410. package/python/.venv/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc +0 -0
  411. package/python/.venv/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc +0 -0
  412. package/python/.venv/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc +0 -0
  413. package/python/.venv/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc +0 -0
  414. package/python/.venv/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc +0 -0
  415. package/python/.venv/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc +0 -0
  416. package/python/.venv/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc +0 -0
  417. package/python/.venv/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc +0 -0
  418. package/python/.venv/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc +0 -0
  419. package/python/.venv/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc +0 -0
  420. package/python/.venv/Lib/site-packages/pip/_internal/models/candidate.py +0 -25
  421. package/python/.venv/Lib/site-packages/pip/_internal/models/direct_url.py +0 -224
  422. package/python/.venv/Lib/site-packages/pip/_internal/models/format_control.py +0 -78
  423. package/python/.venv/Lib/site-packages/pip/_internal/models/index.py +0 -28
  424. package/python/.venv/Lib/site-packages/pip/_internal/models/installation_report.py +0 -56
  425. package/python/.venv/Lib/site-packages/pip/_internal/models/link.py +0 -604
  426. package/python/.venv/Lib/site-packages/pip/_internal/models/scheme.py +0 -25
  427. package/python/.venv/Lib/site-packages/pip/_internal/models/search_scope.py +0 -127
  428. package/python/.venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +0 -53
  429. package/python/.venv/Lib/site-packages/pip/_internal/models/target_python.py +0 -121
  430. package/python/.venv/Lib/site-packages/pip/_internal/models/wheel.py +0 -118
  431. package/python/.venv/Lib/site-packages/pip/_internal/network/__init__.py +0 -2
  432. package/python/.venv/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc +0 -0
  433. package/python/.venv/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc +0 -0
  434. package/python/.venv/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc +0 -0
  435. package/python/.venv/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc +0 -0
  436. package/python/.venv/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc +0 -0
  437. package/python/.venv/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc +0 -0
  438. package/python/.venv/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc +0 -0
  439. package/python/.venv/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc +0 -0
  440. package/python/.venv/Lib/site-packages/pip/_internal/network/auth.py +0 -566
  441. package/python/.venv/Lib/site-packages/pip/_internal/network/cache.py +0 -118
  442. package/python/.venv/Lib/site-packages/pip/_internal/network/download.py +0 -187
  443. package/python/.venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +0 -210
  444. package/python/.venv/Lib/site-packages/pip/_internal/network/session.py +0 -523
  445. package/python/.venv/Lib/site-packages/pip/_internal/network/utils.py +0 -98
  446. package/python/.venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +0 -62
  447. package/python/.venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
  448. package/python/.venv/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc +0 -0
  449. package/python/.venv/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc +0 -0
  450. package/python/.venv/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-312.pyc +0 -0
  451. package/python/.venv/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc +0 -0
  452. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  453. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc +0 -0
  454. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc +0 -0
  455. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc +0 -0
  456. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc +0 -0
  457. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc +0 -0
  458. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc +0 -0
  459. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc +0 -0
  460. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc +0 -0
  461. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/build_tracker.py +0 -138
  462. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +0 -39
  463. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py +0 -42
  464. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +0 -74
  465. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +0 -37
  466. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py +0 -46
  467. package/python/.venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +0 -102
  468. package/python/.venv/Lib/site-packages/pip/_internal/operations/check.py +0 -181
  469. package/python/.venv/Lib/site-packages/pip/_internal/operations/freeze.py +0 -256
  470. package/python/.venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +0 -2
  471. package/python/.venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc +0 -0
  472. package/python/.venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc +0 -0
  473. package/python/.venv/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc +0 -0
  474. package/python/.venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +0 -47
  475. package/python/.venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +0 -741
  476. package/python/.venv/Lib/site-packages/pip/_internal/operations/prepare.py +0 -732
  477. package/python/.venv/Lib/site-packages/pip/_internal/pyproject.py +0 -185
  478. package/python/.venv/Lib/site-packages/pip/_internal/req/__init__.py +0 -90
  479. package/python/.venv/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc +0 -0
  480. package/python/.venv/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc +0 -0
  481. package/python/.venv/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc +0 -0
  482. package/python/.venv/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc +0 -0
  483. package/python/.venv/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc +0 -0
  484. package/python/.venv/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc +0 -0
  485. package/python/.venv/Lib/site-packages/pip/_internal/req/constructors.py +0 -560
  486. package/python/.venv/Lib/site-packages/pip/_internal/req/req_file.py +0 -623
  487. package/python/.venv/Lib/site-packages/pip/_internal/req/req_install.py +0 -934
  488. package/python/.venv/Lib/site-packages/pip/_internal/req/req_set.py +0 -82
  489. package/python/.venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +0 -633
  490. package/python/.venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
  491. package/python/.venv/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc +0 -0
  492. package/python/.venv/Lib/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc +0 -0
  493. package/python/.venv/Lib/site-packages/pip/_internal/resolution/base.py +0 -20
  494. package/python/.venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  495. package/python/.venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc +0 -0
  496. package/python/.venv/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc +0 -0
  497. package/python/.venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +0 -597
  498. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  499. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc +0 -0
  500. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc +0 -0
  501. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc +0 -0
  502. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc +0 -0
  503. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc +0 -0
  504. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc +0 -0
  505. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc +0 -0
  506. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc +0 -0
  507. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc +0 -0
  508. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +0 -139
  509. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +0 -574
  510. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +0 -823
  511. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +0 -174
  512. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +0 -258
  513. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +0 -81
  514. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +0 -245
  515. package/python/.venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +0 -317
  516. package/python/.venv/Lib/site-packages/pip/_internal/self_outdated_check.py +0 -252
  517. package/python/.venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
  518. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  519. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc +0 -0
  520. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc +0 -0
  521. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc +0 -0
  522. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc +0 -0
  523. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc +0 -0
  524. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc +0 -0
  525. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc +0 -0
  526. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc +0 -0
  527. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc +0 -0
  528. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc +0 -0
  529. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc +0 -0
  530. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc +0 -0
  531. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc +0 -0
  532. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc +0 -0
  533. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc +0 -0
  534. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc +0 -0
  535. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc +0 -0
  536. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/retry.cpython-312.pyc +0 -0
  537. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc +0 -0
  538. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc +0 -0
  539. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc +0 -0
  540. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc +0 -0
  541. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc +0 -0
  542. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc +0 -0
  543. package/python/.venv/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc +0 -0
  544. package/python/.venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +0 -109
  545. package/python/.venv/Lib/site-packages/pip/_internal/utils/_log.py +0 -38
  546. package/python/.venv/Lib/site-packages/pip/_internal/utils/appdirs.py +0 -52
  547. package/python/.venv/Lib/site-packages/pip/_internal/utils/compat.py +0 -79
  548. package/python/.venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +0 -188
  549. package/python/.venv/Lib/site-packages/pip/_internal/utils/datetime.py +0 -11
  550. package/python/.venv/Lib/site-packages/pip/_internal/utils/deprecation.py +0 -124
  551. package/python/.venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +0 -87
  552. package/python/.venv/Lib/site-packages/pip/_internal/utils/egg_link.py +0 -80
  553. package/python/.venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +0 -84
  554. package/python/.venv/Lib/site-packages/pip/_internal/utils/filesystem.py +0 -149
  555. package/python/.venv/Lib/site-packages/pip/_internal/utils/filetypes.py +0 -27
  556. package/python/.venv/Lib/site-packages/pip/_internal/utils/glibc.py +0 -101
  557. package/python/.venv/Lib/site-packages/pip/_internal/utils/hashes.py +0 -147
  558. package/python/.venv/Lib/site-packages/pip/_internal/utils/logging.py +0 -354
  559. package/python/.venv/Lib/site-packages/pip/_internal/utils/misc.py +0 -773
  560. package/python/.venv/Lib/site-packages/pip/_internal/utils/packaging.py +0 -58
  561. package/python/.venv/Lib/site-packages/pip/_internal/utils/retry.py +0 -42
  562. package/python/.venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +0 -146
  563. package/python/.venv/Lib/site-packages/pip/_internal/utils/subprocess.py +0 -245
  564. package/python/.venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +0 -296
  565. package/python/.venv/Lib/site-packages/pip/_internal/utils/unpacking.py +0 -337
  566. package/python/.venv/Lib/site-packages/pip/_internal/utils/urls.py +0 -55
  567. package/python/.venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +0 -104
  568. package/python/.venv/Lib/site-packages/pip/_internal/utils/wheel.py +0 -134
  569. package/python/.venv/Lib/site-packages/pip/_internal/vcs/__init__.py +0 -15
  570. package/python/.venv/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc +0 -0
  571. package/python/.venv/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc +0 -0
  572. package/python/.venv/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc +0 -0
  573. package/python/.venv/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc +0 -0
  574. package/python/.venv/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc +0 -0
  575. package/python/.venv/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc +0 -0
  576. package/python/.venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +0 -112
  577. package/python/.venv/Lib/site-packages/pip/_internal/vcs/git.py +0 -527
  578. package/python/.venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +0 -163
  579. package/python/.venv/Lib/site-packages/pip/_internal/vcs/subversion.py +0 -324
  580. package/python/.venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +0 -688
  581. package/python/.venv/Lib/site-packages/pip/_internal/wheel_builder.py +0 -354
  582. package/python/.venv/Lib/site-packages/pip/_vendor/__init__.py +0 -116
  583. package/python/.venv/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc +0 -0
  584. package/python/.venv/Lib/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc +0 -0
  585. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +0 -29
  586. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc +0 -0
  587. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc +0 -0
  588. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc +0 -0
  589. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc +0 -0
  590. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc +0 -0
  591. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc +0 -0
  592. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc +0 -0
  593. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc +0 -0
  594. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc +0 -0
  595. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +0 -70
  596. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +0 -161
  597. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +0 -75
  598. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +0 -8
  599. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc +0 -0
  600. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc +0 -0
  601. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc +0 -0
  602. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +0 -182
  603. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +0 -48
  604. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +0 -500
  605. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +0 -119
  606. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +0 -157
  607. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
  608. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +0 -146
  609. package/python/.venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +0 -43
  610. package/python/.venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +0 -4
  611. package/python/.venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +0 -12
  612. package/python/.venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc +0 -0
  613. package/python/.venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc +0 -0
  614. package/python/.venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc +0 -0
  615. package/python/.venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem +0 -4929
  616. package/python/.venv/Lib/site-packages/pip/_vendor/certifi/core.py +0 -114
  617. package/python/.venv/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
  618. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +0 -33
  619. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc +0 -0
  620. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc +0 -0
  621. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc +0 -0
  622. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-312.pyc +0 -0
  623. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc +0 -0
  624. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-312.pyc +0 -0
  625. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-312.pyc +0 -0
  626. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc +0 -0
  627. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc +0 -0
  628. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc +0 -0
  629. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc +0 -0
  630. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc +0 -0
  631. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc +0 -0
  632. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/compat.py +0 -1137
  633. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/database.py +0 -1329
  634. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/index.py +0 -508
  635. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/locators.py +0 -1295
  636. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/manifest.py +0 -384
  637. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/markers.py +0 -162
  638. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/metadata.py +0 -1031
  639. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/resources.py +0 -358
  640. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +0 -447
  641. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/t32.exe +0 -0
  642. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe +0 -0
  643. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/t64.exe +0 -0
  644. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/util.py +0 -1984
  645. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/version.py +0 -750
  646. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/w32.exe +0 -0
  647. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe +0 -0
  648. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/w64.exe +0 -0
  649. package/python/.venv/Lib/site-packages/pip/_vendor/distlib/wheel.py +0 -1100
  650. package/python/.venv/Lib/site-packages/pip/_vendor/distro/__init__.py +0 -54
  651. package/python/.venv/Lib/site-packages/pip/_vendor/distro/__main__.py +0 -4
  652. package/python/.venv/Lib/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc +0 -0
  653. package/python/.venv/Lib/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc +0 -0
  654. package/python/.venv/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc +0 -0
  655. package/python/.venv/Lib/site-packages/pip/_vendor/distro/distro.py +0 -1403
  656. package/python/.venv/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
  657. package/python/.venv/Lib/site-packages/pip/_vendor/idna/__init__.py +0 -45
  658. package/python/.venv/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc +0 -0
  659. package/python/.venv/Lib/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-312.pyc +0 -0
  660. package/python/.venv/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc +0 -0
  661. package/python/.venv/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc +0 -0
  662. package/python/.venv/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc +0 -0
  663. package/python/.venv/Lib/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc +0 -0
  664. package/python/.venv/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc +0 -0
  665. package/python/.venv/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc +0 -0
  666. package/python/.venv/Lib/site-packages/pip/_vendor/idna/codec.py +0 -122
  667. package/python/.venv/Lib/site-packages/pip/_vendor/idna/compat.py +0 -15
  668. package/python/.venv/Lib/site-packages/pip/_vendor/idna/core.py +0 -437
  669. package/python/.venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +0 -4243
  670. package/python/.venv/Lib/site-packages/pip/_vendor/idna/intranges.py +0 -57
  671. package/python/.venv/Lib/site-packages/pip/_vendor/idna/package_data.py +0 -1
  672. package/python/.venv/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
  673. package/python/.venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +0 -8681
  674. package/python/.venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +0 -55
  675. package/python/.venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc +0 -0
  676. package/python/.venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc +0 -0
  677. package/python/.venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc +0 -0
  678. package/python/.venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc +0 -0
  679. package/python/.venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +0 -48
  680. package/python/.venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +0 -170
  681. package/python/.venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +0 -929
  682. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +0 -15
  683. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc +0 -0
  684. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_elffile.cpython-312.pyc +0 -0
  685. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc +0 -0
  686. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc +0 -0
  687. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_parser.cpython-312.pyc +0 -0
  688. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc +0 -0
  689. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_tokenizer.cpython-312.pyc +0 -0
  690. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc +0 -0
  691. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/metadata.cpython-312.pyc +0 -0
  692. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc +0 -0
  693. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc +0 -0
  694. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc +0 -0
  695. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc +0 -0
  696. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc +0 -0
  697. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/_elffile.py +0 -110
  698. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +0 -263
  699. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +0 -85
  700. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/_parser.py +0 -354
  701. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +0 -61
  702. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py +0 -194
  703. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py +0 -145
  704. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-312.pyc +0 -0
  705. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-312.pyc +0 -0
  706. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py +0 -759
  707. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/markers.py +0 -331
  708. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/metadata.py +0 -863
  709. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
  710. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +0 -91
  711. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +0 -1020
  712. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/tags.py +0 -617
  713. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/utils.py +0 -163
  714. package/python/.venv/Lib/site-packages/pip/_vendor/packaging/version.py +0 -582
  715. package/python/.venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +0 -3676
  716. package/python/.venv/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc +0 -0
  717. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +0 -631
  718. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +0 -55
  719. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc +0 -0
  720. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc +0 -0
  721. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc +0 -0
  722. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc +0 -0
  723. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc +0 -0
  724. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc +0 -0
  725. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc +0 -0
  726. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc +0 -0
  727. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/android.py +0 -249
  728. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/api.py +0 -298
  729. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py +0 -144
  730. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
  731. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py +0 -269
  732. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/version.py +0 -16
  733. package/python/.venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py +0 -272
  734. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__init__.py +0 -82
  735. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__main__.py +0 -17
  736. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc +0 -0
  737. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc +0 -0
  738. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc +0 -0
  739. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc +0 -0
  740. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc +0 -0
  741. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc +0 -0
  742. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc +0 -0
  743. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc +0 -0
  744. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc +0 -0
  745. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc +0 -0
  746. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc +0 -0
  747. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc +0 -0
  748. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc +0 -0
  749. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc +0 -0
  750. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc +0 -0
  751. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc +0 -0
  752. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/cmdline.py +0 -668
  753. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/console.py +0 -70
  754. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/filter.py +0 -70
  755. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +0 -940
  756. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc +0 -0
  757. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatter.py +0 -129
  758. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +0 -157
  759. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc +0 -0
  760. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc +0 -0
  761. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc +0 -0
  762. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc +0 -0
  763. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc +0 -0
  764. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc +0 -0
  765. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc +0 -0
  766. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc +0 -0
  767. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc +0 -0
  768. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc +0 -0
  769. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc +0 -0
  770. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc +0 -0
  771. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc +0 -0
  772. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc +0 -0
  773. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +0 -23
  774. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/bbcode.py +0 -108
  775. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/groff.py +0 -170
  776. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/html.py +0 -987
  777. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/img.py +0 -685
  778. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/irc.py +0 -154
  779. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/latex.py +0 -518
  780. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/other.py +0 -160
  781. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py +0 -83
  782. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/rtf.py +0 -349
  783. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/svg.py +0 -185
  784. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal.py +0 -127
  785. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal256.py +0 -338
  786. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/lexer.py +0 -963
  787. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +0 -362
  788. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-312.pyc +0 -0
  789. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-312.pyc +0 -0
  790. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-312.pyc +0 -0
  791. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +0 -589
  792. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +0 -1198
  793. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/modeline.py +0 -43
  794. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/plugin.py +0 -72
  795. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py +0 -91
  796. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/scanner.py +0 -104
  797. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +0 -247
  798. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/style.py +0 -203
  799. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +0 -61
  800. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc +0 -0
  801. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/_mapping.cpython-312.pyc +0 -0
  802. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py +0 -54
  803. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/token.py +0 -214
  804. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/unistring.py +0 -153
  805. package/python/.venv/Lib/site-packages/pip/_vendor/pygments/util.py +0 -324
  806. package/python/.venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +0 -31
  807. package/python/.venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc +0 -0
  808. package/python/.venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc +0 -0
  809. package/python/.venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +0 -410
  810. package/python/.venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +0 -21
  811. package/python/.venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc +0 -0
  812. package/python/.venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc +0 -0
  813. package/python/.venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +0 -389
  814. package/python/.venv/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed +0 -0
  815. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__init__.py +0 -179
  816. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc +0 -0
  817. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc +0 -0
  818. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc +0 -0
  819. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc +0 -0
  820. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc +0 -0
  821. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-312.pyc +0 -0
  822. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-312.pyc +0 -0
  823. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc +0 -0
  824. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc +0 -0
  825. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc +0 -0
  826. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/help.cpython-312.pyc +0 -0
  827. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc +0 -0
  828. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-312.pyc +0 -0
  829. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-312.pyc +0 -0
  830. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc +0 -0
  831. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc +0 -0
  832. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-312.pyc +0 -0
  833. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc +0 -0
  834. package/python/.venv/Lib/site-packages/pip/_vendor/requests/__version__.py +0 -14
  835. package/python/.venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +0 -50
  836. package/python/.venv/Lib/site-packages/pip/_vendor/requests/adapters.py +0 -719
  837. package/python/.venv/Lib/site-packages/pip/_vendor/requests/api.py +0 -157
  838. package/python/.venv/Lib/site-packages/pip/_vendor/requests/auth.py +0 -314
  839. package/python/.venv/Lib/site-packages/pip/_vendor/requests/certs.py +0 -17
  840. package/python/.venv/Lib/site-packages/pip/_vendor/requests/compat.py +0 -78
  841. package/python/.venv/Lib/site-packages/pip/_vendor/requests/cookies.py +0 -561
  842. package/python/.venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +0 -151
  843. package/python/.venv/Lib/site-packages/pip/_vendor/requests/help.py +0 -127
  844. package/python/.venv/Lib/site-packages/pip/_vendor/requests/hooks.py +0 -33
  845. package/python/.venv/Lib/site-packages/pip/_vendor/requests/models.py +0 -1037
  846. package/python/.venv/Lib/site-packages/pip/_vendor/requests/packages.py +0 -25
  847. package/python/.venv/Lib/site-packages/pip/_vendor/requests/sessions.py +0 -831
  848. package/python/.venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +0 -128
  849. package/python/.venv/Lib/site-packages/pip/_vendor/requests/structures.py +0 -99
  850. package/python/.venv/Lib/site-packages/pip/_vendor/requests/utils.py +0 -1096
  851. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +0 -26
  852. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc +0 -0
  853. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc +0 -0
  854. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc +0 -0
  855. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-312.pyc +0 -0
  856. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc +0 -0
  857. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py +0 -0
  858. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-312.pyc +0 -0
  859. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-312.pyc +0 -0
  860. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +0 -6
  861. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +0 -133
  862. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
  863. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +0 -43
  864. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py +0 -547
  865. package/python/.venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +0 -170
  866. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__init__.py +0 -177
  867. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__main__.py +0 -273
  868. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc +0 -0
  869. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-312.pyc +0 -0
  870. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc +0 -0
  871. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc +0 -0
  872. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc +0 -0
  873. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc +0 -0
  874. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc +0 -0
  875. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc +0 -0
  876. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-312.pyc +0 -0
  877. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc +0 -0
  878. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc +0 -0
  879. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc +0 -0
  880. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc +0 -0
  881. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc +0 -0
  882. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc +0 -0
  883. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc +0 -0
  884. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-312.pyc +0 -0
  885. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-312.pyc +0 -0
  886. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc +0 -0
  887. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-312.pyc +0 -0
  888. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc +0 -0
  889. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc +0 -0
  890. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc +0 -0
  891. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc +0 -0
  892. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc +0 -0
  893. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-312.pyc +0 -0
  894. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-312.pyc +0 -0
  895. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc +0 -0
  896. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-312.pyc +0 -0
  897. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc +0 -0
  898. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-312.pyc +0 -0
  899. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc +0 -0
  900. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc +0 -0
  901. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc +0 -0
  902. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc +0 -0
  903. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc +0 -0
  904. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-312.pyc +0 -0
  905. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc +0 -0
  906. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-312.pyc +0 -0
  907. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc +0 -0
  908. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc +0 -0
  909. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc +0 -0
  910. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-312.pyc +0 -0
  911. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc +0 -0
  912. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-312.pyc +0 -0
  913. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/live.cpython-312.pyc +0 -0
  914. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc +0 -0
  915. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-312.pyc +0 -0
  916. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc +0 -0
  917. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-312.pyc +0 -0
  918. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-312.pyc +0 -0
  919. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-312.pyc +0 -0
  920. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-312.pyc +0 -0
  921. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc +0 -0
  922. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc +0 -0
  923. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-312.pyc +0 -0
  924. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc +0 -0
  925. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-312.pyc +0 -0
  926. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc +0 -0
  927. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/region.cpython-312.pyc +0 -0
  928. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-312.pyc +0 -0
  929. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-312.pyc +0 -0
  930. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc +0 -0
  931. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-312.pyc +0 -0
  932. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc +0 -0
  933. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc +0 -0
  934. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-312.pyc +0 -0
  935. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-312.pyc +0 -0
  936. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-312.pyc +0 -0
  937. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc +0 -0
  938. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-312.pyc +0 -0
  939. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc +0 -0
  940. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-312.pyc +0 -0
  941. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-312.pyc +0 -0
  942. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-312.pyc +0 -0
  943. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc +0 -0
  944. package/python/.venv/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-312.pyc +0 -0
  945. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +0 -454
  946. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +0 -3610
  947. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +0 -32
  948. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_export_format.py +0 -76
  949. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_extension.py +0 -10
  950. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_fileno.py +0 -24
  951. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_inspect.py +0 -268
  952. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_log_render.py +0 -94
  953. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_loop.py +0 -43
  954. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_null_file.py +0 -69
  955. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_palettes.py +0 -309
  956. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_pick.py +0 -17
  957. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_ratio.py +0 -159
  958. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_spinners.py +0 -482
  959. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_stack.py +0 -16
  960. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_timer.py +0 -19
  961. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py +0 -661
  962. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_windows.py +0 -71
  963. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +0 -56
  964. package/python/.venv/Lib/site-packages/pip/_vendor/rich/_wrap.py +0 -93
  965. package/python/.venv/Lib/site-packages/pip/_vendor/rich/abc.py +0 -33
  966. package/python/.venv/Lib/site-packages/pip/_vendor/rich/align.py +0 -312
  967. package/python/.venv/Lib/site-packages/pip/_vendor/rich/ansi.py +0 -241
  968. package/python/.venv/Lib/site-packages/pip/_vendor/rich/bar.py +0 -93
  969. package/python/.venv/Lib/site-packages/pip/_vendor/rich/box.py +0 -480
  970. package/python/.venv/Lib/site-packages/pip/_vendor/rich/cells.py +0 -174
  971. package/python/.venv/Lib/site-packages/pip/_vendor/rich/color.py +0 -621
  972. package/python/.venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py +0 -38
  973. package/python/.venv/Lib/site-packages/pip/_vendor/rich/columns.py +0 -187
  974. package/python/.venv/Lib/site-packages/pip/_vendor/rich/console.py +0 -2661
  975. package/python/.venv/Lib/site-packages/pip/_vendor/rich/constrain.py +0 -37
  976. package/python/.venv/Lib/site-packages/pip/_vendor/rich/containers.py +0 -167
  977. package/python/.venv/Lib/site-packages/pip/_vendor/rich/control.py +0 -225
  978. package/python/.venv/Lib/site-packages/pip/_vendor/rich/default_styles.py +0 -191
  979. package/python/.venv/Lib/site-packages/pip/_vendor/rich/diagnose.py +0 -37
  980. package/python/.venv/Lib/site-packages/pip/_vendor/rich/emoji.py +0 -96
  981. package/python/.venv/Lib/site-packages/pip/_vendor/rich/errors.py +0 -34
  982. package/python/.venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py +0 -57
  983. package/python/.venv/Lib/site-packages/pip/_vendor/rich/filesize.py +0 -88
  984. package/python/.venv/Lib/site-packages/pip/_vendor/rich/highlighter.py +0 -232
  985. package/python/.venv/Lib/site-packages/pip/_vendor/rich/json.py +0 -139
  986. package/python/.venv/Lib/site-packages/pip/_vendor/rich/jupyter.py +0 -101
  987. package/python/.venv/Lib/site-packages/pip/_vendor/rich/layout.py +0 -442
  988. package/python/.venv/Lib/site-packages/pip/_vendor/rich/live.py +0 -375
  989. package/python/.venv/Lib/site-packages/pip/_vendor/rich/live_render.py +0 -112
  990. package/python/.venv/Lib/site-packages/pip/_vendor/rich/logging.py +0 -297
  991. package/python/.venv/Lib/site-packages/pip/_vendor/rich/markup.py +0 -251
  992. package/python/.venv/Lib/site-packages/pip/_vendor/rich/measure.py +0 -151
  993. package/python/.venv/Lib/site-packages/pip/_vendor/rich/padding.py +0 -141
  994. package/python/.venv/Lib/site-packages/pip/_vendor/rich/pager.py +0 -34
  995. package/python/.venv/Lib/site-packages/pip/_vendor/rich/palette.py +0 -100
  996. package/python/.venv/Lib/site-packages/pip/_vendor/rich/panel.py +0 -318
  997. package/python/.venv/Lib/site-packages/pip/_vendor/rich/pretty.py +0 -1016
  998. package/python/.venv/Lib/site-packages/pip/_vendor/rich/progress.py +0 -1715
  999. package/python/.venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py +0 -223
  1000. package/python/.venv/Lib/site-packages/pip/_vendor/rich/prompt.py +0 -400
  1001. package/python/.venv/Lib/site-packages/pip/_vendor/rich/protocol.py +0 -42
  1002. package/python/.venv/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
  1003. package/python/.venv/Lib/site-packages/pip/_vendor/rich/region.py +0 -10
  1004. package/python/.venv/Lib/site-packages/pip/_vendor/rich/repr.py +0 -149
  1005. package/python/.venv/Lib/site-packages/pip/_vendor/rich/rule.py +0 -130
  1006. package/python/.venv/Lib/site-packages/pip/_vendor/rich/scope.py +0 -86
  1007. package/python/.venv/Lib/site-packages/pip/_vendor/rich/screen.py +0 -54
  1008. package/python/.venv/Lib/site-packages/pip/_vendor/rich/segment.py +0 -752
  1009. package/python/.venv/Lib/site-packages/pip/_vendor/rich/spinner.py +0 -138
  1010. package/python/.venv/Lib/site-packages/pip/_vendor/rich/status.py +0 -131
  1011. package/python/.venv/Lib/site-packages/pip/_vendor/rich/style.py +0 -796
  1012. package/python/.venv/Lib/site-packages/pip/_vendor/rich/styled.py +0 -42
  1013. package/python/.venv/Lib/site-packages/pip/_vendor/rich/syntax.py +0 -966
  1014. package/python/.venv/Lib/site-packages/pip/_vendor/rich/table.py +0 -1007
  1015. package/python/.venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +0 -153
  1016. package/python/.venv/Lib/site-packages/pip/_vendor/rich/text.py +0 -1361
  1017. package/python/.venv/Lib/site-packages/pip/_vendor/rich/theme.py +0 -115
  1018. package/python/.venv/Lib/site-packages/pip/_vendor/rich/themes.py +0 -5
  1019. package/python/.venv/Lib/site-packages/pip/_vendor/rich/traceback.py +0 -797
  1020. package/python/.venv/Lib/site-packages/pip/_vendor/rich/tree.py +0 -257
  1021. package/python/.venv/Lib/site-packages/pip/_vendor/tomli/__init__.py +0 -8
  1022. package/python/.venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc +0 -0
  1023. package/python/.venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc +0 -0
  1024. package/python/.venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc +0 -0
  1025. package/python/.venv/Lib/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc +0 -0
  1026. package/python/.venv/Lib/site-packages/pip/_vendor/tomli/_parser.py +0 -770
  1027. package/python/.venv/Lib/site-packages/pip/_vendor/tomli/_re.py +0 -112
  1028. package/python/.venv/Lib/site-packages/pip/_vendor/tomli/_types.py +0 -10
  1029. package/python/.venv/Lib/site-packages/pip/_vendor/tomli/py.typed +0 -1
  1030. package/python/.venv/Lib/site-packages/pip/_vendor/truststore/__init__.py +0 -36
  1031. package/python/.venv/Lib/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc +0 -0
  1032. package/python/.venv/Lib/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc +0 -0
  1033. package/python/.venv/Lib/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc +0 -0
  1034. package/python/.venv/Lib/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc +0 -0
  1035. package/python/.venv/Lib/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc +0 -0
  1036. package/python/.venv/Lib/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc +0 -0
  1037. package/python/.venv/Lib/site-packages/pip/_vendor/truststore/_api.py +0 -316
  1038. package/python/.venv/Lib/site-packages/pip/_vendor/truststore/_macos.py +0 -571
  1039. package/python/.venv/Lib/site-packages/pip/_vendor/truststore/_openssl.py +0 -66
  1040. package/python/.venv/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py +0 -31
  1041. package/python/.venv/Lib/site-packages/pip/_vendor/truststore/_windows.py +0 -567
  1042. package/python/.venv/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
  1043. package/python/.venv/Lib/site-packages/pip/_vendor/typing_extensions.py +0 -3641
  1044. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +0 -102
  1045. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
  1046. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc +0 -0
  1047. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc +0 -0
  1048. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc +0 -0
  1049. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc +0 -0
  1050. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
  1051. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc +0 -0
  1052. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc +0 -0
  1053. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc +0 -0
  1054. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc +0 -0
  1055. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc +0 -0
  1056. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +0 -355
  1057. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +0 -2
  1058. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +0 -572
  1059. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +0 -1140
  1060. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  1061. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc +0 -0
  1062. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc +0 -0
  1063. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-312.pyc +0 -0
  1064. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-312.pyc +0 -0
  1065. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc +0 -0
  1066. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-312.pyc +0 -0
  1067. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc +0 -0
  1068. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +0 -36
  1069. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  1070. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-312.pyc +0 -0
  1071. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-312.pyc +0 -0
  1072. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-312.pyc +0 -0
  1073. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +0 -519
  1074. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +0 -397
  1075. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +0 -314
  1076. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +0 -130
  1077. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +0 -518
  1078. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +0 -920
  1079. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +0 -216
  1080. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +0 -323
  1081. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +0 -274
  1082. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +0 -98
  1083. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
  1084. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc +0 -0
  1085. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc +0 -0
  1086. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  1087. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-312.pyc +0 -0
  1088. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-312.pyc +0 -0
  1089. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-312.pyc +0 -0
  1090. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +0 -51
  1091. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +0 -155
  1092. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +0 -1076
  1093. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +0 -540
  1094. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/request.py +0 -191
  1095. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/response.py +0 -879
  1096. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +0 -49
  1097. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc +0 -0
  1098. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc +0 -0
  1099. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc +0 -0
  1100. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc +0 -0
  1101. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc +0 -0
  1102. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc +0 -0
  1103. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc +0 -0
  1104. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc +0 -0
  1105. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc +0 -0
  1106. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc +0 -0
  1107. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc +0 -0
  1108. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc +0 -0
  1109. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc +0 -0
  1110. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +0 -149
  1111. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +0 -57
  1112. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +0 -22
  1113. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +0 -137
  1114. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +0 -107
  1115. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +0 -622
  1116. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +0 -504
  1117. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +0 -159
  1118. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +0 -221
  1119. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +0 -271
  1120. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +0 -435
  1121. package/python/.venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +0 -152
  1122. package/python/.venv/Lib/site-packages/pip/_vendor/vendor.txt +0 -18
  1123. package/python/.venv/Lib/site-packages/pip/py.typed +0 -4
  1124. package/python/.venv/Lib/site-packages/pip-25.0.1.dist-info/AUTHORS.txt +0 -806
  1125. package/python/.venv/Lib/site-packages/pip-25.0.1.dist-info/INSTALLER +0 -1
  1126. package/python/.venv/Lib/site-packages/pip-25.0.1.dist-info/LICENSE.txt +0 -20
  1127. package/python/.venv/Lib/site-packages/pip-25.0.1.dist-info/METADATA +0 -90
  1128. package/python/.venv/Lib/site-packages/pip-25.0.1.dist-info/RECORD +0 -854
  1129. package/python/.venv/Lib/site-packages/pip-25.0.1.dist-info/REQUESTED +0 -0
  1130. package/python/.venv/Lib/site-packages/pip-25.0.1.dist-info/WHEEL +0 -5
  1131. package/python/.venv/Lib/site-packages/pip-25.0.1.dist-info/entry_points.txt +0 -3
  1132. package/python/.venv/Lib/site-packages/pip-25.0.1.dist-info/top_level.txt +0 -1
  1133. package/python/.venv/Lib/site-packages/typing_extensions-4.15.0.dist-info/INSTALLER +0 -1
  1134. package/python/.venv/Lib/site-packages/typing_extensions-4.15.0.dist-info/METADATA +0 -72
  1135. package/python/.venv/Lib/site-packages/typing_extensions-4.15.0.dist-info/RECORD +0 -7
  1136. package/python/.venv/Lib/site-packages/typing_extensions-4.15.0.dist-info/WHEEL +0 -4
  1137. package/python/.venv/Lib/site-packages/typing_extensions-4.15.0.dist-info/licenses/LICENSE +0 -279
  1138. package/python/.venv/Lib/site-packages/typing_extensions.py +0 -4317
  1139. package/python/.venv/Scripts/Activate.ps1 +0 -528
  1140. package/python/.venv/Scripts/activate +0 -76
  1141. package/python/.venv/Scripts/activate.bat +0 -34
  1142. package/python/.venv/Scripts/deactivate.bat +0 -22
  1143. package/python/.venv/Scripts/httpx.exe +0 -0
  1144. package/python/.venv/Scripts/pip.exe +0 -0
  1145. package/python/.venv/Scripts/pip3.12.exe +0 -0
  1146. package/python/.venv/Scripts/pip3.exe +0 -0
  1147. package/python/.venv/Scripts/python.exe +0 -0
  1148. package/python/.venv/Scripts/pythonw.exe +0 -0
  1149. package/python/.venv/pyvenv.cfg +0 -5
@@ -1,2996 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import array
4
- import asyncio
5
- import concurrent.futures
6
- import contextvars
7
- import math
8
- import os
9
- import socket
10
- import sys
11
- import threading
12
- import weakref
13
- from asyncio import (
14
- AbstractEventLoop,
15
- CancelledError,
16
- all_tasks,
17
- create_task,
18
- current_task,
19
- get_running_loop,
20
- sleep,
21
- )
22
- from asyncio.base_events import _run_until_complete_cb # type: ignore[attr-defined]
23
- from collections import OrderedDict, deque
24
- from collections.abc import (
25
- AsyncGenerator,
26
- AsyncIterator,
27
- Awaitable,
28
- Callable,
29
- Collection,
30
- Coroutine,
31
- Iterable,
32
- Sequence,
33
- )
34
- from concurrent.futures import Future
35
- from contextlib import AbstractContextManager, suppress
36
- from contextvars import Context, copy_context
37
- from dataclasses import dataclass, field
38
- from functools import partial, wraps
39
- from inspect import (
40
- CORO_RUNNING,
41
- CORO_SUSPENDED,
42
- getcoroutinestate,
43
- iscoroutine,
44
- )
45
- from io import IOBase
46
- from os import PathLike
47
- from queue import Queue
48
- from signal import Signals
49
- from socket import AddressFamily, SocketKind
50
- from threading import Thread
51
- from types import CodeType, TracebackType
52
- from typing import (
53
- IO,
54
- TYPE_CHECKING,
55
- Any,
56
- ParamSpec,
57
- TypeVar,
58
- cast,
59
- )
60
- from weakref import WeakKeyDictionary
61
-
62
- from .. import (
63
- CapacityLimiterStatistics,
64
- EventStatistics,
65
- LockStatistics,
66
- TaskInfo,
67
- abc,
68
- )
69
- from .._core._eventloop import (
70
- claim_worker_thread,
71
- set_current_async_library,
72
- threadlocals,
73
- )
74
- from .._core._exceptions import (
75
- BrokenResourceError,
76
- BusyResourceError,
77
- ClosedResourceError,
78
- EndOfStream,
79
- RunFinishedError,
80
- WouldBlock,
81
- )
82
- from .._core._sockets import convert_ipv6_sockaddr
83
- from .._core._streams import create_memory_object_stream
84
- from .._core._synchronization import (
85
- CapacityLimiter as BaseCapacityLimiter,
86
- )
87
- from .._core._synchronization import Event as BaseEvent
88
- from .._core._synchronization import Lock as BaseLock
89
- from .._core._synchronization import (
90
- ResourceGuard,
91
- SemaphoreStatistics,
92
- )
93
- from .._core._synchronization import Semaphore as BaseSemaphore
94
- from .._core._tasks import CancelScope as BaseCancelScope
95
- from ..abc import (
96
- AsyncBackend,
97
- IPSockAddrType,
98
- SocketListener,
99
- UDPPacketType,
100
- UNIXDatagramPacketType,
101
- )
102
- from ..abc._eventloop import StrOrBytesPath
103
- from ..lowlevel import RunVar
104
- from ..streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
105
-
106
- if TYPE_CHECKING:
107
- from _typeshed import FileDescriptorLike
108
- else:
109
- FileDescriptorLike = object
110
-
111
- if sys.version_info >= (3, 11):
112
- from asyncio import Runner
113
- from typing import TypeVarTuple, Unpack
114
- else:
115
- import contextvars
116
- import enum
117
- import signal
118
- from asyncio import coroutines, events, exceptions, tasks
119
-
120
- from exceptiongroup import BaseExceptionGroup
121
- from typing_extensions import TypeVarTuple, Unpack
122
-
123
- class _State(enum.Enum):
124
- CREATED = "created"
125
- INITIALIZED = "initialized"
126
- CLOSED = "closed"
127
-
128
- class Runner:
129
- # Copied from CPython 3.11
130
- def __init__(
131
- self,
132
- *,
133
- debug: bool | None = None,
134
- loop_factory: Callable[[], AbstractEventLoop] | None = None,
135
- ):
136
- self._state = _State.CREATED
137
- self._debug = debug
138
- self._loop_factory = loop_factory
139
- self._loop: AbstractEventLoop | None = None
140
- self._context = None
141
- self._interrupt_count = 0
142
- self._set_event_loop = False
143
-
144
- def __enter__(self) -> Runner:
145
- self._lazy_init()
146
- return self
147
-
148
- def __exit__(
149
- self,
150
- exc_type: type[BaseException] | None,
151
- exc_val: BaseException | None,
152
- exc_tb: TracebackType | None,
153
- ) -> None:
154
- self.close()
155
-
156
- def close(self) -> None:
157
- """Shutdown and close event loop."""
158
- loop = self._loop
159
- if self._state is not _State.INITIALIZED or loop is None:
160
- return
161
- try:
162
- _cancel_all_tasks(loop)
163
- loop.run_until_complete(loop.shutdown_asyncgens())
164
- if hasattr(loop, "shutdown_default_executor"):
165
- loop.run_until_complete(loop.shutdown_default_executor())
166
- else:
167
- loop.run_until_complete(_shutdown_default_executor(loop))
168
- finally:
169
- if self._set_event_loop:
170
- events.set_event_loop(None)
171
- loop.close()
172
- self._loop = None
173
- self._state = _State.CLOSED
174
-
175
- def get_loop(self) -> AbstractEventLoop:
176
- """Return embedded event loop."""
177
- self._lazy_init()
178
- return self._loop
179
-
180
- def run(self, coro: Coroutine[T_Retval], *, context=None) -> T_Retval:
181
- """Run a coroutine inside the embedded event loop."""
182
- if not coroutines.iscoroutine(coro):
183
- raise ValueError(f"a coroutine was expected, got {coro!r}")
184
-
185
- if events._get_running_loop() is not None:
186
- # fail fast with short traceback
187
- raise RuntimeError(
188
- "Runner.run() cannot be called from a running event loop"
189
- )
190
-
191
- self._lazy_init()
192
-
193
- if context is None:
194
- context = self._context
195
- task = context.run(self._loop.create_task, coro)
196
-
197
- if (
198
- threading.current_thread() is threading.main_thread()
199
- and signal.getsignal(signal.SIGINT) is signal.default_int_handler
200
- ):
201
- sigint_handler = partial(self._on_sigint, main_task=task)
202
- try:
203
- signal.signal(signal.SIGINT, sigint_handler)
204
- except ValueError:
205
- # `signal.signal` may throw if `threading.main_thread` does
206
- # not support signals (e.g. embedded interpreter with signals
207
- # not registered - see gh-91880)
208
- sigint_handler = None
209
- else:
210
- sigint_handler = None
211
-
212
- self._interrupt_count = 0
213
- try:
214
- return self._loop.run_until_complete(task)
215
- except exceptions.CancelledError:
216
- if self._interrupt_count > 0:
217
- uncancel = getattr(task, "uncancel", None)
218
- if uncancel is not None and uncancel() == 0:
219
- raise KeyboardInterrupt # noqa: B904
220
- raise # CancelledError
221
- finally:
222
- if (
223
- sigint_handler is not None
224
- and signal.getsignal(signal.SIGINT) is sigint_handler
225
- ):
226
- signal.signal(signal.SIGINT, signal.default_int_handler)
227
-
228
- def _lazy_init(self) -> None:
229
- if self._state is _State.CLOSED:
230
- raise RuntimeError("Runner is closed")
231
- if self._state is _State.INITIALIZED:
232
- return
233
- if self._loop_factory is None:
234
- self._loop = events.new_event_loop()
235
- if not self._set_event_loop:
236
- # Call set_event_loop only once to avoid calling
237
- # attach_loop multiple times on child watchers
238
- events.set_event_loop(self._loop)
239
- self._set_event_loop = True
240
- else:
241
- self._loop = self._loop_factory()
242
- if self._debug is not None:
243
- self._loop.set_debug(self._debug)
244
- self._context = contextvars.copy_context()
245
- self._state = _State.INITIALIZED
246
-
247
- def _on_sigint(self, signum, frame, main_task: asyncio.Task) -> None:
248
- self._interrupt_count += 1
249
- if self._interrupt_count == 1 and not main_task.done():
250
- main_task.cancel()
251
- # wakeup loop if it is blocked by select() with long timeout
252
- self._loop.call_soon_threadsafe(lambda: None)
253
- return
254
- raise KeyboardInterrupt()
255
-
256
- def _cancel_all_tasks(loop: AbstractEventLoop) -> None:
257
- to_cancel = tasks.all_tasks(loop)
258
- if not to_cancel:
259
- return
260
-
261
- for task in to_cancel:
262
- task.cancel()
263
-
264
- loop.run_until_complete(tasks.gather(*to_cancel, return_exceptions=True))
265
-
266
- for task in to_cancel:
267
- if task.cancelled():
268
- continue
269
- if task.exception() is not None:
270
- loop.call_exception_handler(
271
- {
272
- "message": "unhandled exception during asyncio.run() shutdown",
273
- "exception": task.exception(),
274
- "task": task,
275
- }
276
- )
277
-
278
- async def _shutdown_default_executor(loop: AbstractEventLoop) -> None:
279
- """Schedule the shutdown of the default executor."""
280
-
281
- def _do_shutdown(future: asyncio.futures.Future) -> None:
282
- try:
283
- loop._default_executor.shutdown(wait=True) # type: ignore[attr-defined]
284
- loop.call_soon_threadsafe(future.set_result, None)
285
- except Exception as ex:
286
- loop.call_soon_threadsafe(future.set_exception, ex)
287
-
288
- loop._executor_shutdown_called = True
289
- if loop._default_executor is None:
290
- return
291
- future = loop.create_future()
292
- thread = threading.Thread(target=_do_shutdown, args=(future,))
293
- thread.start()
294
- try:
295
- await future
296
- finally:
297
- thread.join()
298
-
299
-
300
- T_Retval = TypeVar("T_Retval")
301
- T_contra = TypeVar("T_contra", contravariant=True)
302
- PosArgsT = TypeVarTuple("PosArgsT")
303
- P = ParamSpec("P")
304
-
305
- _root_task: RunVar[asyncio.Task | None] = RunVar("_root_task")
306
-
307
-
308
- def find_root_task() -> asyncio.Task:
309
- root_task = _root_task.get(None)
310
- if root_task is not None and not root_task.done():
311
- return root_task
312
-
313
- # Look for a task that has been started via run_until_complete()
314
- for task in all_tasks():
315
- if task._callbacks and not task.done():
316
- callbacks = [cb for cb, context in task._callbacks]
317
- for cb in callbacks:
318
- if (
319
- cb is _run_until_complete_cb
320
- or getattr(cb, "__module__", None) == "uvloop.loop"
321
- ):
322
- _root_task.set(task)
323
- return task
324
-
325
- # Look up the topmost task in the AnyIO task tree, if possible
326
- task = cast(asyncio.Task, current_task())
327
- state = _task_states.get(task)
328
- if state:
329
- cancel_scope = state.cancel_scope
330
- while cancel_scope and cancel_scope._parent_scope is not None:
331
- cancel_scope = cancel_scope._parent_scope
332
-
333
- if cancel_scope is not None:
334
- return cast(asyncio.Task, cancel_scope._host_task)
335
-
336
- return task
337
-
338
-
339
- def get_callable_name(func: Callable) -> str:
340
- module = getattr(func, "__module__", None)
341
- qualname = getattr(func, "__qualname__", None)
342
- return ".".join([x for x in (module, qualname) if x])
343
-
344
-
345
- #
346
- # Event loop
347
- #
348
-
349
- _run_vars: WeakKeyDictionary[asyncio.AbstractEventLoop, Any] = WeakKeyDictionary()
350
-
351
-
352
- def _task_started(task: asyncio.Task) -> bool:
353
- """Return ``True`` if the task has been started and has not finished."""
354
- # The task coro should never be None here, as we never add finished tasks to the
355
- # task list
356
- coro = task.get_coro()
357
- assert coro is not None
358
- try:
359
- return getcoroutinestate(coro) in (CORO_RUNNING, CORO_SUSPENDED)
360
- except AttributeError:
361
- # task coro is async_genenerator_asend https://bugs.python.org/issue37771
362
- raise Exception(f"Cannot determine if task {task} has started or not") from None
363
-
364
-
365
- #
366
- # Timeouts and cancellation
367
- #
368
-
369
-
370
- def is_anyio_cancellation(exc: CancelledError) -> bool:
371
- # Sometimes third party frameworks catch a CancelledError and raise a new one, so as
372
- # a workaround we have to look at the previous ones in __context__ too for a
373
- # matching cancel message
374
- while True:
375
- if (
376
- exc.args
377
- and isinstance(exc.args[0], str)
378
- and exc.args[0].startswith("Cancelled via cancel scope ")
379
- ):
380
- return True
381
-
382
- if isinstance(exc.__context__, CancelledError):
383
- exc = exc.__context__
384
- continue
385
-
386
- return False
387
-
388
-
389
- class CancelScope(BaseCancelScope):
390
- def __new__(
391
- cls, *, deadline: float = math.inf, shield: bool = False
392
- ) -> CancelScope:
393
- return object.__new__(cls)
394
-
395
- def __init__(self, deadline: float = math.inf, shield: bool = False):
396
- self._deadline = deadline
397
- self._shield = shield
398
- self._parent_scope: CancelScope | None = None
399
- self._child_scopes: set[CancelScope] = set()
400
- self._cancel_called = False
401
- self._cancel_reason: str | None = None
402
- self._cancelled_caught = False
403
- self._active = False
404
- self._timeout_handle: asyncio.TimerHandle | None = None
405
- self._cancel_handle: asyncio.Handle | None = None
406
- self._tasks: set[asyncio.Task] = set()
407
- self._host_task: asyncio.Task | None = None
408
- if sys.version_info >= (3, 11):
409
- self._pending_uncancellations: int | None = 0
410
- else:
411
- self._pending_uncancellations = None
412
-
413
- def __enter__(self) -> CancelScope:
414
- if self._active:
415
- raise RuntimeError(
416
- "Each CancelScope may only be used for a single 'with' block"
417
- )
418
-
419
- self._host_task = host_task = cast(asyncio.Task, current_task())
420
- self._tasks.add(host_task)
421
- try:
422
- task_state = _task_states[host_task]
423
- except KeyError:
424
- task_state = TaskState(None, self)
425
- _task_states[host_task] = task_state
426
- else:
427
- self._parent_scope = task_state.cancel_scope
428
- task_state.cancel_scope = self
429
- if self._parent_scope is not None:
430
- # If using an eager task factory, the parent scope may not even contain
431
- # the host task
432
- self._parent_scope._child_scopes.add(self)
433
- self._parent_scope._tasks.discard(host_task)
434
-
435
- self._timeout()
436
- self._active = True
437
-
438
- # Start cancelling the host task if the scope was cancelled before entering
439
- if self._cancel_called:
440
- self._deliver_cancellation(self)
441
-
442
- return self
443
-
444
- def __exit__(
445
- self,
446
- exc_type: type[BaseException] | None,
447
- exc_val: BaseException | None,
448
- exc_tb: TracebackType | None,
449
- ) -> bool:
450
- del exc_tb
451
-
452
- if not self._active:
453
- raise RuntimeError("This cancel scope is not active")
454
- if current_task() is not self._host_task:
455
- raise RuntimeError(
456
- "Attempted to exit cancel scope in a different task than it was "
457
- "entered in"
458
- )
459
-
460
- assert self._host_task is not None
461
- host_task_state = _task_states.get(self._host_task)
462
- if host_task_state is None or host_task_state.cancel_scope is not self:
463
- raise RuntimeError(
464
- "Attempted to exit a cancel scope that isn't the current tasks's "
465
- "current cancel scope"
466
- )
467
-
468
- try:
469
- self._active = False
470
- if self._timeout_handle:
471
- self._timeout_handle.cancel()
472
- self._timeout_handle = None
473
-
474
- self._tasks.remove(self._host_task)
475
- if self._parent_scope is not None:
476
- self._parent_scope._child_scopes.remove(self)
477
- self._parent_scope._tasks.add(self._host_task)
478
-
479
- host_task_state.cancel_scope = self._parent_scope
480
-
481
- # Restart the cancellation effort in the closest visible, cancelled parent
482
- # scope if necessary
483
- self._restart_cancellation_in_parent()
484
-
485
- # We only swallow the exception iff it was an AnyIO CancelledError, either
486
- # directly as exc_val or inside an exception group and there are no cancelled
487
- # parent cancel scopes visible to us here
488
- if self._cancel_called and not self._parent_cancellation_is_visible_to_us:
489
- # For each level-cancel() call made on the host task, call uncancel()
490
- while self._pending_uncancellations:
491
- self._host_task.uncancel()
492
- self._pending_uncancellations -= 1
493
-
494
- # Update cancelled_caught and check for exceptions we must not swallow
495
- if isinstance(exc_val, BaseExceptionGroup):
496
- cancelleds_caught, remaining = exc_val.split(
497
- lambda exc: (
498
- isinstance(exc, CancelledError)
499
- and is_anyio_cancellation(exc)
500
- )
501
- )
502
-
503
- if cancelleds_caught is None:
504
- return False
505
-
506
- self._cancelled_caught = True
507
-
508
- if remaining is None:
509
- return True
510
-
511
- context = remaining.__context__
512
- try:
513
- # Preserve __cause__ and __suppress_context__ by avoiding `raise
514
- # ... from ...`
515
- raise remaining
516
- finally:
517
- # Preserve __context__
518
- remaining.__context__ = context
519
- del context
520
- else:
521
- if isinstance(exc_val, CancelledError) and is_anyio_cancellation(
522
- exc_val
523
- ):
524
- self._cancelled_caught = True
525
- return True
526
- else:
527
- return False
528
- else:
529
- if self._pending_uncancellations:
530
- assert self._parent_scope is not None
531
- assert self._parent_scope._pending_uncancellations is not None
532
- self._parent_scope._pending_uncancellations += (
533
- self._pending_uncancellations
534
- )
535
- self._pending_uncancellations = 0
536
-
537
- return False
538
- finally:
539
- self._host_task = None
540
- del exc_val
541
-
542
- @property
543
- def _effectively_cancelled(self) -> bool:
544
- cancel_scope: CancelScope | None = self
545
- while cancel_scope is not None:
546
- if cancel_scope._cancel_called:
547
- return True
548
-
549
- if cancel_scope.shield:
550
- return False
551
-
552
- cancel_scope = cancel_scope._parent_scope
553
-
554
- return False
555
-
556
- @property
557
- def _parent_cancellation_is_visible_to_us(self) -> bool:
558
- return (
559
- self._parent_scope is not None
560
- and not self.shield
561
- and self._parent_scope._effectively_cancelled
562
- )
563
-
564
- def _timeout(self) -> None:
565
- if self._deadline != math.inf:
566
- loop = get_running_loop()
567
- if loop.time() >= self._deadline:
568
- self.cancel("deadline exceeded")
569
- else:
570
- self._timeout_handle = loop.call_at(self._deadline, self._timeout)
571
-
572
- def _deliver_cancellation(self, origin: CancelScope) -> bool:
573
- """
574
- Deliver cancellation to directly contained tasks and nested cancel scopes.
575
-
576
- Schedule another run at the end if we still have tasks eligible for
577
- cancellation.
578
-
579
- :param origin: the cancel scope that originated the cancellation
580
- :return: ``True`` if the delivery needs to be retried on the next cycle
581
-
582
- """
583
- should_retry = False
584
- current = current_task()
585
- for task in self._tasks:
586
- should_retry = True
587
- if task._must_cancel: # type: ignore[attr-defined]
588
- continue
589
-
590
- # The task is eligible for cancellation if it has started
591
- if task is not current and (task is self._host_task or _task_started(task)):
592
- waiter = task._fut_waiter # type: ignore[attr-defined]
593
- if not isinstance(waiter, asyncio.Future) or not waiter.done():
594
- task.cancel(origin._cancel_reason)
595
- if (
596
- task is origin._host_task
597
- and origin._pending_uncancellations is not None
598
- ):
599
- origin._pending_uncancellations += 1
600
-
601
- # Deliver cancellation to child scopes that aren't shielded or running their own
602
- # cancellation callbacks
603
- for scope in self._child_scopes:
604
- if not scope._shield and not scope.cancel_called:
605
- should_retry = scope._deliver_cancellation(origin) or should_retry
606
-
607
- # Schedule another callback if there are still tasks left
608
- if origin is self:
609
- if should_retry:
610
- self._cancel_handle = get_running_loop().call_soon(
611
- self._deliver_cancellation, origin
612
- )
613
- else:
614
- self._cancel_handle = None
615
-
616
- return should_retry
617
-
618
- def _restart_cancellation_in_parent(self) -> None:
619
- """
620
- Restart the cancellation effort in the closest directly cancelled parent scope.
621
-
622
- """
623
- scope = self._parent_scope
624
- while scope is not None:
625
- if scope._cancel_called:
626
- if scope._cancel_handle is None:
627
- scope._deliver_cancellation(scope)
628
-
629
- break
630
-
631
- # No point in looking beyond any shielded scope
632
- if scope._shield:
633
- break
634
-
635
- scope = scope._parent_scope
636
-
637
- def cancel(self, reason: str | None = None) -> None:
638
- if not self._cancel_called:
639
- if self._timeout_handle:
640
- self._timeout_handle.cancel()
641
- self._timeout_handle = None
642
-
643
- self._cancel_called = True
644
- self._cancel_reason = f"Cancelled via cancel scope {id(self):x}"
645
- if task := current_task():
646
- self._cancel_reason += f" by {task}"
647
-
648
- if reason:
649
- self._cancel_reason += f"; reason: {reason}"
650
-
651
- if self._host_task is not None:
652
- self._deliver_cancellation(self)
653
-
654
- @property
655
- def deadline(self) -> float:
656
- return self._deadline
657
-
658
- @deadline.setter
659
- def deadline(self, value: float) -> None:
660
- self._deadline = float(value)
661
- if self._timeout_handle is not None:
662
- self._timeout_handle.cancel()
663
- self._timeout_handle = None
664
-
665
- if self._active and not self._cancel_called:
666
- self._timeout()
667
-
668
- @property
669
- def cancel_called(self) -> bool:
670
- return self._cancel_called
671
-
672
- @property
673
- def cancelled_caught(self) -> bool:
674
- return self._cancelled_caught
675
-
676
- @property
677
- def shield(self) -> bool:
678
- return self._shield
679
-
680
- @shield.setter
681
- def shield(self, value: bool) -> None:
682
- if self._shield != value:
683
- self._shield = value
684
- if not value:
685
- self._restart_cancellation_in_parent()
686
-
687
-
688
- #
689
- # Task states
690
- #
691
-
692
-
693
- class TaskState:
694
- """
695
- Encapsulates auxiliary task information that cannot be added to the Task instance
696
- itself because there are no guarantees about its implementation.
697
- """
698
-
699
- __slots__ = "parent_id", "cancel_scope", "__weakref__"
700
-
701
- def __init__(self, parent_id: int | None, cancel_scope: CancelScope | None):
702
- self.parent_id = parent_id
703
- self.cancel_scope = cancel_scope
704
-
705
-
706
- _task_states: WeakKeyDictionary[asyncio.Task, TaskState] = WeakKeyDictionary()
707
-
708
-
709
- #
710
- # Task groups
711
- #
712
-
713
-
714
- class _AsyncioTaskStatus(abc.TaskStatus):
715
- def __init__(self, future: asyncio.Future, parent_id: int):
716
- self._future = future
717
- self._parent_id = parent_id
718
-
719
- def started(self, value: T_contra | None = None) -> None:
720
- try:
721
- self._future.set_result(value)
722
- except asyncio.InvalidStateError:
723
- if not self._future.cancelled():
724
- raise RuntimeError(
725
- "called 'started' twice on the same task status"
726
- ) from None
727
-
728
- task = cast(asyncio.Task, current_task())
729
- _task_states[task].parent_id = self._parent_id
730
-
731
-
732
- if sys.version_info >= (3, 12):
733
- _eager_task_factory_code: CodeType | None = asyncio.eager_task_factory.__code__
734
- else:
735
- _eager_task_factory_code = None
736
-
737
-
738
- class TaskGroup(abc.TaskGroup):
739
- def __init__(self) -> None:
740
- self.cancel_scope: CancelScope = CancelScope()
741
- self._active = False
742
- self._exceptions: list[BaseException] = []
743
- self._tasks: set[asyncio.Task] = set()
744
- self._on_completed_fut: asyncio.Future[None] | None = None
745
-
746
- async def __aenter__(self) -> TaskGroup:
747
- self.cancel_scope.__enter__()
748
- self._active = True
749
- return self
750
-
751
- async def __aexit__(
752
- self,
753
- exc_type: type[BaseException] | None,
754
- exc_val: BaseException | None,
755
- exc_tb: TracebackType | None,
756
- ) -> bool:
757
- try:
758
- if exc_val is not None:
759
- self.cancel_scope.cancel()
760
- if not isinstance(exc_val, CancelledError):
761
- self._exceptions.append(exc_val)
762
-
763
- loop = get_running_loop()
764
- try:
765
- if self._tasks:
766
- with CancelScope() as wait_scope:
767
- while self._tasks:
768
- self._on_completed_fut = loop.create_future()
769
-
770
- try:
771
- await self._on_completed_fut
772
- except CancelledError as exc:
773
- # Shield the scope against further cancellation attempts,
774
- # as they're not productive (#695)
775
- wait_scope.shield = True
776
- self.cancel_scope.cancel()
777
-
778
- # Set exc_val from the cancellation exception if it was
779
- # previously unset. However, we should not replace a native
780
- # cancellation exception with one raise by a cancel scope.
781
- if exc_val is None or (
782
- isinstance(exc_val, CancelledError)
783
- and not is_anyio_cancellation(exc)
784
- ):
785
- exc_val = exc
786
-
787
- self._on_completed_fut = None
788
- else:
789
- # If there are no child tasks to wait on, run at least one checkpoint
790
- # anyway
791
- await AsyncIOBackend.cancel_shielded_checkpoint()
792
-
793
- self._active = False
794
- if self._exceptions:
795
- # The exception that got us here should already have been
796
- # added to self._exceptions so it's ok to break exception
797
- # chaining and avoid adding a "During handling of above..."
798
- # for each nesting level.
799
- raise BaseExceptionGroup(
800
- "unhandled errors in a TaskGroup", self._exceptions
801
- ) from None
802
- elif exc_val:
803
- raise exc_val
804
- except BaseException as exc:
805
- if self.cancel_scope.__exit__(type(exc), exc, exc.__traceback__):
806
- return True
807
-
808
- raise
809
-
810
- return self.cancel_scope.__exit__(exc_type, exc_val, exc_tb)
811
- finally:
812
- del exc_val, exc_tb, self._exceptions
813
-
814
- def _spawn(
815
- self,
816
- func: Callable[[Unpack[PosArgsT]], Awaitable[Any]],
817
- args: tuple[Unpack[PosArgsT]],
818
- name: object,
819
- task_status_future: asyncio.Future | None = None,
820
- ) -> asyncio.Task:
821
- def task_done(_task: asyncio.Task) -> None:
822
- if sys.version_info >= (3, 14) and self.cancel_scope._host_task is not None:
823
- asyncio.future_discard_from_awaited_by(
824
- _task, self.cancel_scope._host_task
825
- )
826
-
827
- task_state = _task_states[_task]
828
- assert task_state.cancel_scope is not None
829
- assert _task in task_state.cancel_scope._tasks
830
- task_state.cancel_scope._tasks.remove(_task)
831
- self._tasks.remove(task)
832
- del _task_states[_task]
833
-
834
- if self._on_completed_fut is not None and not self._tasks:
835
- try:
836
- self._on_completed_fut.set_result(None)
837
- except asyncio.InvalidStateError:
838
- pass
839
-
840
- try:
841
- exc = _task.exception()
842
- except CancelledError as e:
843
- while isinstance(e.__context__, CancelledError):
844
- e = e.__context__
845
-
846
- exc = e
847
-
848
- if exc is not None:
849
- # The future can only be in the cancelled state if the host task was
850
- # cancelled, so return immediately instead of adding one more
851
- # CancelledError to the exceptions list
852
- if task_status_future is not None and task_status_future.cancelled():
853
- return
854
-
855
- if task_status_future is None or task_status_future.done():
856
- if not isinstance(exc, CancelledError):
857
- self._exceptions.append(exc)
858
-
859
- if not self.cancel_scope._effectively_cancelled:
860
- self.cancel_scope.cancel()
861
- else:
862
- task_status_future.set_exception(exc)
863
- elif task_status_future is not None and not task_status_future.done():
864
- task_status_future.set_exception(
865
- RuntimeError("Child exited without calling task_status.started()")
866
- )
867
-
868
- if not self._active:
869
- raise RuntimeError(
870
- "This task group is not active; no new tasks can be started."
871
- )
872
-
873
- kwargs = {}
874
- if task_status_future:
875
- parent_id = id(current_task())
876
- kwargs["task_status"] = _AsyncioTaskStatus(
877
- task_status_future, id(self.cancel_scope._host_task)
878
- )
879
- else:
880
- parent_id = id(self.cancel_scope._host_task)
881
-
882
- coro = func(*args, **kwargs)
883
- if not iscoroutine(coro):
884
- prefix = f"{func.__module__}." if hasattr(func, "__module__") else ""
885
- raise TypeError(
886
- f"Expected {prefix}{func.__qualname__}() to return a coroutine, but "
887
- f"the return value ({coro!r}) is not a coroutine object"
888
- )
889
-
890
- name = get_callable_name(func) if name is None else str(name)
891
- loop = asyncio.get_running_loop()
892
- if (
893
- (factory := loop.get_task_factory())
894
- and getattr(factory, "__code__", None) is _eager_task_factory_code
895
- and (closure := getattr(factory, "__closure__", None))
896
- ):
897
- custom_task_constructor = closure[0].cell_contents
898
- task = custom_task_constructor(coro, loop=loop, name=name)
899
- else:
900
- task = create_task(coro, name=name)
901
-
902
- # Make the spawned task inherit the task group's cancel scope
903
- _task_states[task] = TaskState(
904
- parent_id=parent_id, cancel_scope=self.cancel_scope
905
- )
906
- self.cancel_scope._tasks.add(task)
907
- self._tasks.add(task)
908
- if sys.version_info >= (3, 14) and self.cancel_scope._host_task is not None:
909
- asyncio.future_add_to_awaited_by(task, self.cancel_scope._host_task)
910
-
911
- task.add_done_callback(task_done)
912
- return task
913
-
914
- def start_soon(
915
- self,
916
- func: Callable[[Unpack[PosArgsT]], Awaitable[Any]],
917
- *args: Unpack[PosArgsT],
918
- name: object = None,
919
- ) -> None:
920
- self._spawn(func, args, name)
921
-
922
- async def start(
923
- self, func: Callable[..., Awaitable[Any]], *args: object, name: object = None
924
- ) -> Any:
925
- future: asyncio.Future = asyncio.Future()
926
- task = self._spawn(func, args, name, future)
927
-
928
- # If the task raises an exception after sending a start value without a switch
929
- # point between, the task group is cancelled and this method never proceeds to
930
- # process the completed future. That's why we have to have a shielded cancel
931
- # scope here.
932
- try:
933
- return await future
934
- except CancelledError:
935
- # Cancel the task and wait for it to exit before returning
936
- task.cancel()
937
- with CancelScope(shield=True), suppress(CancelledError):
938
- await task
939
-
940
- raise
941
-
942
-
943
- #
944
- # Threads
945
- #
946
-
947
- _Retval_Queue_Type = tuple[T_Retval | None, BaseException | None]
948
-
949
-
950
- class WorkerThread(Thread):
951
- MAX_IDLE_TIME = 10 # seconds
952
-
953
- def __init__(
954
- self,
955
- root_task: asyncio.Task,
956
- workers: set[WorkerThread],
957
- idle_workers: deque[WorkerThread],
958
- ):
959
- super().__init__(name="AnyIO worker thread")
960
- self.root_task = root_task
961
- self.workers = workers
962
- self.idle_workers = idle_workers
963
- self.loop = root_task._loop
964
- self.queue: Queue[
965
- tuple[Context, Callable, tuple, asyncio.Future, CancelScope] | None
966
- ] = Queue(2)
967
- self.idle_since = AsyncIOBackend.current_time()
968
- self.stopping = False
969
-
970
- def _report_result(
971
- self, future: asyncio.Future, result: Any, exc: BaseException | None
972
- ) -> None:
973
- self.idle_since = AsyncIOBackend.current_time()
974
- if not self.stopping:
975
- self.idle_workers.append(self)
976
-
977
- if not future.cancelled():
978
- if exc is not None:
979
- if isinstance(exc, StopIteration):
980
- new_exc = RuntimeError("coroutine raised StopIteration")
981
- new_exc.__cause__ = exc
982
- exc = new_exc
983
-
984
- future.set_exception(exc)
985
- else:
986
- future.set_result(result)
987
-
988
- def run(self) -> None:
989
- with claim_worker_thread(AsyncIOBackend, self.loop):
990
- while True:
991
- item = self.queue.get()
992
- if item is None:
993
- # Shutdown command received
994
- return
995
-
996
- context, func, args, future, cancel_scope = item
997
- if not future.cancelled():
998
- result = None
999
- exception: BaseException | None = None
1000
- threadlocals.current_cancel_scope = cancel_scope
1001
- try:
1002
- result = context.run(func, *args)
1003
- except BaseException as exc:
1004
- exception = exc
1005
- finally:
1006
- del threadlocals.current_cancel_scope
1007
-
1008
- if not self.loop.is_closed():
1009
- self.loop.call_soon_threadsafe(
1010
- self._report_result, future, result, exception
1011
- )
1012
-
1013
- del result, exception
1014
-
1015
- self.queue.task_done()
1016
- del item, context, func, args, future, cancel_scope
1017
-
1018
- def stop(self, f: asyncio.Task | None = None) -> None:
1019
- self.stopping = True
1020
- self.queue.put_nowait(None)
1021
- self.workers.discard(self)
1022
- try:
1023
- self.idle_workers.remove(self)
1024
- except ValueError:
1025
- pass
1026
-
1027
-
1028
- _threadpool_idle_workers: RunVar[deque[WorkerThread]] = RunVar(
1029
- "_threadpool_idle_workers"
1030
- )
1031
- _threadpool_workers: RunVar[set[WorkerThread]] = RunVar("_threadpool_workers")
1032
-
1033
-
1034
- #
1035
- # Subprocesses
1036
- #
1037
-
1038
-
1039
- @dataclass(eq=False)
1040
- class StreamReaderWrapper(abc.ByteReceiveStream):
1041
- _stream: asyncio.StreamReader
1042
-
1043
- async def receive(self, max_bytes: int = 65536) -> bytes:
1044
- data = await self._stream.read(max_bytes)
1045
- if data:
1046
- return data
1047
- else:
1048
- raise EndOfStream
1049
-
1050
- async def aclose(self) -> None:
1051
- self._stream.set_exception(ClosedResourceError())
1052
- await AsyncIOBackend.checkpoint()
1053
-
1054
-
1055
- @dataclass(eq=False)
1056
- class StreamWriterWrapper(abc.ByteSendStream):
1057
- _stream: asyncio.StreamWriter
1058
- _closed: bool = field(init=False, default=False)
1059
-
1060
- async def send(self, item: bytes) -> None:
1061
- await AsyncIOBackend.checkpoint_if_cancelled()
1062
- stream_paused = self._stream._protocol._paused # type: ignore[attr-defined]
1063
- try:
1064
- self._stream.write(item)
1065
- await self._stream.drain()
1066
- except (ConnectionResetError, BrokenPipeError, RuntimeError) as exc:
1067
- # If closed by us and/or the peer:
1068
- # * on stdlib, drain() raises ConnectionResetError or BrokenPipeError
1069
- # * on uvloop and Winloop, write() eventually starts raising RuntimeError
1070
- if self._closed:
1071
- raise ClosedResourceError from exc
1072
- elif self._stream.is_closing():
1073
- raise BrokenResourceError from exc
1074
-
1075
- raise
1076
-
1077
- if not stream_paused:
1078
- await AsyncIOBackend.cancel_shielded_checkpoint()
1079
-
1080
- async def aclose(self) -> None:
1081
- self._closed = True
1082
- self._stream.close()
1083
- await AsyncIOBackend.checkpoint()
1084
-
1085
-
1086
- @dataclass(eq=False)
1087
- class Process(abc.Process):
1088
- _process: asyncio.subprocess.Process
1089
- _stdin: StreamWriterWrapper | None
1090
- _stdout: StreamReaderWrapper | None
1091
- _stderr: StreamReaderWrapper | None
1092
-
1093
- async def aclose(self) -> None:
1094
- with CancelScope(shield=True) as scope:
1095
- if self._stdin:
1096
- await self._stdin.aclose()
1097
- if self._stdout:
1098
- await self._stdout.aclose()
1099
- if self._stderr:
1100
- await self._stderr.aclose()
1101
-
1102
- scope.shield = False
1103
- try:
1104
- await self.wait()
1105
- except BaseException:
1106
- scope.shield = True
1107
- self.kill()
1108
- await self.wait()
1109
- raise
1110
-
1111
- async def wait(self) -> int:
1112
- return await self._process.wait()
1113
-
1114
- def terminate(self) -> None:
1115
- self._process.terminate()
1116
-
1117
- def kill(self) -> None:
1118
- self._process.kill()
1119
-
1120
- def send_signal(self, signal: int) -> None:
1121
- self._process.send_signal(signal)
1122
-
1123
- @property
1124
- def pid(self) -> int:
1125
- return self._process.pid
1126
-
1127
- @property
1128
- def returncode(self) -> int | None:
1129
- return self._process.returncode
1130
-
1131
- @property
1132
- def stdin(self) -> abc.ByteSendStream | None:
1133
- return self._stdin
1134
-
1135
- @property
1136
- def stdout(self) -> abc.ByteReceiveStream | None:
1137
- return self._stdout
1138
-
1139
- @property
1140
- def stderr(self) -> abc.ByteReceiveStream | None:
1141
- return self._stderr
1142
-
1143
-
1144
- def _forcibly_shutdown_process_pool_on_exit(
1145
- workers: set[Process], _task: object
1146
- ) -> None:
1147
- """
1148
- Forcibly shuts down worker processes belonging to this event loop."""
1149
- child_watcher: asyncio.AbstractChildWatcher | None = None # type: ignore[name-defined]
1150
- if sys.version_info < (3, 12):
1151
- try:
1152
- child_watcher = asyncio.get_event_loop_policy().get_child_watcher()
1153
- except NotImplementedError:
1154
- pass
1155
-
1156
- # Close as much as possible (w/o async/await) to avoid warnings
1157
- for process in workers.copy():
1158
- if process.returncode is not None:
1159
- continue
1160
-
1161
- process._stdin._stream._transport.close() # type: ignore[union-attr]
1162
- process._stdout._stream._transport.close() # type: ignore[union-attr]
1163
- process._stderr._stream._transport.close() # type: ignore[union-attr]
1164
- process.kill()
1165
- if child_watcher:
1166
- child_watcher.remove_child_handler(process.pid)
1167
-
1168
-
1169
- async def _shutdown_process_pool_on_exit(workers: set[abc.Process]) -> None:
1170
- """
1171
- Shuts down worker processes belonging to this event loop.
1172
-
1173
- NOTE: this only works when the event loop was started using asyncio.run() or
1174
- anyio.run().
1175
-
1176
- """
1177
- process: abc.Process
1178
- try:
1179
- await sleep(math.inf)
1180
- except asyncio.CancelledError:
1181
- workers = workers.copy()
1182
- for process in workers:
1183
- if process.returncode is None:
1184
- process.kill()
1185
-
1186
- for process in workers:
1187
- await process.aclose()
1188
-
1189
-
1190
- #
1191
- # Sockets and networking
1192
- #
1193
-
1194
-
1195
- class StreamProtocol(asyncio.Protocol):
1196
- read_queue: deque[bytes]
1197
- read_event: asyncio.Event
1198
- write_event: asyncio.Event
1199
- exception: Exception | None = None
1200
- is_at_eof: bool = False
1201
-
1202
- def connection_made(self, transport: asyncio.BaseTransport) -> None:
1203
- self.read_queue = deque()
1204
- self.read_event = asyncio.Event()
1205
- self.write_event = asyncio.Event()
1206
- self.write_event.set()
1207
- cast(asyncio.Transport, transport).set_write_buffer_limits(0)
1208
-
1209
- def connection_lost(self, exc: Exception | None) -> None:
1210
- if exc:
1211
- self.exception = exc
1212
-
1213
- self.read_event.set()
1214
- self.write_event.set()
1215
-
1216
- def data_received(self, data: bytes) -> None:
1217
- # ProactorEventloop sometimes sends bytearray instead of bytes
1218
- self.read_queue.append(bytes(data))
1219
- self.read_event.set()
1220
-
1221
- def eof_received(self) -> bool | None:
1222
- self.is_at_eof = True
1223
- self.read_event.set()
1224
- return True
1225
-
1226
- def pause_writing(self) -> None:
1227
- self.write_event = asyncio.Event()
1228
-
1229
- def resume_writing(self) -> None:
1230
- self.write_event.set()
1231
-
1232
-
1233
- class DatagramProtocol(asyncio.DatagramProtocol):
1234
- read_queue: deque[tuple[bytes, IPSockAddrType]]
1235
- read_event: asyncio.Event
1236
- write_event: asyncio.Event
1237
- exception: Exception | None = None
1238
-
1239
- def connection_made(self, transport: asyncio.BaseTransport) -> None:
1240
- self.read_queue = deque(maxlen=100) # arbitrary value
1241
- self.read_event = asyncio.Event()
1242
- self.write_event = asyncio.Event()
1243
- self.write_event.set()
1244
-
1245
- def connection_lost(self, exc: Exception | None) -> None:
1246
- self.read_event.set()
1247
- self.write_event.set()
1248
-
1249
- def datagram_received(self, data: bytes, addr: IPSockAddrType) -> None:
1250
- addr = convert_ipv6_sockaddr(addr)
1251
- self.read_queue.append((data, addr))
1252
- self.read_event.set()
1253
-
1254
- def error_received(self, exc: Exception) -> None:
1255
- self.exception = exc
1256
-
1257
- def pause_writing(self) -> None:
1258
- self.write_event.clear()
1259
-
1260
- def resume_writing(self) -> None:
1261
- self.write_event.set()
1262
-
1263
-
1264
- class SocketStream(abc.SocketStream):
1265
- def __init__(self, transport: asyncio.Transport, protocol: StreamProtocol):
1266
- self._transport = transport
1267
- self._protocol = protocol
1268
- self._receive_guard = ResourceGuard("reading from")
1269
- self._send_guard = ResourceGuard("writing to")
1270
- self._closed = False
1271
-
1272
- @property
1273
- def _raw_socket(self) -> socket.socket:
1274
- return self._transport.get_extra_info("socket")
1275
-
1276
- async def receive(self, max_bytes: int = 65536) -> bytes:
1277
- with self._receive_guard:
1278
- if (
1279
- not self._protocol.read_event.is_set()
1280
- and not self._transport.is_closing()
1281
- and not self._protocol.is_at_eof
1282
- ):
1283
- self._transport.resume_reading()
1284
- await self._protocol.read_event.wait()
1285
- self._transport.pause_reading()
1286
- else:
1287
- await AsyncIOBackend.checkpoint()
1288
-
1289
- try:
1290
- chunk = self._protocol.read_queue.popleft()
1291
- except IndexError:
1292
- if self._closed:
1293
- raise ClosedResourceError from None
1294
- elif self._protocol.exception:
1295
- raise BrokenResourceError from self._protocol.exception
1296
- else:
1297
- raise EndOfStream from None
1298
-
1299
- if len(chunk) > max_bytes:
1300
- # Split the oversized chunk
1301
- chunk, leftover = chunk[:max_bytes], chunk[max_bytes:]
1302
- self._protocol.read_queue.appendleft(leftover)
1303
-
1304
- # If the read queue is empty, clear the flag so that the next call will
1305
- # block until data is available
1306
- if not self._protocol.read_queue:
1307
- self._protocol.read_event.clear()
1308
-
1309
- return chunk
1310
-
1311
- async def send(self, item: bytes) -> None:
1312
- with self._send_guard:
1313
- await AsyncIOBackend.checkpoint()
1314
-
1315
- if self._closed:
1316
- raise ClosedResourceError
1317
- elif self._protocol.exception is not None:
1318
- raise BrokenResourceError from self._protocol.exception
1319
-
1320
- try:
1321
- self._transport.write(item)
1322
- except RuntimeError as exc:
1323
- if self._transport.is_closing():
1324
- raise BrokenResourceError from exc
1325
- else:
1326
- raise
1327
-
1328
- await self._protocol.write_event.wait()
1329
-
1330
- async def send_eof(self) -> None:
1331
- try:
1332
- self._transport.write_eof()
1333
- except OSError:
1334
- pass
1335
-
1336
- async def aclose(self) -> None:
1337
- self._closed = True
1338
- if not self._transport.is_closing():
1339
- try:
1340
- self._transport.write_eof()
1341
- except OSError:
1342
- pass
1343
-
1344
- self._transport.close()
1345
- await sleep(0)
1346
- self._transport.abort()
1347
-
1348
-
1349
- class _RawSocketMixin:
1350
- _receive_future: asyncio.Future | None = None
1351
- _send_future: asyncio.Future | None = None
1352
- _closing = False
1353
-
1354
- def __init__(self, raw_socket: socket.socket):
1355
- self.__raw_socket = raw_socket
1356
- self._receive_guard = ResourceGuard("reading from")
1357
- self._send_guard = ResourceGuard("writing to")
1358
-
1359
- @property
1360
- def _raw_socket(self) -> socket.socket:
1361
- return self.__raw_socket
1362
-
1363
- def _wait_until_readable(self, loop: asyncio.AbstractEventLoop) -> asyncio.Future:
1364
- def callback(f: object) -> None:
1365
- del self._receive_future
1366
- loop.remove_reader(self.__raw_socket)
1367
-
1368
- f = self._receive_future = asyncio.Future()
1369
- loop.add_reader(self.__raw_socket, f.set_result, None)
1370
- f.add_done_callback(callback)
1371
- return f
1372
-
1373
- def _wait_until_writable(self, loop: asyncio.AbstractEventLoop) -> asyncio.Future:
1374
- def callback(f: object) -> None:
1375
- del self._send_future
1376
- loop.remove_writer(self.__raw_socket)
1377
-
1378
- f = self._send_future = asyncio.Future()
1379
- loop.add_writer(self.__raw_socket, f.set_result, None)
1380
- f.add_done_callback(callback)
1381
- return f
1382
-
1383
- async def aclose(self) -> None:
1384
- if not self._closing:
1385
- self._closing = True
1386
- if self.__raw_socket.fileno() != -1:
1387
- self.__raw_socket.close()
1388
-
1389
- if self._receive_future:
1390
- self._receive_future.set_result(None)
1391
- if self._send_future:
1392
- self._send_future.set_result(None)
1393
-
1394
-
1395
- class UNIXSocketStream(_RawSocketMixin, abc.UNIXSocketStream):
1396
- async def send_eof(self) -> None:
1397
- with self._send_guard:
1398
- self._raw_socket.shutdown(socket.SHUT_WR)
1399
-
1400
- async def receive(self, max_bytes: int = 65536) -> bytes:
1401
- loop = get_running_loop()
1402
- await AsyncIOBackend.checkpoint()
1403
- with self._receive_guard:
1404
- while True:
1405
- try:
1406
- data = self._raw_socket.recv(max_bytes)
1407
- except BlockingIOError:
1408
- await self._wait_until_readable(loop)
1409
- except OSError as exc:
1410
- if self._closing:
1411
- raise ClosedResourceError from None
1412
- else:
1413
- raise BrokenResourceError from exc
1414
- else:
1415
- if not data:
1416
- raise EndOfStream
1417
-
1418
- return data
1419
-
1420
- async def send(self, item: bytes) -> None:
1421
- loop = get_running_loop()
1422
- await AsyncIOBackend.checkpoint()
1423
- with self._send_guard:
1424
- view = memoryview(item)
1425
- while view:
1426
- try:
1427
- bytes_sent = self._raw_socket.send(view)
1428
- except BlockingIOError:
1429
- await self._wait_until_writable(loop)
1430
- except OSError as exc:
1431
- if self._closing:
1432
- raise ClosedResourceError from None
1433
- else:
1434
- raise BrokenResourceError from exc
1435
- else:
1436
- view = view[bytes_sent:]
1437
-
1438
- async def receive_fds(self, msglen: int, maxfds: int) -> tuple[bytes, list[int]]:
1439
- if not isinstance(msglen, int) or msglen < 0:
1440
- raise ValueError("msglen must be a non-negative integer")
1441
- if not isinstance(maxfds, int) or maxfds < 1:
1442
- raise ValueError("maxfds must be a positive integer")
1443
-
1444
- loop = get_running_loop()
1445
- fds = array.array("i")
1446
- await AsyncIOBackend.checkpoint()
1447
- with self._receive_guard:
1448
- while True:
1449
- try:
1450
- message, ancdata, flags, addr = self._raw_socket.recvmsg(
1451
- msglen, socket.CMSG_LEN(maxfds * fds.itemsize)
1452
- )
1453
- except BlockingIOError:
1454
- await self._wait_until_readable(loop)
1455
- except OSError as exc:
1456
- if self._closing:
1457
- raise ClosedResourceError from None
1458
- else:
1459
- raise BrokenResourceError from exc
1460
- else:
1461
- if not message and not ancdata:
1462
- raise EndOfStream
1463
-
1464
- break
1465
-
1466
- for cmsg_level, cmsg_type, cmsg_data in ancdata:
1467
- if cmsg_level != socket.SOL_SOCKET or cmsg_type != socket.SCM_RIGHTS:
1468
- raise RuntimeError(
1469
- f"Received unexpected ancillary data; message = {message!r}, "
1470
- f"cmsg_level = {cmsg_level}, cmsg_type = {cmsg_type}"
1471
- )
1472
-
1473
- fds.frombytes(cmsg_data[: len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
1474
-
1475
- return message, list(fds)
1476
-
1477
- async def send_fds(self, message: bytes, fds: Collection[int | IOBase]) -> None:
1478
- if not message:
1479
- raise ValueError("message must not be empty")
1480
- if not fds:
1481
- raise ValueError("fds must not be empty")
1482
-
1483
- loop = get_running_loop()
1484
- filenos: list[int] = []
1485
- for fd in fds:
1486
- if isinstance(fd, int):
1487
- filenos.append(fd)
1488
- elif isinstance(fd, IOBase):
1489
- filenos.append(fd.fileno())
1490
-
1491
- fdarray = array.array("i", filenos)
1492
- await AsyncIOBackend.checkpoint()
1493
- with self._send_guard:
1494
- while True:
1495
- try:
1496
- # The ignore can be removed after mypy picks up
1497
- # https://github.com/python/typeshed/pull/5545
1498
- self._raw_socket.sendmsg(
1499
- [message], [(socket.SOL_SOCKET, socket.SCM_RIGHTS, fdarray)]
1500
- )
1501
- break
1502
- except BlockingIOError:
1503
- await self._wait_until_writable(loop)
1504
- except OSError as exc:
1505
- if self._closing:
1506
- raise ClosedResourceError from None
1507
- else:
1508
- raise BrokenResourceError from exc
1509
-
1510
-
1511
- class TCPSocketListener(abc.SocketListener):
1512
- _accept_scope: CancelScope | None = None
1513
- _closed = False
1514
-
1515
- def __init__(self, raw_socket: socket.socket):
1516
- self.__raw_socket = raw_socket
1517
- self._loop = cast(asyncio.BaseEventLoop, get_running_loop())
1518
- self._accept_guard = ResourceGuard("accepting connections from")
1519
-
1520
- @property
1521
- def _raw_socket(self) -> socket.socket:
1522
- return self.__raw_socket
1523
-
1524
- async def accept(self) -> abc.SocketStream:
1525
- if self._closed:
1526
- raise ClosedResourceError
1527
-
1528
- with self._accept_guard:
1529
- await AsyncIOBackend.checkpoint()
1530
- with CancelScope() as self._accept_scope:
1531
- try:
1532
- client_sock, _addr = await self._loop.sock_accept(self._raw_socket)
1533
- except asyncio.CancelledError:
1534
- # Workaround for https://bugs.python.org/issue41317
1535
- try:
1536
- self._loop.remove_reader(self._raw_socket)
1537
- except (ValueError, NotImplementedError):
1538
- pass
1539
-
1540
- if self._closed:
1541
- raise ClosedResourceError from None
1542
-
1543
- raise
1544
- finally:
1545
- self._accept_scope = None
1546
-
1547
- client_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
1548
- transport, protocol = await self._loop.connect_accepted_socket(
1549
- StreamProtocol, client_sock
1550
- )
1551
- return SocketStream(transport, protocol)
1552
-
1553
- async def aclose(self) -> None:
1554
- if self._closed:
1555
- return
1556
-
1557
- self._closed = True
1558
- if self._accept_scope:
1559
- # Workaround for https://bugs.python.org/issue41317
1560
- try:
1561
- self._loop.remove_reader(self._raw_socket)
1562
- except (ValueError, NotImplementedError):
1563
- pass
1564
-
1565
- self._accept_scope.cancel()
1566
- await sleep(0)
1567
-
1568
- self._raw_socket.close()
1569
-
1570
-
1571
- class UNIXSocketListener(abc.SocketListener):
1572
- def __init__(self, raw_socket: socket.socket):
1573
- self.__raw_socket = raw_socket
1574
- self._loop = get_running_loop()
1575
- self._accept_guard = ResourceGuard("accepting connections from")
1576
- self._closed = False
1577
-
1578
- async def accept(self) -> abc.SocketStream:
1579
- await AsyncIOBackend.checkpoint()
1580
- with self._accept_guard:
1581
- while True:
1582
- try:
1583
- client_sock, _ = self.__raw_socket.accept()
1584
- client_sock.setblocking(False)
1585
- return UNIXSocketStream(client_sock)
1586
- except BlockingIOError:
1587
- f: asyncio.Future = asyncio.Future()
1588
- self._loop.add_reader(self.__raw_socket, f.set_result, None)
1589
- f.add_done_callback(
1590
- lambda _: self._loop.remove_reader(self.__raw_socket)
1591
- )
1592
- await f
1593
- except OSError as exc:
1594
- if self._closed:
1595
- raise ClosedResourceError from None
1596
- else:
1597
- raise BrokenResourceError from exc
1598
-
1599
- async def aclose(self) -> None:
1600
- self._closed = True
1601
- self.__raw_socket.close()
1602
-
1603
- @property
1604
- def _raw_socket(self) -> socket.socket:
1605
- return self.__raw_socket
1606
-
1607
-
1608
- class UDPSocket(abc.UDPSocket):
1609
- def __init__(
1610
- self, transport: asyncio.DatagramTransport, protocol: DatagramProtocol
1611
- ):
1612
- self._transport = transport
1613
- self._protocol = protocol
1614
- self._receive_guard = ResourceGuard("reading from")
1615
- self._send_guard = ResourceGuard("writing to")
1616
- self._closed = False
1617
-
1618
- @property
1619
- def _raw_socket(self) -> socket.socket:
1620
- return self._transport.get_extra_info("socket")
1621
-
1622
- async def aclose(self) -> None:
1623
- self._closed = True
1624
- if not self._transport.is_closing():
1625
- self._transport.close()
1626
-
1627
- async def receive(self) -> tuple[bytes, IPSockAddrType]:
1628
- with self._receive_guard:
1629
- await AsyncIOBackend.checkpoint()
1630
-
1631
- # If the buffer is empty, ask for more data
1632
- if not self._protocol.read_queue and not self._transport.is_closing():
1633
- self._protocol.read_event.clear()
1634
- await self._protocol.read_event.wait()
1635
-
1636
- try:
1637
- return self._protocol.read_queue.popleft()
1638
- except IndexError:
1639
- if self._closed:
1640
- raise ClosedResourceError from None
1641
- else:
1642
- raise BrokenResourceError from None
1643
-
1644
- async def send(self, item: UDPPacketType) -> None:
1645
- with self._send_guard:
1646
- await AsyncIOBackend.checkpoint()
1647
- await self._protocol.write_event.wait()
1648
- if self._closed:
1649
- raise ClosedResourceError
1650
- elif self._transport.is_closing():
1651
- raise BrokenResourceError
1652
- else:
1653
- self._transport.sendto(*item)
1654
-
1655
-
1656
- class ConnectedUDPSocket(abc.ConnectedUDPSocket):
1657
- def __init__(
1658
- self, transport: asyncio.DatagramTransport, protocol: DatagramProtocol
1659
- ):
1660
- self._transport = transport
1661
- self._protocol = protocol
1662
- self._receive_guard = ResourceGuard("reading from")
1663
- self._send_guard = ResourceGuard("writing to")
1664
- self._closed = False
1665
-
1666
- @property
1667
- def _raw_socket(self) -> socket.socket:
1668
- return self._transport.get_extra_info("socket")
1669
-
1670
- async def aclose(self) -> None:
1671
- self._closed = True
1672
- if not self._transport.is_closing():
1673
- self._transport.close()
1674
-
1675
- async def receive(self) -> bytes:
1676
- with self._receive_guard:
1677
- await AsyncIOBackend.checkpoint()
1678
-
1679
- # If the buffer is empty, ask for more data
1680
- if not self._protocol.read_queue and not self._transport.is_closing():
1681
- self._protocol.read_event.clear()
1682
- await self._protocol.read_event.wait()
1683
-
1684
- try:
1685
- packet = self._protocol.read_queue.popleft()
1686
- except IndexError:
1687
- if self._closed:
1688
- raise ClosedResourceError from None
1689
- else:
1690
- raise BrokenResourceError from None
1691
-
1692
- return packet[0]
1693
-
1694
- async def send(self, item: bytes) -> None:
1695
- with self._send_guard:
1696
- await AsyncIOBackend.checkpoint()
1697
- await self._protocol.write_event.wait()
1698
- if self._closed:
1699
- raise ClosedResourceError
1700
- elif self._transport.is_closing():
1701
- raise BrokenResourceError
1702
- else:
1703
- self._transport.sendto(item)
1704
-
1705
-
1706
- class UNIXDatagramSocket(_RawSocketMixin, abc.UNIXDatagramSocket):
1707
- async def receive(self) -> UNIXDatagramPacketType:
1708
- loop = get_running_loop()
1709
- await AsyncIOBackend.checkpoint()
1710
- with self._receive_guard:
1711
- while True:
1712
- try:
1713
- data = self._raw_socket.recvfrom(65536)
1714
- except BlockingIOError:
1715
- await self._wait_until_readable(loop)
1716
- except OSError as exc:
1717
- if self._closing:
1718
- raise ClosedResourceError from None
1719
- else:
1720
- raise BrokenResourceError from exc
1721
- else:
1722
- return data
1723
-
1724
- async def send(self, item: UNIXDatagramPacketType) -> None:
1725
- loop = get_running_loop()
1726
- await AsyncIOBackend.checkpoint()
1727
- with self._send_guard:
1728
- while True:
1729
- try:
1730
- self._raw_socket.sendto(*item)
1731
- except BlockingIOError:
1732
- await self._wait_until_writable(loop)
1733
- except OSError as exc:
1734
- if self._closing:
1735
- raise ClosedResourceError from None
1736
- else:
1737
- raise BrokenResourceError from exc
1738
- else:
1739
- return
1740
-
1741
-
1742
- class ConnectedUNIXDatagramSocket(_RawSocketMixin, abc.ConnectedUNIXDatagramSocket):
1743
- async def receive(self) -> bytes:
1744
- loop = get_running_loop()
1745
- await AsyncIOBackend.checkpoint()
1746
- with self._receive_guard:
1747
- while True:
1748
- try:
1749
- data = self._raw_socket.recv(65536)
1750
- except BlockingIOError:
1751
- await self._wait_until_readable(loop)
1752
- except OSError as exc:
1753
- if self._closing:
1754
- raise ClosedResourceError from None
1755
- else:
1756
- raise BrokenResourceError from exc
1757
- else:
1758
- return data
1759
-
1760
- async def send(self, item: bytes) -> None:
1761
- loop = get_running_loop()
1762
- await AsyncIOBackend.checkpoint()
1763
- with self._send_guard:
1764
- while True:
1765
- try:
1766
- self._raw_socket.send(item)
1767
- except BlockingIOError:
1768
- await self._wait_until_writable(loop)
1769
- except OSError as exc:
1770
- if self._closing:
1771
- raise ClosedResourceError from None
1772
- else:
1773
- raise BrokenResourceError from exc
1774
- else:
1775
- return
1776
-
1777
-
1778
- _read_events: RunVar[dict[int, asyncio.Future[bool]]] = RunVar("read_events")
1779
- _write_events: RunVar[dict[int, asyncio.Future[bool]]] = RunVar("write_events")
1780
-
1781
-
1782
- #
1783
- # Synchronization
1784
- #
1785
-
1786
-
1787
- class Event(BaseEvent):
1788
- def __new__(cls) -> Event:
1789
- return object.__new__(cls)
1790
-
1791
- def __init__(self) -> None:
1792
- self._event = asyncio.Event()
1793
-
1794
- def set(self) -> None:
1795
- self._event.set()
1796
-
1797
- def is_set(self) -> bool:
1798
- return self._event.is_set()
1799
-
1800
- async def wait(self) -> None:
1801
- if self.is_set():
1802
- await AsyncIOBackend.checkpoint()
1803
- else:
1804
- await self._event.wait()
1805
-
1806
- def statistics(self) -> EventStatistics:
1807
- return EventStatistics(len(self._event._waiters))
1808
-
1809
-
1810
- class Lock(BaseLock):
1811
- def __new__(cls, *, fast_acquire: bool = False) -> Lock:
1812
- return object.__new__(cls)
1813
-
1814
- def __init__(self, *, fast_acquire: bool = False) -> None:
1815
- self._fast_acquire = fast_acquire
1816
- self._owner_task: asyncio.Task | None = None
1817
- self._waiters: deque[tuple[asyncio.Task, asyncio.Future]] = deque()
1818
-
1819
- async def acquire(self) -> None:
1820
- task = cast(asyncio.Task, current_task())
1821
- if self._owner_task is None and not self._waiters:
1822
- await AsyncIOBackend.checkpoint_if_cancelled()
1823
- self._owner_task = task
1824
-
1825
- # Unless on the "fast path", yield control of the event loop so that other
1826
- # tasks can run too
1827
- if not self._fast_acquire:
1828
- try:
1829
- await AsyncIOBackend.cancel_shielded_checkpoint()
1830
- except CancelledError:
1831
- self.release()
1832
- raise
1833
-
1834
- return
1835
-
1836
- if self._owner_task == task:
1837
- raise RuntimeError("Attempted to acquire an already held Lock")
1838
-
1839
- fut: asyncio.Future[None] = asyncio.Future()
1840
- item = task, fut
1841
- self._waiters.append(item)
1842
- try:
1843
- await fut
1844
- except CancelledError:
1845
- self._waiters.remove(item)
1846
- if self._owner_task is task:
1847
- self.release()
1848
-
1849
- raise
1850
-
1851
- self._waiters.remove(item)
1852
-
1853
- def acquire_nowait(self) -> None:
1854
- task = cast(asyncio.Task, current_task())
1855
- if self._owner_task is None and not self._waiters:
1856
- self._owner_task = task
1857
- return
1858
-
1859
- if self._owner_task is task:
1860
- raise RuntimeError("Attempted to acquire an already held Lock")
1861
-
1862
- raise WouldBlock
1863
-
1864
- def locked(self) -> bool:
1865
- return self._owner_task is not None
1866
-
1867
- def release(self) -> None:
1868
- if self._owner_task != current_task():
1869
- raise RuntimeError("The current task is not holding this lock")
1870
-
1871
- for task, fut in self._waiters:
1872
- if not fut.cancelled():
1873
- self._owner_task = task
1874
- fut.set_result(None)
1875
- return
1876
-
1877
- self._owner_task = None
1878
-
1879
- def statistics(self) -> LockStatistics:
1880
- task_info = AsyncIOTaskInfo(self._owner_task) if self._owner_task else None
1881
- return LockStatistics(self.locked(), task_info, len(self._waiters))
1882
-
1883
-
1884
- class Semaphore(BaseSemaphore):
1885
- def __new__(
1886
- cls,
1887
- initial_value: int,
1888
- *,
1889
- max_value: int | None = None,
1890
- fast_acquire: bool = False,
1891
- ) -> Semaphore:
1892
- return object.__new__(cls)
1893
-
1894
- def __init__(
1895
- self,
1896
- initial_value: int,
1897
- *,
1898
- max_value: int | None = None,
1899
- fast_acquire: bool = False,
1900
- ):
1901
- super().__init__(initial_value, max_value=max_value)
1902
- self._value = initial_value
1903
- self._max_value = max_value
1904
- self._fast_acquire = fast_acquire
1905
- self._waiters: deque[asyncio.Future[None]] = deque()
1906
-
1907
- async def acquire(self) -> None:
1908
- if self._value > 0 and not self._waiters:
1909
- await AsyncIOBackend.checkpoint_if_cancelled()
1910
- self._value -= 1
1911
-
1912
- # Unless on the "fast path", yield control of the event loop so that other
1913
- # tasks can run too
1914
- if not self._fast_acquire:
1915
- try:
1916
- await AsyncIOBackend.cancel_shielded_checkpoint()
1917
- except CancelledError:
1918
- self.release()
1919
- raise
1920
-
1921
- return
1922
-
1923
- fut: asyncio.Future[None] = asyncio.Future()
1924
- self._waiters.append(fut)
1925
- try:
1926
- await fut
1927
- except CancelledError:
1928
- try:
1929
- self._waiters.remove(fut)
1930
- except ValueError:
1931
- self.release()
1932
-
1933
- raise
1934
-
1935
- def acquire_nowait(self) -> None:
1936
- if self._value == 0:
1937
- raise WouldBlock
1938
-
1939
- self._value -= 1
1940
-
1941
- def release(self) -> None:
1942
- if self._max_value is not None and self._value == self._max_value:
1943
- raise ValueError("semaphore released too many times")
1944
-
1945
- for fut in self._waiters:
1946
- if not fut.cancelled():
1947
- fut.set_result(None)
1948
- self._waiters.remove(fut)
1949
- return
1950
-
1951
- self._value += 1
1952
-
1953
- @property
1954
- def value(self) -> int:
1955
- return self._value
1956
-
1957
- @property
1958
- def max_value(self) -> int | None:
1959
- return self._max_value
1960
-
1961
- def statistics(self) -> SemaphoreStatistics:
1962
- return SemaphoreStatistics(len(self._waiters))
1963
-
1964
-
1965
- class CapacityLimiter(BaseCapacityLimiter):
1966
- _total_tokens: float = 0
1967
-
1968
- def __new__(cls, total_tokens: float) -> CapacityLimiter:
1969
- return object.__new__(cls)
1970
-
1971
- def __init__(self, total_tokens: float):
1972
- self._borrowers: set[Any] = set()
1973
- self._wait_queue: OrderedDict[Any, asyncio.Event] = OrderedDict()
1974
- self.total_tokens = total_tokens
1975
-
1976
- async def __aenter__(self) -> None:
1977
- await self.acquire()
1978
-
1979
- async def __aexit__(
1980
- self,
1981
- exc_type: type[BaseException] | None,
1982
- exc_val: BaseException | None,
1983
- exc_tb: TracebackType | None,
1984
- ) -> None:
1985
- self.release()
1986
-
1987
- @property
1988
- def total_tokens(self) -> float:
1989
- return self._total_tokens
1990
-
1991
- @total_tokens.setter
1992
- def total_tokens(self, value: float) -> None:
1993
- if not isinstance(value, int) and not math.isinf(value):
1994
- raise TypeError("total_tokens must be an int or math.inf")
1995
-
1996
- if value < 0:
1997
- raise ValueError("total_tokens must be >= 0")
1998
-
1999
- waiters_to_notify = max(value - self._total_tokens, 0)
2000
- self._total_tokens = value
2001
-
2002
- # Notify waiting tasks that they have acquired the limiter
2003
- while self._wait_queue and waiters_to_notify:
2004
- event = self._wait_queue.popitem(last=False)[1]
2005
- event.set()
2006
- waiters_to_notify -= 1
2007
-
2008
- @property
2009
- def borrowed_tokens(self) -> int:
2010
- return len(self._borrowers)
2011
-
2012
- @property
2013
- def available_tokens(self) -> float:
2014
- return self._total_tokens - len(self._borrowers)
2015
-
2016
- def _notify_next_waiter(self) -> None:
2017
- """Notify the next task in line if this limiter has free capacity now."""
2018
- if self._wait_queue and len(self._borrowers) < self._total_tokens:
2019
- event = self._wait_queue.popitem(last=False)[1]
2020
- event.set()
2021
-
2022
- def acquire_nowait(self) -> None:
2023
- self.acquire_on_behalf_of_nowait(current_task())
2024
-
2025
- def acquire_on_behalf_of_nowait(self, borrower: object) -> None:
2026
- if borrower in self._borrowers:
2027
- raise RuntimeError(
2028
- "this borrower is already holding one of this CapacityLimiter's tokens"
2029
- )
2030
-
2031
- if self._wait_queue or len(self._borrowers) >= self._total_tokens:
2032
- raise WouldBlock
2033
-
2034
- self._borrowers.add(borrower)
2035
-
2036
- async def acquire(self) -> None:
2037
- return await self.acquire_on_behalf_of(current_task())
2038
-
2039
- async def acquire_on_behalf_of(self, borrower: object) -> None:
2040
- await AsyncIOBackend.checkpoint_if_cancelled()
2041
- try:
2042
- self.acquire_on_behalf_of_nowait(borrower)
2043
- except WouldBlock:
2044
- event = asyncio.Event()
2045
- self._wait_queue[borrower] = event
2046
- try:
2047
- await event.wait()
2048
- except BaseException:
2049
- self._wait_queue.pop(borrower, None)
2050
- if event.is_set():
2051
- self._notify_next_waiter()
2052
-
2053
- raise
2054
-
2055
- self._borrowers.add(borrower)
2056
- else:
2057
- try:
2058
- await AsyncIOBackend.cancel_shielded_checkpoint()
2059
- except BaseException:
2060
- self.release()
2061
- raise
2062
-
2063
- def release(self) -> None:
2064
- self.release_on_behalf_of(current_task())
2065
-
2066
- def release_on_behalf_of(self, borrower: object) -> None:
2067
- try:
2068
- self._borrowers.remove(borrower)
2069
- except KeyError:
2070
- raise RuntimeError(
2071
- "this borrower isn't holding any of this CapacityLimiter's tokens"
2072
- ) from None
2073
-
2074
- self._notify_next_waiter()
2075
-
2076
- def statistics(self) -> CapacityLimiterStatistics:
2077
- return CapacityLimiterStatistics(
2078
- self.borrowed_tokens,
2079
- self.total_tokens,
2080
- tuple(self._borrowers),
2081
- len(self._wait_queue),
2082
- )
2083
-
2084
-
2085
- _default_thread_limiter: RunVar[CapacityLimiter] = RunVar("_default_thread_limiter")
2086
-
2087
-
2088
- #
2089
- # Operating system signals
2090
- #
2091
-
2092
-
2093
- class _SignalReceiver:
2094
- def __init__(self, signals: tuple[Signals, ...]):
2095
- self._signals = signals
2096
- self._loop = get_running_loop()
2097
- self._signal_queue: deque[Signals] = deque()
2098
- self._future: asyncio.Future = asyncio.Future()
2099
- self._handled_signals: set[Signals] = set()
2100
-
2101
- def _deliver(self, signum: Signals) -> None:
2102
- self._signal_queue.append(signum)
2103
- if not self._future.done():
2104
- self._future.set_result(None)
2105
-
2106
- def __enter__(self) -> _SignalReceiver:
2107
- for sig in set(self._signals):
2108
- self._loop.add_signal_handler(sig, self._deliver, sig)
2109
- self._handled_signals.add(sig)
2110
-
2111
- return self
2112
-
2113
- def __exit__(
2114
- self,
2115
- exc_type: type[BaseException] | None,
2116
- exc_val: BaseException | None,
2117
- exc_tb: TracebackType | None,
2118
- ) -> None:
2119
- for sig in self._handled_signals:
2120
- self._loop.remove_signal_handler(sig)
2121
-
2122
- def __aiter__(self) -> _SignalReceiver:
2123
- return self
2124
-
2125
- async def __anext__(self) -> Signals:
2126
- await AsyncIOBackend.checkpoint()
2127
- if not self._signal_queue:
2128
- self._future = asyncio.Future()
2129
- await self._future
2130
-
2131
- return self._signal_queue.popleft()
2132
-
2133
-
2134
- #
2135
- # Testing and debugging
2136
- #
2137
-
2138
-
2139
- class AsyncIOTaskInfo(TaskInfo):
2140
- def __init__(self, task: asyncio.Task):
2141
- task_state = _task_states.get(task)
2142
- if task_state is None:
2143
- parent_id = None
2144
- else:
2145
- parent_id = task_state.parent_id
2146
-
2147
- coro = task.get_coro()
2148
- assert coro is not None, "created TaskInfo from a completed Task"
2149
- super().__init__(id(task), parent_id, task.get_name(), coro)
2150
- self._task = weakref.ref(task)
2151
-
2152
- def has_pending_cancellation(self) -> bool:
2153
- if not (task := self._task()):
2154
- # If the task isn't around anymore, it won't have a pending cancellation
2155
- return False
2156
-
2157
- if task._must_cancel: # type: ignore[attr-defined]
2158
- return True
2159
- elif (
2160
- isinstance(task._fut_waiter, asyncio.Future) # type: ignore[attr-defined]
2161
- and task._fut_waiter.cancelled() # type: ignore[attr-defined]
2162
- ):
2163
- return True
2164
-
2165
- if task_state := _task_states.get(task):
2166
- if cancel_scope := task_state.cancel_scope:
2167
- return cancel_scope._effectively_cancelled
2168
-
2169
- return False
2170
-
2171
-
2172
- class TestRunner(abc.TestRunner):
2173
- _send_stream: MemoryObjectSendStream[tuple[Awaitable[Any], asyncio.Future[Any]]]
2174
-
2175
- def __init__(
2176
- self,
2177
- *,
2178
- debug: bool | None = None,
2179
- use_uvloop: bool = False,
2180
- loop_factory: Callable[[], AbstractEventLoop] | None = None,
2181
- ) -> None:
2182
- if use_uvloop and loop_factory is None:
2183
- if sys.platform != "win32":
2184
- import uvloop
2185
-
2186
- loop_factory = uvloop.new_event_loop
2187
- else:
2188
- import winloop
2189
-
2190
- loop_factory = winloop.new_event_loop
2191
-
2192
- self._runner = Runner(debug=debug, loop_factory=loop_factory)
2193
- self._exceptions: list[BaseException] = []
2194
- self._runner_task: asyncio.Task | None = None
2195
-
2196
- def __enter__(self) -> TestRunner:
2197
- self._runner.__enter__()
2198
- self.get_loop().set_exception_handler(self._exception_handler)
2199
- return self
2200
-
2201
- def __exit__(
2202
- self,
2203
- exc_type: type[BaseException] | None,
2204
- exc_val: BaseException | None,
2205
- exc_tb: TracebackType | None,
2206
- ) -> None:
2207
- self._runner.__exit__(exc_type, exc_val, exc_tb)
2208
-
2209
- def get_loop(self) -> AbstractEventLoop:
2210
- return self._runner.get_loop()
2211
-
2212
- def _exception_handler(
2213
- self, loop: asyncio.AbstractEventLoop, context: dict[str, Any]
2214
- ) -> None:
2215
- if isinstance(context.get("exception"), Exception):
2216
- self._exceptions.append(context["exception"])
2217
- else:
2218
- loop.default_exception_handler(context)
2219
-
2220
- def _raise_async_exceptions(self) -> None:
2221
- # Re-raise any exceptions raised in asynchronous callbacks
2222
- if self._exceptions:
2223
- exceptions, self._exceptions = self._exceptions, []
2224
- if len(exceptions) == 1:
2225
- raise exceptions[0]
2226
- elif exceptions:
2227
- raise BaseExceptionGroup(
2228
- "Multiple exceptions occurred in asynchronous callbacks", exceptions
2229
- )
2230
-
2231
- async def _run_tests_and_fixtures(
2232
- self,
2233
- receive_stream: MemoryObjectReceiveStream[
2234
- tuple[Awaitable[T_Retval], asyncio.Future[T_Retval]]
2235
- ],
2236
- ) -> None:
2237
- from _pytest.outcomes import OutcomeException
2238
-
2239
- with receive_stream, self._send_stream:
2240
- async for coro, future in receive_stream:
2241
- try:
2242
- retval = await coro
2243
- except CancelledError as exc:
2244
- if not future.cancelled():
2245
- future.cancel(*exc.args)
2246
-
2247
- raise
2248
- except BaseException as exc:
2249
- if not future.cancelled():
2250
- future.set_exception(exc)
2251
-
2252
- if not isinstance(exc, (Exception, OutcomeException)):
2253
- raise
2254
- else:
2255
- if not future.cancelled():
2256
- future.set_result(retval)
2257
-
2258
- async def _call_in_runner_task(
2259
- self,
2260
- func: Callable[P, Awaitable[T_Retval]],
2261
- /,
2262
- *args: P.args,
2263
- **kwargs: P.kwargs,
2264
- ) -> T_Retval:
2265
- if not self._runner_task:
2266
- self._send_stream, receive_stream = create_memory_object_stream[
2267
- tuple[Awaitable[Any], asyncio.Future]
2268
- ](1)
2269
- self._runner_task = self.get_loop().create_task(
2270
- self._run_tests_and_fixtures(receive_stream)
2271
- )
2272
-
2273
- coro = func(*args, **kwargs)
2274
- future: asyncio.Future[T_Retval] = self.get_loop().create_future()
2275
- self._send_stream.send_nowait((coro, future))
2276
- return await future
2277
-
2278
- def run_asyncgen_fixture(
2279
- self,
2280
- fixture_func: Callable[..., AsyncGenerator[T_Retval, Any]],
2281
- kwargs: dict[str, Any],
2282
- ) -> Iterable[T_Retval]:
2283
- asyncgen = fixture_func(**kwargs)
2284
- fixturevalue: T_Retval = self.get_loop().run_until_complete(
2285
- self._call_in_runner_task(asyncgen.asend, None)
2286
- )
2287
- self._raise_async_exceptions()
2288
-
2289
- yield fixturevalue
2290
-
2291
- try:
2292
- self.get_loop().run_until_complete(
2293
- self._call_in_runner_task(asyncgen.asend, None)
2294
- )
2295
- except StopAsyncIteration:
2296
- self._raise_async_exceptions()
2297
- else:
2298
- self.get_loop().run_until_complete(asyncgen.aclose())
2299
- raise RuntimeError("Async generator fixture did not stop")
2300
-
2301
- def run_fixture(
2302
- self,
2303
- fixture_func: Callable[..., Coroutine[Any, Any, T_Retval]],
2304
- kwargs: dict[str, Any],
2305
- ) -> T_Retval:
2306
- retval = self.get_loop().run_until_complete(
2307
- self._call_in_runner_task(fixture_func, **kwargs)
2308
- )
2309
- self._raise_async_exceptions()
2310
- return retval
2311
-
2312
- def run_test(
2313
- self, test_func: Callable[..., Coroutine[Any, Any, Any]], kwargs: dict[str, Any]
2314
- ) -> None:
2315
- try:
2316
- self.get_loop().run_until_complete(
2317
- self._call_in_runner_task(test_func, **kwargs)
2318
- )
2319
- except Exception as exc:
2320
- self._exceptions.append(exc)
2321
-
2322
- self._raise_async_exceptions()
2323
-
2324
-
2325
- class AsyncIOBackend(AsyncBackend):
2326
- @classmethod
2327
- def run(
2328
- cls,
2329
- func: Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]],
2330
- args: tuple[Unpack[PosArgsT]],
2331
- kwargs: dict[str, Any],
2332
- options: dict[str, Any],
2333
- ) -> T_Retval:
2334
- @wraps(func)
2335
- async def wrapper() -> T_Retval:
2336
- task = cast(asyncio.Task, current_task())
2337
- task.set_name(get_callable_name(func))
2338
- _task_states[task] = TaskState(None, None)
2339
-
2340
- try:
2341
- return await func(*args)
2342
- finally:
2343
- del _task_states[task]
2344
-
2345
- debug = options.get("debug", None)
2346
- loop_factory = options.get("loop_factory", None)
2347
- if loop_factory is None and options.get("use_uvloop", False):
2348
- if sys.platform != "win32":
2349
- import uvloop
2350
-
2351
- loop_factory = uvloop.new_event_loop
2352
- else:
2353
- import winloop
2354
-
2355
- loop_factory = winloop.new_event_loop
2356
-
2357
- with Runner(debug=debug, loop_factory=loop_factory) as runner:
2358
- return runner.run(wrapper())
2359
-
2360
- @classmethod
2361
- def current_token(cls) -> object:
2362
- return get_running_loop()
2363
-
2364
- @classmethod
2365
- def current_time(cls) -> float:
2366
- return get_running_loop().time()
2367
-
2368
- @classmethod
2369
- def cancelled_exception_class(cls) -> type[BaseException]:
2370
- return CancelledError
2371
-
2372
- @classmethod
2373
- async def checkpoint(cls) -> None:
2374
- await sleep(0)
2375
-
2376
- @classmethod
2377
- async def checkpoint_if_cancelled(cls) -> None:
2378
- task = current_task()
2379
- if task is None:
2380
- return
2381
-
2382
- try:
2383
- cancel_scope = _task_states[task].cancel_scope
2384
- except KeyError:
2385
- return
2386
-
2387
- while cancel_scope:
2388
- if cancel_scope.cancel_called:
2389
- await sleep(0)
2390
- elif cancel_scope.shield:
2391
- break
2392
- else:
2393
- cancel_scope = cancel_scope._parent_scope
2394
-
2395
- @classmethod
2396
- async def cancel_shielded_checkpoint(cls) -> None:
2397
- with CancelScope(shield=True):
2398
- await sleep(0)
2399
-
2400
- @classmethod
2401
- async def sleep(cls, delay: float) -> None:
2402
- await sleep(delay)
2403
-
2404
- @classmethod
2405
- def create_cancel_scope(
2406
- cls, *, deadline: float = math.inf, shield: bool = False
2407
- ) -> CancelScope:
2408
- return CancelScope(deadline=deadline, shield=shield)
2409
-
2410
- @classmethod
2411
- def current_effective_deadline(cls) -> float:
2412
- if (task := current_task()) is None:
2413
- return math.inf
2414
-
2415
- try:
2416
- cancel_scope = _task_states[task].cancel_scope
2417
- except KeyError:
2418
- return math.inf
2419
-
2420
- deadline = math.inf
2421
- while cancel_scope:
2422
- deadline = min(deadline, cancel_scope.deadline)
2423
- if cancel_scope._cancel_called:
2424
- deadline = -math.inf
2425
- break
2426
- elif cancel_scope.shield:
2427
- break
2428
- else:
2429
- cancel_scope = cancel_scope._parent_scope
2430
-
2431
- return deadline
2432
-
2433
- @classmethod
2434
- def create_task_group(cls) -> abc.TaskGroup:
2435
- return TaskGroup()
2436
-
2437
- @classmethod
2438
- def create_event(cls) -> abc.Event:
2439
- return Event()
2440
-
2441
- @classmethod
2442
- def create_lock(cls, *, fast_acquire: bool) -> abc.Lock:
2443
- return Lock(fast_acquire=fast_acquire)
2444
-
2445
- @classmethod
2446
- def create_semaphore(
2447
- cls,
2448
- initial_value: int,
2449
- *,
2450
- max_value: int | None = None,
2451
- fast_acquire: bool = False,
2452
- ) -> abc.Semaphore:
2453
- return Semaphore(initial_value, max_value=max_value, fast_acquire=fast_acquire)
2454
-
2455
- @classmethod
2456
- def create_capacity_limiter(cls, total_tokens: float) -> abc.CapacityLimiter:
2457
- return CapacityLimiter(total_tokens)
2458
-
2459
- @classmethod
2460
- async def run_sync_in_worker_thread( # type: ignore[return]
2461
- cls,
2462
- func: Callable[[Unpack[PosArgsT]], T_Retval],
2463
- args: tuple[Unpack[PosArgsT]],
2464
- abandon_on_cancel: bool = False,
2465
- limiter: abc.CapacityLimiter | None = None,
2466
- ) -> T_Retval:
2467
- await cls.checkpoint()
2468
-
2469
- # If this is the first run in this event loop thread, set up the necessary
2470
- # variables
2471
- try:
2472
- idle_workers = _threadpool_idle_workers.get()
2473
- workers = _threadpool_workers.get()
2474
- except LookupError:
2475
- idle_workers = deque()
2476
- workers = set()
2477
- _threadpool_idle_workers.set(idle_workers)
2478
- _threadpool_workers.set(workers)
2479
-
2480
- async with limiter or cls.current_default_thread_limiter():
2481
- with CancelScope(shield=not abandon_on_cancel) as scope:
2482
- future = asyncio.Future[T_Retval]()
2483
- root_task = find_root_task()
2484
- if not idle_workers:
2485
- worker = WorkerThread(root_task, workers, idle_workers)
2486
- worker.start()
2487
- workers.add(worker)
2488
- root_task.add_done_callback(
2489
- worker.stop, context=contextvars.Context()
2490
- )
2491
- else:
2492
- worker = idle_workers.pop()
2493
-
2494
- # Prune any other workers that have been idle for MAX_IDLE_TIME
2495
- # seconds or longer
2496
- now = cls.current_time()
2497
- while idle_workers:
2498
- if (
2499
- now - idle_workers[0].idle_since
2500
- < WorkerThread.MAX_IDLE_TIME
2501
- ):
2502
- break
2503
-
2504
- expired_worker = idle_workers.popleft()
2505
- expired_worker.root_task.remove_done_callback(
2506
- expired_worker.stop
2507
- )
2508
- expired_worker.stop()
2509
-
2510
- context = copy_context()
2511
- context.run(set_current_async_library, None)
2512
- if abandon_on_cancel or scope._parent_scope is None:
2513
- worker_scope = scope
2514
- else:
2515
- worker_scope = scope._parent_scope
2516
-
2517
- worker.queue.put_nowait((context, func, args, future, worker_scope))
2518
- return await future
2519
-
2520
- @classmethod
2521
- def check_cancelled(cls) -> None:
2522
- scope: CancelScope | None = threadlocals.current_cancel_scope
2523
- while scope is not None:
2524
- if scope.cancel_called:
2525
- raise CancelledError(f"Cancelled by cancel scope {id(scope):x}")
2526
-
2527
- if scope.shield:
2528
- return
2529
-
2530
- scope = scope._parent_scope
2531
-
2532
- @classmethod
2533
- def run_async_from_thread(
2534
- cls,
2535
- func: Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]],
2536
- args: tuple[Unpack[PosArgsT]],
2537
- token: object,
2538
- ) -> T_Retval:
2539
- async def task_wrapper() -> T_Retval:
2540
- __tracebackhide__ = True
2541
- if scope is not None:
2542
- task = cast(asyncio.Task, current_task())
2543
- _task_states[task] = TaskState(None, scope)
2544
- scope._tasks.add(task)
2545
- try:
2546
- return await func(*args)
2547
- except CancelledError as exc:
2548
- raise concurrent.futures.CancelledError(str(exc)) from None
2549
- finally:
2550
- if scope is not None:
2551
- scope._tasks.discard(task)
2552
-
2553
- loop = cast(
2554
- "AbstractEventLoop", token or threadlocals.current_token.native_token
2555
- )
2556
- if loop.is_closed():
2557
- raise RunFinishedError
2558
-
2559
- context = copy_context()
2560
- context.run(set_current_async_library, "asyncio")
2561
- scope = getattr(threadlocals, "current_cancel_scope", None)
2562
- f: concurrent.futures.Future[T_Retval] = context.run(
2563
- asyncio.run_coroutine_threadsafe, task_wrapper(), loop=loop
2564
- )
2565
- return f.result()
2566
-
2567
- @classmethod
2568
- def run_sync_from_thread(
2569
- cls,
2570
- func: Callable[[Unpack[PosArgsT]], T_Retval],
2571
- args: tuple[Unpack[PosArgsT]],
2572
- token: object,
2573
- ) -> T_Retval:
2574
- @wraps(func)
2575
- def wrapper() -> None:
2576
- try:
2577
- set_current_async_library("asyncio")
2578
- f.set_result(func(*args))
2579
- except BaseException as exc:
2580
- f.set_exception(exc)
2581
- if not isinstance(exc, Exception):
2582
- raise
2583
-
2584
- loop = cast(
2585
- "AbstractEventLoop", token or threadlocals.current_token.native_token
2586
- )
2587
- if loop.is_closed():
2588
- raise RunFinishedError
2589
-
2590
- f: concurrent.futures.Future[T_Retval] = Future()
2591
- loop.call_soon_threadsafe(wrapper)
2592
- return f.result()
2593
-
2594
- @classmethod
2595
- async def open_process(
2596
- cls,
2597
- command: StrOrBytesPath | Sequence[StrOrBytesPath],
2598
- *,
2599
- stdin: int | IO[Any] | None,
2600
- stdout: int | IO[Any] | None,
2601
- stderr: int | IO[Any] | None,
2602
- **kwargs: Any,
2603
- ) -> Process:
2604
- await cls.checkpoint()
2605
- if isinstance(command, PathLike):
2606
- command = os.fspath(command)
2607
-
2608
- if isinstance(command, (str, bytes)):
2609
- process = await asyncio.create_subprocess_shell(
2610
- command,
2611
- stdin=stdin,
2612
- stdout=stdout,
2613
- stderr=stderr,
2614
- **kwargs,
2615
- )
2616
- else:
2617
- process = await asyncio.create_subprocess_exec(
2618
- *command,
2619
- stdin=stdin,
2620
- stdout=stdout,
2621
- stderr=stderr,
2622
- **kwargs,
2623
- )
2624
-
2625
- stdin_stream = StreamWriterWrapper(process.stdin) if process.stdin else None
2626
- stdout_stream = StreamReaderWrapper(process.stdout) if process.stdout else None
2627
- stderr_stream = StreamReaderWrapper(process.stderr) if process.stderr else None
2628
- return Process(process, stdin_stream, stdout_stream, stderr_stream)
2629
-
2630
- @classmethod
2631
- def setup_process_pool_exit_at_shutdown(cls, workers: set[abc.Process]) -> None:
2632
- create_task(
2633
- _shutdown_process_pool_on_exit(workers),
2634
- name="AnyIO process pool shutdown task",
2635
- )
2636
- find_root_task().add_done_callback(
2637
- partial(_forcibly_shutdown_process_pool_on_exit, workers) # type:ignore[arg-type]
2638
- )
2639
-
2640
- @classmethod
2641
- async def connect_tcp(
2642
- cls, host: str, port: int, local_address: IPSockAddrType | None = None
2643
- ) -> abc.SocketStream:
2644
- transport, protocol = cast(
2645
- tuple[asyncio.Transport, StreamProtocol],
2646
- await get_running_loop().create_connection(
2647
- StreamProtocol, host, port, local_addr=local_address
2648
- ),
2649
- )
2650
- transport.pause_reading()
2651
- return SocketStream(transport, protocol)
2652
-
2653
- @classmethod
2654
- async def connect_unix(cls, path: str | bytes) -> abc.UNIXSocketStream:
2655
- await cls.checkpoint()
2656
- loop = get_running_loop()
2657
- raw_socket = socket.socket(socket.AF_UNIX)
2658
- raw_socket.setblocking(False)
2659
- while True:
2660
- try:
2661
- raw_socket.connect(path)
2662
- except BlockingIOError:
2663
- f: asyncio.Future = asyncio.Future()
2664
- loop.add_writer(raw_socket, f.set_result, None)
2665
- f.add_done_callback(lambda _: loop.remove_writer(raw_socket))
2666
- await f
2667
- except BaseException:
2668
- raw_socket.close()
2669
- raise
2670
- else:
2671
- return UNIXSocketStream(raw_socket)
2672
-
2673
- @classmethod
2674
- def create_tcp_listener(cls, sock: socket.socket) -> SocketListener:
2675
- return TCPSocketListener(sock)
2676
-
2677
- @classmethod
2678
- def create_unix_listener(cls, sock: socket.socket) -> SocketListener:
2679
- return UNIXSocketListener(sock)
2680
-
2681
- @classmethod
2682
- async def create_udp_socket(
2683
- cls,
2684
- family: AddressFamily,
2685
- local_address: IPSockAddrType | None,
2686
- remote_address: IPSockAddrType | None,
2687
- reuse_port: bool,
2688
- ) -> UDPSocket | ConnectedUDPSocket:
2689
- transport, protocol = await get_running_loop().create_datagram_endpoint(
2690
- DatagramProtocol,
2691
- local_addr=local_address,
2692
- remote_addr=remote_address,
2693
- family=family,
2694
- reuse_port=reuse_port,
2695
- )
2696
- if protocol.exception:
2697
- transport.close()
2698
- raise protocol.exception
2699
-
2700
- if not remote_address:
2701
- return UDPSocket(transport, protocol)
2702
- else:
2703
- return ConnectedUDPSocket(transport, protocol)
2704
-
2705
- @classmethod
2706
- async def create_unix_datagram_socket( # type: ignore[override]
2707
- cls, raw_socket: socket.socket, remote_path: str | bytes | None
2708
- ) -> abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocket:
2709
- await cls.checkpoint()
2710
- loop = get_running_loop()
2711
-
2712
- if remote_path:
2713
- while True:
2714
- try:
2715
- raw_socket.connect(remote_path)
2716
- except BlockingIOError:
2717
- f: asyncio.Future = asyncio.Future()
2718
- loop.add_writer(raw_socket, f.set_result, None)
2719
- f.add_done_callback(lambda _: loop.remove_writer(raw_socket))
2720
- await f
2721
- except BaseException:
2722
- raw_socket.close()
2723
- raise
2724
- else:
2725
- return ConnectedUNIXDatagramSocket(raw_socket)
2726
- else:
2727
- return UNIXDatagramSocket(raw_socket)
2728
-
2729
- @classmethod
2730
- async def getaddrinfo(
2731
- cls,
2732
- host: bytes | str | None,
2733
- port: str | int | None,
2734
- *,
2735
- family: int | AddressFamily = 0,
2736
- type: int | SocketKind = 0,
2737
- proto: int = 0,
2738
- flags: int = 0,
2739
- ) -> Sequence[
2740
- tuple[
2741
- AddressFamily,
2742
- SocketKind,
2743
- int,
2744
- str,
2745
- tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes],
2746
- ]
2747
- ]:
2748
- return await get_running_loop().getaddrinfo(
2749
- host, port, family=family, type=type, proto=proto, flags=flags
2750
- )
2751
-
2752
- @classmethod
2753
- async def getnameinfo(
2754
- cls, sockaddr: IPSockAddrType, flags: int = 0
2755
- ) -> tuple[str, str]:
2756
- return await get_running_loop().getnameinfo(sockaddr, flags)
2757
-
2758
- @classmethod
2759
- async def wait_readable(cls, obj: FileDescriptorLike) -> None:
2760
- try:
2761
- read_events = _read_events.get()
2762
- except LookupError:
2763
- read_events = {}
2764
- _read_events.set(read_events)
2765
-
2766
- fd = obj if isinstance(obj, int) else obj.fileno()
2767
- if read_events.get(fd):
2768
- raise BusyResourceError("reading from")
2769
-
2770
- loop = get_running_loop()
2771
- fut: asyncio.Future[bool] = loop.create_future()
2772
-
2773
- def cb() -> None:
2774
- try:
2775
- del read_events[fd]
2776
- except KeyError:
2777
- pass
2778
- else:
2779
- remove_reader(fd)
2780
-
2781
- try:
2782
- fut.set_result(True)
2783
- except asyncio.InvalidStateError:
2784
- pass
2785
-
2786
- try:
2787
- loop.add_reader(fd, cb)
2788
- except NotImplementedError:
2789
- from anyio._core._asyncio_selector_thread import get_selector
2790
-
2791
- selector = get_selector()
2792
- selector.add_reader(fd, cb)
2793
- remove_reader = selector.remove_reader
2794
- else:
2795
- remove_reader = loop.remove_reader
2796
-
2797
- read_events[fd] = fut
2798
- try:
2799
- success = await fut
2800
- finally:
2801
- try:
2802
- del read_events[fd]
2803
- except KeyError:
2804
- pass
2805
- else:
2806
- remove_reader(fd)
2807
-
2808
- if not success:
2809
- raise ClosedResourceError
2810
-
2811
- @classmethod
2812
- async def wait_writable(cls, obj: FileDescriptorLike) -> None:
2813
- try:
2814
- write_events = _write_events.get()
2815
- except LookupError:
2816
- write_events = {}
2817
- _write_events.set(write_events)
2818
-
2819
- fd = obj if isinstance(obj, int) else obj.fileno()
2820
- if write_events.get(fd):
2821
- raise BusyResourceError("writing to")
2822
-
2823
- loop = get_running_loop()
2824
- fut: asyncio.Future[bool] = loop.create_future()
2825
-
2826
- def cb() -> None:
2827
- try:
2828
- del write_events[fd]
2829
- except KeyError:
2830
- pass
2831
- else:
2832
- remove_writer(fd)
2833
-
2834
- try:
2835
- fut.set_result(True)
2836
- except asyncio.InvalidStateError:
2837
- pass
2838
-
2839
- try:
2840
- loop.add_writer(fd, cb)
2841
- except NotImplementedError:
2842
- from anyio._core._asyncio_selector_thread import get_selector
2843
-
2844
- selector = get_selector()
2845
- selector.add_writer(fd, cb)
2846
- remove_writer = selector.remove_writer
2847
- else:
2848
- remove_writer = loop.remove_writer
2849
-
2850
- write_events[fd] = fut
2851
- try:
2852
- success = await fut
2853
- finally:
2854
- try:
2855
- del write_events[fd]
2856
- except KeyError:
2857
- pass
2858
- else:
2859
- remove_writer(fd)
2860
-
2861
- if not success:
2862
- raise ClosedResourceError
2863
-
2864
- @classmethod
2865
- def notify_closing(cls, obj: FileDescriptorLike) -> None:
2866
- fd = obj if isinstance(obj, int) else obj.fileno()
2867
- loop = get_running_loop()
2868
-
2869
- try:
2870
- write_events = _write_events.get()
2871
- except LookupError:
2872
- pass
2873
- else:
2874
- try:
2875
- fut = write_events.pop(fd)
2876
- except KeyError:
2877
- pass
2878
- else:
2879
- try:
2880
- fut.set_result(False)
2881
- except asyncio.InvalidStateError:
2882
- pass
2883
-
2884
- try:
2885
- loop.remove_writer(fd)
2886
- except NotImplementedError:
2887
- from anyio._core._asyncio_selector_thread import get_selector
2888
-
2889
- get_selector().remove_writer(fd)
2890
-
2891
- try:
2892
- read_events = _read_events.get()
2893
- except LookupError:
2894
- pass
2895
- else:
2896
- try:
2897
- fut = read_events.pop(fd)
2898
- except KeyError:
2899
- pass
2900
- else:
2901
- try:
2902
- fut.set_result(False)
2903
- except asyncio.InvalidStateError:
2904
- pass
2905
-
2906
- try:
2907
- loop.remove_reader(fd)
2908
- except NotImplementedError:
2909
- from anyio._core._asyncio_selector_thread import get_selector
2910
-
2911
- get_selector().remove_reader(fd)
2912
-
2913
- @classmethod
2914
- async def wrap_listener_socket(cls, sock: socket.socket) -> SocketListener:
2915
- return TCPSocketListener(sock)
2916
-
2917
- @classmethod
2918
- async def wrap_stream_socket(cls, sock: socket.socket) -> SocketStream:
2919
- transport, protocol = await get_running_loop().create_connection(
2920
- StreamProtocol, sock=sock
2921
- )
2922
- return SocketStream(transport, protocol)
2923
-
2924
- @classmethod
2925
- async def wrap_unix_stream_socket(cls, sock: socket.socket) -> UNIXSocketStream:
2926
- return UNIXSocketStream(sock)
2927
-
2928
- @classmethod
2929
- async def wrap_udp_socket(cls, sock: socket.socket) -> UDPSocket:
2930
- transport, protocol = await get_running_loop().create_datagram_endpoint(
2931
- DatagramProtocol, sock=sock
2932
- )
2933
- return UDPSocket(transport, protocol)
2934
-
2935
- @classmethod
2936
- async def wrap_connected_udp_socket(cls, sock: socket.socket) -> ConnectedUDPSocket:
2937
- transport, protocol = await get_running_loop().create_datagram_endpoint(
2938
- DatagramProtocol, sock=sock
2939
- )
2940
- return ConnectedUDPSocket(transport, protocol)
2941
-
2942
- @classmethod
2943
- async def wrap_unix_datagram_socket(cls, sock: socket.socket) -> UNIXDatagramSocket:
2944
- return UNIXDatagramSocket(sock)
2945
-
2946
- @classmethod
2947
- async def wrap_connected_unix_datagram_socket(
2948
- cls, sock: socket.socket
2949
- ) -> ConnectedUNIXDatagramSocket:
2950
- return ConnectedUNIXDatagramSocket(sock)
2951
-
2952
- @classmethod
2953
- def current_default_thread_limiter(cls) -> CapacityLimiter:
2954
- try:
2955
- return _default_thread_limiter.get()
2956
- except LookupError:
2957
- limiter = CapacityLimiter(40)
2958
- _default_thread_limiter.set(limiter)
2959
- return limiter
2960
-
2961
- @classmethod
2962
- def open_signal_receiver(
2963
- cls, *signals: Signals
2964
- ) -> AbstractContextManager[AsyncIterator[Signals]]:
2965
- return _SignalReceiver(signals)
2966
-
2967
- @classmethod
2968
- def get_current_task(cls) -> TaskInfo:
2969
- return AsyncIOTaskInfo(current_task()) # type: ignore[arg-type]
2970
-
2971
- @classmethod
2972
- def get_running_tasks(cls) -> Sequence[TaskInfo]:
2973
- return [AsyncIOTaskInfo(task) for task in all_tasks() if not task.done()]
2974
-
2975
- @classmethod
2976
- async def wait_all_tasks_blocked(cls) -> None:
2977
- await cls.checkpoint()
2978
- this_task = current_task()
2979
- while True:
2980
- for task in all_tasks():
2981
- if task is this_task:
2982
- continue
2983
-
2984
- waiter = task._fut_waiter # type: ignore[attr-defined]
2985
- if waiter is None or waiter.done():
2986
- await sleep(0.1)
2987
- break
2988
- else:
2989
- return
2990
-
2991
- @classmethod
2992
- def create_test_runner(cls, options: dict[str, Any]) -> TestRunner:
2993
- return TestRunner(**options)
2994
-
2995
-
2996
- backend_class = AsyncIOBackend