primary-api-models 0.1.0__py3-none-any.whl

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 (1580) hide show
  1. primary_api_models/__init__.py +53 -0
  2. primary_api_models/account_data.py +62 -0
  3. primary_api_models/commons.py +49 -0
  4. primary_api_models/detailed_instruments.py +11 -0
  5. primary_api_models/detailed_position.py +53 -0
  6. primary_api_models/enhanced_models.py +27 -0
  7. primary_api_models/enums.py +184 -0
  8. primary_api_models/instrument_details.py +48 -0
  9. primary_api_models/listed_instruments.py +14 -0
  10. primary_api_models/market_data.py +25 -0
  11. primary_api_models/order_report.py +34 -0
  12. primary_api_models/order_status.py +11 -0
  13. primary_api_models/positions.py +27 -0
  14. primary_api_models-0.1.0.dist-info/METADATA +7 -0
  15. primary_api_models-0.1.0.dist-info/RECORD +1580 -0
  16. primary_api_models-0.1.0.dist-info/WHEEL +5 -0
  17. primary_api_models-0.1.0.dist-info/top_level.txt +3 -0
  18. tests/conftest.py +6 -0
  19. tests/test_models.py +61 -0
  20. venv/Lib/site-packages/_pytest/__init__.py +13 -0
  21. venv/Lib/site-packages/_pytest/_argcomplete.py +117 -0
  22. venv/Lib/site-packages/_pytest/_code/__init__.py +26 -0
  23. venv/Lib/site-packages/_pytest/_code/code.py +1571 -0
  24. venv/Lib/site-packages/_pytest/_code/source.py +225 -0
  25. venv/Lib/site-packages/_pytest/_io/__init__.py +10 -0
  26. venv/Lib/site-packages/_pytest/_io/pprint.py +673 -0
  27. venv/Lib/site-packages/_pytest/_io/saferepr.py +130 -0
  28. venv/Lib/site-packages/_pytest/_io/terminalwriter.py +258 -0
  29. venv/Lib/site-packages/_pytest/_io/wcwidth.py +57 -0
  30. venv/Lib/site-packages/_pytest/_py/__init__.py +0 -0
  31. venv/Lib/site-packages/_pytest/_py/error.py +119 -0
  32. venv/Lib/site-packages/_pytest/_py/path.py +1475 -0
  33. venv/Lib/site-packages/_pytest/_version.py +24 -0
  34. venv/Lib/site-packages/_pytest/assertion/__init__.py +208 -0
  35. venv/Lib/site-packages/_pytest/assertion/rewrite.py +1202 -0
  36. venv/Lib/site-packages/_pytest/assertion/truncate.py +137 -0
  37. venv/Lib/site-packages/_pytest/assertion/util.py +615 -0
  38. venv/Lib/site-packages/_pytest/cacheprovider.py +646 -0
  39. venv/Lib/site-packages/_pytest/capture.py +1144 -0
  40. venv/Lib/site-packages/_pytest/compat.py +314 -0
  41. venv/Lib/site-packages/_pytest/config/__init__.py +2203 -0
  42. venv/Lib/site-packages/_pytest/config/argparsing.py +578 -0
  43. venv/Lib/site-packages/_pytest/config/compat.py +85 -0
  44. venv/Lib/site-packages/_pytest/config/exceptions.py +15 -0
  45. venv/Lib/site-packages/_pytest/config/findpaths.py +350 -0
  46. venv/Lib/site-packages/_pytest/debugging.py +407 -0
  47. venv/Lib/site-packages/_pytest/deprecated.py +99 -0
  48. venv/Lib/site-packages/_pytest/doctest.py +736 -0
  49. venv/Lib/site-packages/_pytest/faulthandler.py +119 -0
  50. venv/Lib/site-packages/_pytest/fixtures.py +2047 -0
  51. venv/Lib/site-packages/_pytest/freeze_support.py +45 -0
  52. venv/Lib/site-packages/_pytest/helpconfig.py +293 -0
  53. venv/Lib/site-packages/_pytest/hookspec.py +1342 -0
  54. venv/Lib/site-packages/_pytest/junitxml.py +695 -0
  55. venv/Lib/site-packages/_pytest/legacypath.py +468 -0
  56. venv/Lib/site-packages/_pytest/logging.py +960 -0
  57. venv/Lib/site-packages/_pytest/main.py +1203 -0
  58. venv/Lib/site-packages/_pytest/mark/__init__.py +301 -0
  59. venv/Lib/site-packages/_pytest/mark/expression.py +353 -0
  60. venv/Lib/site-packages/_pytest/mark/structures.py +664 -0
  61. venv/Lib/site-packages/_pytest/monkeypatch.py +435 -0
  62. venv/Lib/site-packages/_pytest/nodes.py +772 -0
  63. venv/Lib/site-packages/_pytest/outcomes.py +308 -0
  64. venv/Lib/site-packages/_pytest/pastebin.py +117 -0
  65. venv/Lib/site-packages/_pytest/pathlib.py +1063 -0
  66. venv/Lib/site-packages/_pytest/py.typed +0 -0
  67. venv/Lib/site-packages/_pytest/pytester.py +1791 -0
  68. venv/Lib/site-packages/_pytest/pytester_assertions.py +74 -0
  69. venv/Lib/site-packages/_pytest/python.py +1772 -0
  70. venv/Lib/site-packages/_pytest/python_api.py +819 -0
  71. venv/Lib/site-packages/_pytest/raises.py +1517 -0
  72. venv/Lib/site-packages/_pytest/recwarn.py +367 -0
  73. venv/Lib/site-packages/_pytest/reports.py +694 -0
  74. venv/Lib/site-packages/_pytest/runner.py +580 -0
  75. venv/Lib/site-packages/_pytest/scope.py +91 -0
  76. venv/Lib/site-packages/_pytest/setuponly.py +98 -0
  77. venv/Lib/site-packages/_pytest/setupplan.py +39 -0
  78. venv/Lib/site-packages/_pytest/skipping.py +321 -0
  79. venv/Lib/site-packages/_pytest/stash.py +116 -0
  80. venv/Lib/site-packages/_pytest/stepwise.py +209 -0
  81. venv/Lib/site-packages/_pytest/subtests.py +411 -0
  82. venv/Lib/site-packages/_pytest/terminal.py +1763 -0
  83. venv/Lib/site-packages/_pytest/terminalprogress.py +30 -0
  84. venv/Lib/site-packages/_pytest/threadexception.py +152 -0
  85. venv/Lib/site-packages/_pytest/timing.py +95 -0
  86. venv/Lib/site-packages/_pytest/tmpdir.py +337 -0
  87. venv/Lib/site-packages/_pytest/tracemalloc.py +24 -0
  88. venv/Lib/site-packages/_pytest/unittest.py +632 -0
  89. venv/Lib/site-packages/_pytest/unraisableexception.py +163 -0
  90. venv/Lib/site-packages/_pytest/warning_types.py +172 -0
  91. venv/Lib/site-packages/_pytest/warnings.py +151 -0
  92. venv/Lib/site-packages/annotated_types/__init__.py +432 -0
  93. venv/Lib/site-packages/annotated_types/py.typed +0 -0
  94. venv/Lib/site-packages/annotated_types/test_cases.py +151 -0
  95. venv/Lib/site-packages/build/__init__.py +47 -0
  96. venv/Lib/site-packages/build/__main__.py +654 -0
  97. venv/Lib/site-packages/build/_builder.py +393 -0
  98. venv/Lib/site-packages/build/_compat/__init__.py +0 -0
  99. venv/Lib/site-packages/build/_compat/importlib.py +22 -0
  100. venv/Lib/site-packages/build/_compat/tarfile.py +31 -0
  101. venv/Lib/site-packages/build/_compat/tomllib.py +19 -0
  102. venv/Lib/site-packages/build/_ctx.py +105 -0
  103. venv/Lib/site-packages/build/_exceptions.py +69 -0
  104. venv/Lib/site-packages/build/_types.py +22 -0
  105. venv/Lib/site-packages/build/_util.py +68 -0
  106. venv/Lib/site-packages/build/env.py +507 -0
  107. venv/Lib/site-packages/build/py.typed +0 -0
  108. venv/Lib/site-packages/build/util.py +70 -0
  109. venv/Lib/site-packages/certifi/__init__.py +4 -0
  110. venv/Lib/site-packages/certifi/__main__.py +12 -0
  111. venv/Lib/site-packages/certifi/core.py +83 -0
  112. venv/Lib/site-packages/certifi/py.typed +0 -0
  113. venv/Lib/site-packages/charset_normalizer/__init__.py +48 -0
  114. venv/Lib/site-packages/charset_normalizer/__main__.py +6 -0
  115. venv/Lib/site-packages/charset_normalizer/api.py +988 -0
  116. venv/Lib/site-packages/charset_normalizer/cd.py +454 -0
  117. venv/Lib/site-packages/charset_normalizer/cli/__init__.py +8 -0
  118. venv/Lib/site-packages/charset_normalizer/cli/__main__.py +362 -0
  119. venv/Lib/site-packages/charset_normalizer/constant.py +2050 -0
  120. venv/Lib/site-packages/charset_normalizer/legacy.py +79 -0
  121. venv/Lib/site-packages/charset_normalizer/md.py +936 -0
  122. venv/Lib/site-packages/charset_normalizer/models.py +369 -0
  123. venv/Lib/site-packages/charset_normalizer/py.typed +0 -0
  124. venv/Lib/site-packages/charset_normalizer/utils.py +422 -0
  125. venv/Lib/site-packages/charset_normalizer/version.py +8 -0
  126. venv/Lib/site-packages/colorama/__init__.py +7 -0
  127. venv/Lib/site-packages/colorama/ansi.py +102 -0
  128. venv/Lib/site-packages/colorama/ansitowin32.py +277 -0
  129. venv/Lib/site-packages/colorama/initialise.py +121 -0
  130. venv/Lib/site-packages/colorama/tests/__init__.py +1 -0
  131. venv/Lib/site-packages/colorama/tests/ansi_test.py +76 -0
  132. venv/Lib/site-packages/colorama/tests/ansitowin32_test.py +294 -0
  133. venv/Lib/site-packages/colorama/tests/initialise_test.py +189 -0
  134. venv/Lib/site-packages/colorama/tests/isatty_test.py +57 -0
  135. venv/Lib/site-packages/colorama/tests/utils.py +49 -0
  136. venv/Lib/site-packages/colorama/tests/winterm_test.py +131 -0
  137. venv/Lib/site-packages/colorama/win32.py +180 -0
  138. venv/Lib/site-packages/colorama/winterm.py +195 -0
  139. venv/Lib/site-packages/docutils/__init__.py +341 -0
  140. venv/Lib/site-packages/docutils/__main__.py +103 -0
  141. venv/Lib/site-packages/docutils/core.py +855 -0
  142. venv/Lib/site-packages/docutils/examples.py +123 -0
  143. venv/Lib/site-packages/docutils/frontend.py +1178 -0
  144. venv/Lib/site-packages/docutils/io.py +716 -0
  145. venv/Lib/site-packages/docutils/languages/__init__.py +117 -0
  146. venv/Lib/site-packages/docutils/languages/af.py +58 -0
  147. venv/Lib/site-packages/docutils/languages/ar.py +60 -0
  148. venv/Lib/site-packages/docutils/languages/ca.py +65 -0
  149. venv/Lib/site-packages/docutils/languages/cs.py +60 -0
  150. venv/Lib/site-packages/docutils/languages/da.py +61 -0
  151. venv/Lib/site-packages/docutils/languages/de.py +58 -0
  152. venv/Lib/site-packages/docutils/languages/en.py +60 -0
  153. venv/Lib/site-packages/docutils/languages/eo.py +61 -0
  154. venv/Lib/site-packages/docutils/languages/es.py +58 -0
  155. venv/Lib/site-packages/docutils/languages/fa.py +60 -0
  156. venv/Lib/site-packages/docutils/languages/fi.py +60 -0
  157. venv/Lib/site-packages/docutils/languages/fr.py +58 -0
  158. venv/Lib/site-packages/docutils/languages/gl.py +62 -0
  159. venv/Lib/site-packages/docutils/languages/he.py +62 -0
  160. venv/Lib/site-packages/docutils/languages/it.py +58 -0
  161. venv/Lib/site-packages/docutils/languages/ja.py +60 -0
  162. venv/Lib/site-packages/docutils/languages/ka.py +58 -0
  163. venv/Lib/site-packages/docutils/languages/ko.py +60 -0
  164. venv/Lib/site-packages/docutils/languages/lt.py +60 -0
  165. venv/Lib/site-packages/docutils/languages/lv.py +59 -0
  166. venv/Lib/site-packages/docutils/languages/nl.py +60 -0
  167. venv/Lib/site-packages/docutils/languages/pl.py +60 -0
  168. venv/Lib/site-packages/docutils/languages/pt_br.py +60 -0
  169. venv/Lib/site-packages/docutils/languages/ru.py +58 -0
  170. venv/Lib/site-packages/docutils/languages/sk.py +58 -0
  171. venv/Lib/site-packages/docutils/languages/sv.py +59 -0
  172. venv/Lib/site-packages/docutils/languages/uk.py +58 -0
  173. venv/Lib/site-packages/docutils/languages/zh_cn.py +62 -0
  174. venv/Lib/site-packages/docutils/languages/zh_tw.py +61 -0
  175. venv/Lib/site-packages/docutils/nodes.py +3341 -0
  176. venv/Lib/site-packages/docutils/parsers/__init__.py +115 -0
  177. venv/Lib/site-packages/docutils/parsers/commonmark_wrapper.py +56 -0
  178. venv/Lib/site-packages/docutils/parsers/docutils_xml.py +194 -0
  179. venv/Lib/site-packages/docutils/parsers/null.py +24 -0
  180. venv/Lib/site-packages/docutils/parsers/recommonmark_wrapper.py +174 -0
  181. venv/Lib/site-packages/docutils/parsers/rst/__init__.py +414 -0
  182. venv/Lib/site-packages/docutils/parsers/rst/directives/__init__.py +480 -0
  183. venv/Lib/site-packages/docutils/parsers/rst/directives/admonitions.py +101 -0
  184. venv/Lib/site-packages/docutils/parsers/rst/directives/body.py +329 -0
  185. venv/Lib/site-packages/docutils/parsers/rst/directives/html.py +21 -0
  186. venv/Lib/site-packages/docutils/parsers/rst/directives/images.py +186 -0
  187. venv/Lib/site-packages/docutils/parsers/rst/directives/misc.py +690 -0
  188. venv/Lib/site-packages/docutils/parsers/rst/directives/parts.py +129 -0
  189. venv/Lib/site-packages/docutils/parsers/rst/directives/references.py +28 -0
  190. venv/Lib/site-packages/docutils/parsers/rst/directives/tables.py +523 -0
  191. venv/Lib/site-packages/docutils/parsers/rst/languages/__init__.py +63 -0
  192. venv/Lib/site-packages/docutils/parsers/rst/languages/af.py +107 -0
  193. venv/Lib/site-packages/docutils/parsers/rst/languages/ar.py +99 -0
  194. venv/Lib/site-packages/docutils/parsers/rst/languages/ca.py +130 -0
  195. venv/Lib/site-packages/docutils/parsers/rst/languages/cs.py +110 -0
  196. venv/Lib/site-packages/docutils/parsers/rst/languages/da.py +113 -0
  197. venv/Lib/site-packages/docutils/parsers/rst/languages/de.py +106 -0
  198. venv/Lib/site-packages/docutils/parsers/rst/languages/en.py +115 -0
  199. venv/Lib/site-packages/docutils/parsers/rst/languages/eo.py +118 -0
  200. venv/Lib/site-packages/docutils/parsers/rst/languages/es.py +121 -0
  201. venv/Lib/site-packages/docutils/parsers/rst/languages/fa.py +102 -0
  202. venv/Lib/site-packages/docutils/parsers/rst/languages/fi.py +98 -0
  203. venv/Lib/site-packages/docutils/parsers/rst/languages/fr.py +107 -0
  204. venv/Lib/site-packages/docutils/parsers/rst/languages/gl.py +106 -0
  205. venv/Lib/site-packages/docutils/parsers/rst/languages/he.py +110 -0
  206. venv/Lib/site-packages/docutils/parsers/rst/languages/it.py +98 -0
  207. venv/Lib/site-packages/docutils/parsers/rst/languages/ja.py +119 -0
  208. venv/Lib/site-packages/docutils/parsers/rst/languages/ka.py +89 -0
  209. venv/Lib/site-packages/docutils/parsers/rst/languages/ko.py +111 -0
  210. venv/Lib/site-packages/docutils/parsers/rst/languages/lt.py +109 -0
  211. venv/Lib/site-packages/docutils/parsers/rst/languages/lv.py +108 -0
  212. venv/Lib/site-packages/docutils/parsers/rst/languages/nl.py +113 -0
  213. venv/Lib/site-packages/docutils/parsers/rst/languages/pl.py +100 -0
  214. venv/Lib/site-packages/docutils/parsers/rst/languages/pt_br.py +109 -0
  215. venv/Lib/site-packages/docutils/parsers/rst/languages/ru.py +90 -0
  216. venv/Lib/site-packages/docutils/parsers/rst/languages/sk.py +96 -0
  217. venv/Lib/site-packages/docutils/parsers/rst/languages/sv.py +96 -0
  218. venv/Lib/site-packages/docutils/parsers/rst/languages/uk.py +91 -0
  219. venv/Lib/site-packages/docutils/parsers/rst/languages/zh_cn.py +104 -0
  220. venv/Lib/site-packages/docutils/parsers/rst/languages/zh_tw.py +109 -0
  221. venv/Lib/site-packages/docutils/parsers/rst/roles.py +450 -0
  222. venv/Lib/site-packages/docutils/parsers/rst/states.py +3266 -0
  223. venv/Lib/site-packages/docutils/parsers/rst/tableparser.py +543 -0
  224. venv/Lib/site-packages/docutils/readers/__init__.py +135 -0
  225. venv/Lib/site-packages/docutils/readers/doctree.py +50 -0
  226. venv/Lib/site-packages/docutils/readers/pep.py +55 -0
  227. venv/Lib/site-packages/docutils/readers/standalone.py +65 -0
  228. venv/Lib/site-packages/docutils/statemachine.py +1534 -0
  229. venv/Lib/site-packages/docutils/transforms/__init__.py +196 -0
  230. venv/Lib/site-packages/docutils/transforms/components.py +56 -0
  231. venv/Lib/site-packages/docutils/transforms/frontmatter.py +548 -0
  232. venv/Lib/site-packages/docutils/transforms/misc.py +143 -0
  233. venv/Lib/site-packages/docutils/transforms/parts.py +175 -0
  234. venv/Lib/site-packages/docutils/transforms/peps.py +315 -0
  235. venv/Lib/site-packages/docutils/transforms/references.py +990 -0
  236. venv/Lib/site-packages/docutils/transforms/universal.py +364 -0
  237. venv/Lib/site-packages/docutils/transforms/writer_aux.py +57 -0
  238. venv/Lib/site-packages/docutils/utils/__init__.py +850 -0
  239. venv/Lib/site-packages/docutils/utils/_roman_numerals.py +264 -0
  240. venv/Lib/site-packages/docutils/utils/_typing.py +39 -0
  241. venv/Lib/site-packages/docutils/utils/code_analyzer.py +140 -0
  242. venv/Lib/site-packages/docutils/utils/math/__init__.py +77 -0
  243. venv/Lib/site-packages/docutils/utils/math/latex2mathml.py +1252 -0
  244. venv/Lib/site-packages/docutils/utils/math/math2html.py +3166 -0
  245. venv/Lib/site-packages/docutils/utils/math/mathalphabet2unichar.py +892 -0
  246. venv/Lib/site-packages/docutils/utils/math/mathml_elements.py +482 -0
  247. venv/Lib/site-packages/docutils/utils/math/tex2mathml_extern.py +263 -0
  248. venv/Lib/site-packages/docutils/utils/math/tex2unichar.py +730 -0
  249. venv/Lib/site-packages/docutils/utils/math/unichar2tex.py +808 -0
  250. venv/Lib/site-packages/docutils/utils/punctuation_chars.py +123 -0
  251. venv/Lib/site-packages/docutils/utils/smartquotes.py +1006 -0
  252. venv/Lib/site-packages/docutils/utils/urischemes.py +138 -0
  253. venv/Lib/site-packages/docutils/writers/__init__.py +277 -0
  254. venv/Lib/site-packages/docutils/writers/_html_base.py +1895 -0
  255. venv/Lib/site-packages/docutils/writers/docutils_xml.py +191 -0
  256. venv/Lib/site-packages/docutils/writers/html4css1/__init__.py +964 -0
  257. venv/Lib/site-packages/docutils/writers/html5_polyglot/__init__.py +398 -0
  258. venv/Lib/site-packages/docutils/writers/latex2e/__init__.py +3417 -0
  259. venv/Lib/site-packages/docutils/writers/manpage.py +1353 -0
  260. venv/Lib/site-packages/docutils/writers/null.py +28 -0
  261. venv/Lib/site-packages/docutils/writers/odf_odt/__init__.py +3461 -0
  262. venv/Lib/site-packages/docutils/writers/odf_odt/prepstyles.py +80 -0
  263. venv/Lib/site-packages/docutils/writers/odf_odt/pygmentsformatter.py +106 -0
  264. venv/Lib/site-packages/docutils/writers/pep_html/__init__.py +102 -0
  265. venv/Lib/site-packages/docutils/writers/pseudoxml.py +41 -0
  266. venv/Lib/site-packages/docutils/writers/s5_html/__init__.py +354 -0
  267. venv/Lib/site-packages/docutils/writers/xetex/__init__.py +168 -0
  268. venv/Lib/site-packages/id/__init__.py +114 -0
  269. venv/Lib/site-packages/id/__main__.py +88 -0
  270. venv/Lib/site-packages/id/_internal/oidc/__init__.py +13 -0
  271. venv/Lib/site-packages/id/_internal/oidc/ambient.py +363 -0
  272. venv/Lib/site-packages/id/py.typed +4 -0
  273. venv/Lib/site-packages/idna/__init__.py +45 -0
  274. venv/Lib/site-packages/idna/codec.py +122 -0
  275. venv/Lib/site-packages/idna/compat.py +15 -0
  276. venv/Lib/site-packages/idna/core.py +440 -0
  277. venv/Lib/site-packages/idna/idnadata.py +4367 -0
  278. venv/Lib/site-packages/idna/intranges.py +57 -0
  279. venv/Lib/site-packages/idna/package_data.py +1 -0
  280. venv/Lib/site-packages/idna/py.typed +0 -0
  281. venv/Lib/site-packages/idna/uts46data.py +8384 -0
  282. venv/Lib/site-packages/iniconfig/__init__.py +249 -0
  283. venv/Lib/site-packages/iniconfig/_parse.py +163 -0
  284. venv/Lib/site-packages/iniconfig/_version.py +34 -0
  285. venv/Lib/site-packages/iniconfig/exceptions.py +16 -0
  286. venv/Lib/site-packages/iniconfig/py.typed +0 -0
  287. venv/Lib/site-packages/jaraco/classes/__init__.py +0 -0
  288. venv/Lib/site-packages/jaraco/classes/ancestry.py +76 -0
  289. venv/Lib/site-packages/jaraco/classes/meta.py +85 -0
  290. venv/Lib/site-packages/jaraco/classes/properties.py +241 -0
  291. venv/Lib/site-packages/jaraco/classes/py.typed +0 -0
  292. venv/Lib/site-packages/jaraco/context/__init__.py +422 -0
  293. venv/Lib/site-packages/jaraco/context/py.typed +0 -0
  294. venv/Lib/site-packages/jaraco/functools/__init__.py +722 -0
  295. venv/Lib/site-packages/jaraco/functools/__init__.pyi +123 -0
  296. venv/Lib/site-packages/jaraco/functools/py.typed +0 -0
  297. venv/Lib/site-packages/keyring/__init__.py +17 -0
  298. venv/Lib/site-packages/keyring/__main__.py +4 -0
  299. venv/Lib/site-packages/keyring/backend.py +300 -0
  300. venv/Lib/site-packages/keyring/backends/SecretService.py +120 -0
  301. venv/Lib/site-packages/keyring/backends/Windows.py +168 -0
  302. venv/Lib/site-packages/keyring/backends/__init__.py +0 -0
  303. venv/Lib/site-packages/keyring/backends/chainer.py +71 -0
  304. venv/Lib/site-packages/keyring/backends/fail.py +30 -0
  305. venv/Lib/site-packages/keyring/backends/kwallet.py +164 -0
  306. venv/Lib/site-packages/keyring/backends/libsecret.py +155 -0
  307. venv/Lib/site-packages/keyring/backends/macOS/__init__.py +85 -0
  308. venv/Lib/site-packages/keyring/backends/macOS/api.py +184 -0
  309. venv/Lib/site-packages/keyring/backends/null.py +20 -0
  310. venv/Lib/site-packages/keyring/cli.py +220 -0
  311. venv/Lib/site-packages/keyring/compat/__init__.py +7 -0
  312. venv/Lib/site-packages/keyring/compat/properties.py +169 -0
  313. venv/Lib/site-packages/keyring/compat/py312.py +9 -0
  314. venv/Lib/site-packages/keyring/completion.py +55 -0
  315. venv/Lib/site-packages/keyring/core.py +202 -0
  316. venv/Lib/site-packages/keyring/credentials.py +85 -0
  317. venv/Lib/site-packages/keyring/devpi_client.py +29 -0
  318. venv/Lib/site-packages/keyring/errors.py +67 -0
  319. venv/Lib/site-packages/keyring/http.py +39 -0
  320. venv/Lib/site-packages/keyring/py.typed +0 -0
  321. venv/Lib/site-packages/keyring/testing/__init__.py +0 -0
  322. venv/Lib/site-packages/keyring/testing/backend.py +200 -0
  323. venv/Lib/site-packages/keyring/testing/util.py +68 -0
  324. venv/Lib/site-packages/keyring/util/__init__.py +11 -0
  325. venv/Lib/site-packages/keyring/util/platform_.py +40 -0
  326. venv/Lib/site-packages/markdown_it/__init__.py +6 -0
  327. venv/Lib/site-packages/markdown_it/_compat.py +1 -0
  328. venv/Lib/site-packages/markdown_it/_punycode.py +67 -0
  329. venv/Lib/site-packages/markdown_it/cli/__init__.py +0 -0
  330. venv/Lib/site-packages/markdown_it/cli/parse.py +127 -0
  331. venv/Lib/site-packages/markdown_it/common/__init__.py +0 -0
  332. venv/Lib/site-packages/markdown_it/common/entities.py +5 -0
  333. venv/Lib/site-packages/markdown_it/common/html_blocks.py +69 -0
  334. venv/Lib/site-packages/markdown_it/common/html_re.py +39 -0
  335. venv/Lib/site-packages/markdown_it/common/normalize_url.py +81 -0
  336. venv/Lib/site-packages/markdown_it/common/utils.py +313 -0
  337. venv/Lib/site-packages/markdown_it/helpers/__init__.py +6 -0
  338. venv/Lib/site-packages/markdown_it/helpers/parse_link_destination.py +83 -0
  339. venv/Lib/site-packages/markdown_it/helpers/parse_link_label.py +44 -0
  340. venv/Lib/site-packages/markdown_it/helpers/parse_link_title.py +75 -0
  341. venv/Lib/site-packages/markdown_it/main.py +351 -0
  342. venv/Lib/site-packages/markdown_it/parser_block.py +113 -0
  343. venv/Lib/site-packages/markdown_it/parser_core.py +46 -0
  344. venv/Lib/site-packages/markdown_it/parser_inline.py +215 -0
  345. venv/Lib/site-packages/markdown_it/presets/__init__.py +48 -0
  346. venv/Lib/site-packages/markdown_it/presets/commonmark.py +75 -0
  347. venv/Lib/site-packages/markdown_it/presets/default.py +36 -0
  348. venv/Lib/site-packages/markdown_it/presets/zero.py +44 -0
  349. venv/Lib/site-packages/markdown_it/py.typed +1 -0
  350. venv/Lib/site-packages/markdown_it/renderer.py +356 -0
  351. venv/Lib/site-packages/markdown_it/ruler.py +275 -0
  352. venv/Lib/site-packages/markdown_it/rules_block/__init__.py +28 -0
  353. venv/Lib/site-packages/markdown_it/rules_block/blockquote.py +368 -0
  354. venv/Lib/site-packages/markdown_it/rules_block/code.py +36 -0
  355. venv/Lib/site-packages/markdown_it/rules_block/fence.py +146 -0
  356. venv/Lib/site-packages/markdown_it/rules_block/heading.py +69 -0
  357. venv/Lib/site-packages/markdown_it/rules_block/hr.py +56 -0
  358. venv/Lib/site-packages/markdown_it/rules_block/html_block.py +90 -0
  359. venv/Lib/site-packages/markdown_it/rules_block/lheading.py +86 -0
  360. venv/Lib/site-packages/markdown_it/rules_block/list.py +408 -0
  361. venv/Lib/site-packages/markdown_it/rules_block/paragraph.py +66 -0
  362. venv/Lib/site-packages/markdown_it/rules_block/reference.py +235 -0
  363. venv/Lib/site-packages/markdown_it/rules_block/state_block.py +261 -0
  364. venv/Lib/site-packages/markdown_it/rules_block/table.py +250 -0
  365. venv/Lib/site-packages/markdown_it/rules_core/__init__.py +19 -0
  366. venv/Lib/site-packages/markdown_it/rules_core/block.py +13 -0
  367. venv/Lib/site-packages/markdown_it/rules_core/inline.py +10 -0
  368. venv/Lib/site-packages/markdown_it/rules_core/linkify.py +149 -0
  369. venv/Lib/site-packages/markdown_it/rules_core/normalize.py +19 -0
  370. venv/Lib/site-packages/markdown_it/rules_core/replacements.py +127 -0
  371. venv/Lib/site-packages/markdown_it/rules_core/smartquotes.py +202 -0
  372. venv/Lib/site-packages/markdown_it/rules_core/state_core.py +25 -0
  373. venv/Lib/site-packages/markdown_it/rules_core/text_join.py +53 -0
  374. venv/Lib/site-packages/markdown_it/rules_inline/__init__.py +31 -0
  375. venv/Lib/site-packages/markdown_it/rules_inline/autolink.py +77 -0
  376. venv/Lib/site-packages/markdown_it/rules_inline/backticks.py +72 -0
  377. venv/Lib/site-packages/markdown_it/rules_inline/balance_pairs.py +138 -0
  378. venv/Lib/site-packages/markdown_it/rules_inline/emphasis.py +102 -0
  379. venv/Lib/site-packages/markdown_it/rules_inline/entity.py +53 -0
  380. venv/Lib/site-packages/markdown_it/rules_inline/escape.py +93 -0
  381. venv/Lib/site-packages/markdown_it/rules_inline/fragments_join.py +54 -0
  382. venv/Lib/site-packages/markdown_it/rules_inline/html_inline.py +43 -0
  383. venv/Lib/site-packages/markdown_it/rules_inline/image.py +148 -0
  384. venv/Lib/site-packages/markdown_it/rules_inline/link.py +149 -0
  385. venv/Lib/site-packages/markdown_it/rules_inline/linkify.py +62 -0
  386. venv/Lib/site-packages/markdown_it/rules_inline/newline.py +44 -0
  387. venv/Lib/site-packages/markdown_it/rules_inline/state_inline.py +167 -0
  388. venv/Lib/site-packages/markdown_it/rules_inline/strikethrough.py +173 -0
  389. venv/Lib/site-packages/markdown_it/rules_inline/text.py +23 -0
  390. venv/Lib/site-packages/markdown_it/token.py +178 -0
  391. venv/Lib/site-packages/markdown_it/tree.py +333 -0
  392. venv/Lib/site-packages/markdown_it/utils.py +194 -0
  393. venv/Lib/site-packages/mdurl/__init__.py +18 -0
  394. venv/Lib/site-packages/mdurl/_decode.py +104 -0
  395. venv/Lib/site-packages/mdurl/_encode.py +85 -0
  396. venv/Lib/site-packages/mdurl/_format.py +27 -0
  397. venv/Lib/site-packages/mdurl/_parse.py +304 -0
  398. venv/Lib/site-packages/mdurl/_url.py +14 -0
  399. venv/Lib/site-packages/mdurl/py.typed +1 -0
  400. venv/Lib/site-packages/more_itertools/__init__.py +6 -0
  401. venv/Lib/site-packages/more_itertools/__init__.pyi +2 -0
  402. venv/Lib/site-packages/more_itertools/more.py +5457 -0
  403. venv/Lib/site-packages/more_itertools/more.pyi +963 -0
  404. venv/Lib/site-packages/more_itertools/py.typed +0 -0
  405. venv/Lib/site-packages/more_itertools/recipes.py +1599 -0
  406. venv/Lib/site-packages/more_itertools/recipes.pyi +234 -0
  407. venv/Lib/site-packages/nh3/__init__.py +5 -0
  408. venv/Lib/site-packages/nh3/__init__.pyi +42 -0
  409. venv/Lib/site-packages/nh3/py.typed +0 -0
  410. venv/Lib/site-packages/packaging/__init__.py +15 -0
  411. venv/Lib/site-packages/packaging/_elffile.py +108 -0
  412. venv/Lib/site-packages/packaging/_manylinux.py +262 -0
  413. venv/Lib/site-packages/packaging/_musllinux.py +85 -0
  414. venv/Lib/site-packages/packaging/_parser.py +393 -0
  415. venv/Lib/site-packages/packaging/_structures.py +33 -0
  416. venv/Lib/site-packages/packaging/_tokenizer.py +193 -0
  417. venv/Lib/site-packages/packaging/dependency_groups.py +302 -0
  418. venv/Lib/site-packages/packaging/direct_url.py +325 -0
  419. venv/Lib/site-packages/packaging/errors.py +94 -0
  420. venv/Lib/site-packages/packaging/licenses/__init__.py +186 -0
  421. venv/Lib/site-packages/packaging/licenses/_spdx.py +799 -0
  422. venv/Lib/site-packages/packaging/markers.py +492 -0
  423. venv/Lib/site-packages/packaging/metadata.py +964 -0
  424. venv/Lib/site-packages/packaging/py.typed +0 -0
  425. venv/Lib/site-packages/packaging/pylock.py +905 -0
  426. venv/Lib/site-packages/packaging/requirements.py +129 -0
  427. venv/Lib/site-packages/packaging/specifiers.py +1943 -0
  428. venv/Lib/site-packages/packaging/tags.py +932 -0
  429. venv/Lib/site-packages/packaging/utils.py +296 -0
  430. venv/Lib/site-packages/packaging/version.py +1231 -0
  431. venv/Lib/site-packages/pip/__init__.py +13 -0
  432. venv/Lib/site-packages/pip/__main__.py +24 -0
  433. venv/Lib/site-packages/pip/__pip-runner__.py +50 -0
  434. venv/Lib/site-packages/pip/_internal/__init__.py +18 -0
  435. venv/Lib/site-packages/pip/_internal/build_env.py +606 -0
  436. venv/Lib/site-packages/pip/_internal/cache.py +291 -0
  437. venv/Lib/site-packages/pip/_internal/cli/__init__.py +3 -0
  438. venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +184 -0
  439. venv/Lib/site-packages/pip/_internal/cli/base_command.py +255 -0
  440. venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +1267 -0
  441. venv/Lib/site-packages/pip/_internal/cli/command_context.py +28 -0
  442. venv/Lib/site-packages/pip/_internal/cli/index_command.py +195 -0
  443. venv/Lib/site-packages/pip/_internal/cli/main.py +85 -0
  444. venv/Lib/site-packages/pip/_internal/cli/main_parser.py +136 -0
  445. venv/Lib/site-packages/pip/_internal/cli/parser.py +358 -0
  446. venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +153 -0
  447. venv/Lib/site-packages/pip/_internal/cli/req_command.py +447 -0
  448. venv/Lib/site-packages/pip/_internal/cli/spinners.py +235 -0
  449. venv/Lib/site-packages/pip/_internal/cli/status_codes.py +6 -0
  450. venv/Lib/site-packages/pip/_internal/commands/__init__.py +139 -0
  451. venv/Lib/site-packages/pip/_internal/commands/cache.py +255 -0
  452. venv/Lib/site-packages/pip/_internal/commands/check.py +66 -0
  453. venv/Lib/site-packages/pip/_internal/commands/completion.py +136 -0
  454. venv/Lib/site-packages/pip/_internal/commands/configuration.py +288 -0
  455. venv/Lib/site-packages/pip/_internal/commands/debug.py +203 -0
  456. venv/Lib/site-packages/pip/_internal/commands/download.py +146 -0
  457. venv/Lib/site-packages/pip/_internal/commands/freeze.py +107 -0
  458. venv/Lib/site-packages/pip/_internal/commands/hash.py +58 -0
  459. venv/Lib/site-packages/pip/_internal/commands/help.py +40 -0
  460. venv/Lib/site-packages/pip/_internal/commands/index.py +166 -0
  461. venv/Lib/site-packages/pip/_internal/commands/inspect.py +92 -0
  462. venv/Lib/site-packages/pip/_internal/commands/install.py +810 -0
  463. venv/Lib/site-packages/pip/_internal/commands/list.py +398 -0
  464. venv/Lib/site-packages/pip/_internal/commands/lock.py +175 -0
  465. venv/Lib/site-packages/pip/_internal/commands/search.py +178 -0
  466. venv/Lib/site-packages/pip/_internal/commands/show.py +231 -0
  467. venv/Lib/site-packages/pip/_internal/commands/uninstall.py +113 -0
  468. venv/Lib/site-packages/pip/_internal/commands/wheel.py +171 -0
  469. venv/Lib/site-packages/pip/_internal/configuration.py +396 -0
  470. venv/Lib/site-packages/pip/_internal/distributions/__init__.py +21 -0
  471. venv/Lib/site-packages/pip/_internal/distributions/base.py +55 -0
  472. venv/Lib/site-packages/pip/_internal/distributions/installed.py +33 -0
  473. venv/Lib/site-packages/pip/_internal/distributions/sdist.py +164 -0
  474. venv/Lib/site-packages/pip/_internal/distributions/wheel.py +44 -0
  475. venv/Lib/site-packages/pip/_internal/exceptions.py +971 -0
  476. venv/Lib/site-packages/pip/_internal/index/__init__.py +1 -0
  477. venv/Lib/site-packages/pip/_internal/index/collector.py +488 -0
  478. venv/Lib/site-packages/pip/_internal/index/package_finder.py +1125 -0
  479. venv/Lib/site-packages/pip/_internal/index/sources.py +287 -0
  480. venv/Lib/site-packages/pip/_internal/locations/__init__.py +440 -0
  481. venv/Lib/site-packages/pip/_internal/locations/_distutils.py +173 -0
  482. venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +218 -0
  483. venv/Lib/site-packages/pip/_internal/locations/base.py +82 -0
  484. venv/Lib/site-packages/pip/_internal/main.py +12 -0
  485. venv/Lib/site-packages/pip/_internal/metadata/__init__.py +169 -0
  486. venv/Lib/site-packages/pip/_internal/metadata/_json.py +87 -0
  487. venv/Lib/site-packages/pip/_internal/metadata/base.py +685 -0
  488. venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +6 -0
  489. venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +87 -0
  490. venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +229 -0
  491. venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +143 -0
  492. venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +298 -0
  493. venv/Lib/site-packages/pip/_internal/models/__init__.py +1 -0
  494. venv/Lib/site-packages/pip/_internal/models/candidate.py +25 -0
  495. venv/Lib/site-packages/pip/_internal/models/direct_url.py +227 -0
  496. venv/Lib/site-packages/pip/_internal/models/format_control.py +78 -0
  497. venv/Lib/site-packages/pip/_internal/models/index.py +28 -0
  498. venv/Lib/site-packages/pip/_internal/models/installation_report.py +57 -0
  499. venv/Lib/site-packages/pip/_internal/models/link.py +617 -0
  500. venv/Lib/site-packages/pip/_internal/models/release_control.py +92 -0
  501. venv/Lib/site-packages/pip/_internal/models/scheme.py +25 -0
  502. venv/Lib/site-packages/pip/_internal/models/search_scope.py +126 -0
  503. venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +56 -0
  504. venv/Lib/site-packages/pip/_internal/models/target_python.py +122 -0
  505. venv/Lib/site-packages/pip/_internal/models/wheel.py +80 -0
  506. venv/Lib/site-packages/pip/_internal/network/__init__.py +1 -0
  507. venv/Lib/site-packages/pip/_internal/network/auth.py +568 -0
  508. venv/Lib/site-packages/pip/_internal/network/cache.py +128 -0
  509. venv/Lib/site-packages/pip/_internal/network/download.py +341 -0
  510. venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +215 -0
  511. venv/Lib/site-packages/pip/_internal/network/session.py +532 -0
  512. venv/Lib/site-packages/pip/_internal/network/utils.py +98 -0
  513. venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +61 -0
  514. venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
  515. venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  516. venv/Lib/site-packages/pip/_internal/operations/build/build_tracker.py +140 -0
  517. venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +38 -0
  518. venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py +41 -0
  519. venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +38 -0
  520. venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py +47 -0
  521. venv/Lib/site-packages/pip/_internal/operations/check.py +175 -0
  522. venv/Lib/site-packages/pip/_internal/operations/freeze.py +259 -0
  523. venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +1 -0
  524. venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +745 -0
  525. venv/Lib/site-packages/pip/_internal/operations/prepare.py +747 -0
  526. venv/Lib/site-packages/pip/_internal/pyproject.py +123 -0
  527. venv/Lib/site-packages/pip/_internal/req/__init__.py +103 -0
  528. venv/Lib/site-packages/pip/_internal/req/constructors.py +568 -0
  529. venv/Lib/site-packages/pip/_internal/req/pep723.py +41 -0
  530. venv/Lib/site-packages/pip/_internal/req/req_dependency_group.py +75 -0
  531. venv/Lib/site-packages/pip/_internal/req/req_file.py +631 -0
  532. venv/Lib/site-packages/pip/_internal/req/req_install.py +828 -0
  533. venv/Lib/site-packages/pip/_internal/req/req_set.py +81 -0
  534. venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +639 -0
  535. venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
  536. venv/Lib/site-packages/pip/_internal/resolution/base.py +20 -0
  537. venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  538. venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +598 -0
  539. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  540. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +142 -0
  541. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +591 -0
  542. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +856 -0
  543. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +166 -0
  544. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +285 -0
  545. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +98 -0
  546. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +251 -0
  547. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +332 -0
  548. venv/Lib/site-packages/pip/_internal/self_outdated_check.py +255 -0
  549. venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
  550. venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +109 -0
  551. venv/Lib/site-packages/pip/_internal/utils/_log.py +38 -0
  552. venv/Lib/site-packages/pip/_internal/utils/appdirs.py +52 -0
  553. venv/Lib/site-packages/pip/_internal/utils/compat.py +85 -0
  554. venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +201 -0
  555. venv/Lib/site-packages/pip/_internal/utils/datetime.py +28 -0
  556. venv/Lib/site-packages/pip/_internal/utils/deprecation.py +126 -0
  557. venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +87 -0
  558. venv/Lib/site-packages/pip/_internal/utils/egg_link.py +81 -0
  559. venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +88 -0
  560. venv/Lib/site-packages/pip/_internal/utils/filesystem.py +203 -0
  561. venv/Lib/site-packages/pip/_internal/utils/filetypes.py +24 -0
  562. venv/Lib/site-packages/pip/_internal/utils/glibc.py +102 -0
  563. venv/Lib/site-packages/pip/_internal/utils/hashes.py +150 -0
  564. venv/Lib/site-packages/pip/_internal/utils/logging.py +396 -0
  565. venv/Lib/site-packages/pip/_internal/utils/misc.py +771 -0
  566. venv/Lib/site-packages/pip/_internal/utils/packaging.py +44 -0
  567. venv/Lib/site-packages/pip/_internal/utils/pylock.py +116 -0
  568. venv/Lib/site-packages/pip/_internal/utils/retry.py +45 -0
  569. venv/Lib/site-packages/pip/_internal/utils/subprocess.py +248 -0
  570. venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +294 -0
  571. venv/Lib/site-packages/pip/_internal/utils/unpacking.py +362 -0
  572. venv/Lib/site-packages/pip/_internal/utils/urls.py +55 -0
  573. venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +105 -0
  574. venv/Lib/site-packages/pip/_internal/utils/wheel.py +132 -0
  575. venv/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
  576. venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +130 -0
  577. venv/Lib/site-packages/pip/_internal/vcs/git.py +571 -0
  578. venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +186 -0
  579. venv/Lib/site-packages/pip/_internal/vcs/subversion.py +335 -0
  580. venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +695 -0
  581. venv/Lib/site-packages/pip/_internal/wheel_builder.py +261 -0
  582. venv/Lib/site-packages/pip/_vendor/__init__.py +117 -0
  583. venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +32 -0
  584. venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +70 -0
  585. venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +167 -0
  586. venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +75 -0
  587. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +8 -0
  588. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +145 -0
  589. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +48 -0
  590. venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +511 -0
  591. venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +121 -0
  592. venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +157 -0
  593. venv/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
  594. venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +146 -0
  595. venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +43 -0
  596. venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +4 -0
  597. venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
  598. venv/Lib/site-packages/pip/_vendor/certifi/core.py +83 -0
  599. venv/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
  600. venv/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py +13 -0
  601. venv/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py +65 -0
  602. venv/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py +209 -0
  603. venv/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py +59 -0
  604. venv/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py +62 -0
  605. venv/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py +9 -0
  606. venv/Lib/site-packages/pip/_vendor/dependency_groups/py.typed +0 -0
  607. venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +33 -0
  608. venv/Lib/site-packages/pip/_vendor/distlib/compat.py +1137 -0
  609. venv/Lib/site-packages/pip/_vendor/distlib/resources.py +358 -0
  610. venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +447 -0
  611. venv/Lib/site-packages/pip/_vendor/distlib/util.py +1984 -0
  612. venv/Lib/site-packages/pip/_vendor/distro/__init__.py +54 -0
  613. venv/Lib/site-packages/pip/_vendor/distro/__main__.py +4 -0
  614. venv/Lib/site-packages/pip/_vendor/distro/distro.py +1403 -0
  615. venv/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
  616. venv/Lib/site-packages/pip/_vendor/idna/__init__.py +45 -0
  617. venv/Lib/site-packages/pip/_vendor/idna/codec.py +122 -0
  618. venv/Lib/site-packages/pip/_vendor/idna/compat.py +15 -0
  619. venv/Lib/site-packages/pip/_vendor/idna/core.py +437 -0
  620. venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +4309 -0
  621. venv/Lib/site-packages/pip/_vendor/idna/intranges.py +57 -0
  622. venv/Lib/site-packages/pip/_vendor/idna/package_data.py +1 -0
  623. venv/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
  624. venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +8841 -0
  625. venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +55 -0
  626. venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
  627. venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +170 -0
  628. venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +929 -0
  629. venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +15 -0
  630. venv/Lib/site-packages/pip/_vendor/packaging/_elffile.py +108 -0
  631. venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +262 -0
  632. venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +85 -0
  633. venv/Lib/site-packages/pip/_vendor/packaging/_parser.py +365 -0
  634. venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +69 -0
  635. venv/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py +193 -0
  636. venv/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py +147 -0
  637. venv/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py +799 -0
  638. venv/Lib/site-packages/pip/_vendor/packaging/markers.py +388 -0
  639. venv/Lib/site-packages/pip/_vendor/packaging/metadata.py +978 -0
  640. venv/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
  641. venv/Lib/site-packages/pip/_vendor/packaging/pylock.py +635 -0
  642. venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +86 -0
  643. venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +1068 -0
  644. venv/Lib/site-packages/pip/_vendor/packaging/tags.py +651 -0
  645. venv/Lib/site-packages/pip/_vendor/packaging/utils.py +158 -0
  646. venv/Lib/site-packages/pip/_vendor/packaging/version.py +792 -0
  647. venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3676 -0
  648. venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +631 -0
  649. venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +55 -0
  650. venv/Lib/site-packages/pip/_vendor/platformdirs/android.py +249 -0
  651. venv/Lib/site-packages/pip/_vendor/platformdirs/api.py +299 -0
  652. venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py +146 -0
  653. venv/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
  654. venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py +272 -0
  655. venv/Lib/site-packages/pip/_vendor/platformdirs/version.py +34 -0
  656. venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py +278 -0
  657. venv/Lib/site-packages/pip/_vendor/pygments/__init__.py +82 -0
  658. venv/Lib/site-packages/pip/_vendor/pygments/__main__.py +17 -0
  659. venv/Lib/site-packages/pip/_vendor/pygments/console.py +70 -0
  660. venv/Lib/site-packages/pip/_vendor/pygments/filter.py +70 -0
  661. venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +940 -0
  662. venv/Lib/site-packages/pip/_vendor/pygments/formatter.py +129 -0
  663. venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +157 -0
  664. venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
  665. venv/Lib/site-packages/pip/_vendor/pygments/lexer.py +963 -0
  666. venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +362 -0
  667. venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +602 -0
  668. venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +1201 -0
  669. venv/Lib/site-packages/pip/_vendor/pygments/modeline.py +43 -0
  670. venv/Lib/site-packages/pip/_vendor/pygments/plugin.py +72 -0
  671. venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py +91 -0
  672. venv/Lib/site-packages/pip/_vendor/pygments/scanner.py +104 -0
  673. venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +247 -0
  674. venv/Lib/site-packages/pip/_vendor/pygments/style.py +203 -0
  675. venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +61 -0
  676. venv/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py +54 -0
  677. venv/Lib/site-packages/pip/_vendor/pygments/token.py +214 -0
  678. venv/Lib/site-packages/pip/_vendor/pygments/unistring.py +153 -0
  679. venv/Lib/site-packages/pip/_vendor/pygments/util.py +324 -0
  680. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +31 -0
  681. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +410 -0
  682. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +21 -0
  683. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +389 -0
  684. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed +0 -0
  685. venv/Lib/site-packages/pip/_vendor/requests/__init__.py +179 -0
  686. venv/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
  687. venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +50 -0
  688. venv/Lib/site-packages/pip/_vendor/requests/adapters.py +696 -0
  689. venv/Lib/site-packages/pip/_vendor/requests/api.py +157 -0
  690. venv/Lib/site-packages/pip/_vendor/requests/auth.py +314 -0
  691. venv/Lib/site-packages/pip/_vendor/requests/certs.py +17 -0
  692. venv/Lib/site-packages/pip/_vendor/requests/compat.py +90 -0
  693. venv/Lib/site-packages/pip/_vendor/requests/cookies.py +561 -0
  694. venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +151 -0
  695. venv/Lib/site-packages/pip/_vendor/requests/help.py +127 -0
  696. venv/Lib/site-packages/pip/_vendor/requests/hooks.py +33 -0
  697. venv/Lib/site-packages/pip/_vendor/requests/models.py +1039 -0
  698. venv/Lib/site-packages/pip/_vendor/requests/packages.py +25 -0
  699. venv/Lib/site-packages/pip/_vendor/requests/sessions.py +831 -0
  700. venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +128 -0
  701. venv/Lib/site-packages/pip/_vendor/requests/structures.py +99 -0
  702. venv/Lib/site-packages/pip/_vendor/requests/utils.py +1086 -0
  703. venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +27 -0
  704. venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +196 -0
  705. venv/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
  706. venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +55 -0
  707. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py +27 -0
  708. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py +47 -0
  709. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py +48 -0
  710. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py +57 -0
  711. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py +627 -0
  712. venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +209 -0
  713. venv/Lib/site-packages/pip/_vendor/rich/__init__.py +177 -0
  714. venv/Lib/site-packages/pip/_vendor/rich/__main__.py +245 -0
  715. venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +454 -0
  716. venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +3610 -0
  717. venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +32 -0
  718. venv/Lib/site-packages/pip/_vendor/rich/_export_format.py +76 -0
  719. venv/Lib/site-packages/pip/_vendor/rich/_extension.py +10 -0
  720. venv/Lib/site-packages/pip/_vendor/rich/_fileno.py +24 -0
  721. venv/Lib/site-packages/pip/_vendor/rich/_inspect.py +268 -0
  722. venv/Lib/site-packages/pip/_vendor/rich/_log_render.py +94 -0
  723. venv/Lib/site-packages/pip/_vendor/rich/_loop.py +43 -0
  724. venv/Lib/site-packages/pip/_vendor/rich/_null_file.py +69 -0
  725. venv/Lib/site-packages/pip/_vendor/rich/_palettes.py +309 -0
  726. venv/Lib/site-packages/pip/_vendor/rich/_pick.py +17 -0
  727. venv/Lib/site-packages/pip/_vendor/rich/_ratio.py +153 -0
  728. venv/Lib/site-packages/pip/_vendor/rich/_spinners.py +482 -0
  729. venv/Lib/site-packages/pip/_vendor/rich/_stack.py +16 -0
  730. venv/Lib/site-packages/pip/_vendor/rich/_timer.py +19 -0
  731. venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py +661 -0
  732. venv/Lib/site-packages/pip/_vendor/rich/_windows.py +71 -0
  733. venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +56 -0
  734. venv/Lib/site-packages/pip/_vendor/rich/_wrap.py +93 -0
  735. venv/Lib/site-packages/pip/_vendor/rich/abc.py +33 -0
  736. venv/Lib/site-packages/pip/_vendor/rich/align.py +306 -0
  737. venv/Lib/site-packages/pip/_vendor/rich/ansi.py +241 -0
  738. venv/Lib/site-packages/pip/_vendor/rich/bar.py +93 -0
  739. venv/Lib/site-packages/pip/_vendor/rich/box.py +474 -0
  740. venv/Lib/site-packages/pip/_vendor/rich/cells.py +174 -0
  741. venv/Lib/site-packages/pip/_vendor/rich/color.py +621 -0
  742. venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py +38 -0
  743. venv/Lib/site-packages/pip/_vendor/rich/columns.py +187 -0
  744. venv/Lib/site-packages/pip/_vendor/rich/console.py +2680 -0
  745. venv/Lib/site-packages/pip/_vendor/rich/constrain.py +37 -0
  746. venv/Lib/site-packages/pip/_vendor/rich/containers.py +167 -0
  747. venv/Lib/site-packages/pip/_vendor/rich/control.py +219 -0
  748. venv/Lib/site-packages/pip/_vendor/rich/default_styles.py +193 -0
  749. venv/Lib/site-packages/pip/_vendor/rich/diagnose.py +39 -0
  750. venv/Lib/site-packages/pip/_vendor/rich/emoji.py +91 -0
  751. venv/Lib/site-packages/pip/_vendor/rich/errors.py +34 -0
  752. venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py +57 -0
  753. venv/Lib/site-packages/pip/_vendor/rich/filesize.py +88 -0
  754. venv/Lib/site-packages/pip/_vendor/rich/highlighter.py +232 -0
  755. venv/Lib/site-packages/pip/_vendor/rich/json.py +139 -0
  756. venv/Lib/site-packages/pip/_vendor/rich/jupyter.py +101 -0
  757. venv/Lib/site-packages/pip/_vendor/rich/layout.py +442 -0
  758. venv/Lib/site-packages/pip/_vendor/rich/live.py +400 -0
  759. venv/Lib/site-packages/pip/_vendor/rich/live_render.py +106 -0
  760. venv/Lib/site-packages/pip/_vendor/rich/logging.py +297 -0
  761. venv/Lib/site-packages/pip/_vendor/rich/markup.py +251 -0
  762. venv/Lib/site-packages/pip/_vendor/rich/measure.py +151 -0
  763. venv/Lib/site-packages/pip/_vendor/rich/padding.py +141 -0
  764. venv/Lib/site-packages/pip/_vendor/rich/pager.py +34 -0
  765. venv/Lib/site-packages/pip/_vendor/rich/palette.py +100 -0
  766. venv/Lib/site-packages/pip/_vendor/rich/panel.py +317 -0
  767. venv/Lib/site-packages/pip/_vendor/rich/pretty.py +1016 -0
  768. venv/Lib/site-packages/pip/_vendor/rich/progress.py +1715 -0
  769. venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py +223 -0
  770. venv/Lib/site-packages/pip/_vendor/rich/prompt.py +400 -0
  771. venv/Lib/site-packages/pip/_vendor/rich/protocol.py +42 -0
  772. venv/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
  773. venv/Lib/site-packages/pip/_vendor/rich/region.py +10 -0
  774. venv/Lib/site-packages/pip/_vendor/rich/repr.py +149 -0
  775. venv/Lib/site-packages/pip/_vendor/rich/rule.py +130 -0
  776. venv/Lib/site-packages/pip/_vendor/rich/scope.py +86 -0
  777. venv/Lib/site-packages/pip/_vendor/rich/screen.py +54 -0
  778. venv/Lib/site-packages/pip/_vendor/rich/segment.py +752 -0
  779. venv/Lib/site-packages/pip/_vendor/rich/spinner.py +132 -0
  780. venv/Lib/site-packages/pip/_vendor/rich/status.py +131 -0
  781. venv/Lib/site-packages/pip/_vendor/rich/style.py +792 -0
  782. venv/Lib/site-packages/pip/_vendor/rich/styled.py +42 -0
  783. venv/Lib/site-packages/pip/_vendor/rich/syntax.py +985 -0
  784. venv/Lib/site-packages/pip/_vendor/rich/table.py +1006 -0
  785. venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +153 -0
  786. venv/Lib/site-packages/pip/_vendor/rich/text.py +1361 -0
  787. venv/Lib/site-packages/pip/_vendor/rich/theme.py +115 -0
  788. venv/Lib/site-packages/pip/_vendor/rich/themes.py +5 -0
  789. venv/Lib/site-packages/pip/_vendor/rich/traceback.py +899 -0
  790. venv/Lib/site-packages/pip/_vendor/rich/tree.py +257 -0
  791. venv/Lib/site-packages/pip/_vendor/tomli/__init__.py +8 -0
  792. venv/Lib/site-packages/pip/_vendor/tomli/_parser.py +777 -0
  793. venv/Lib/site-packages/pip/_vendor/tomli/_re.py +115 -0
  794. venv/Lib/site-packages/pip/_vendor/tomli/_types.py +10 -0
  795. venv/Lib/site-packages/pip/_vendor/tomli/py.typed +1 -0
  796. venv/Lib/site-packages/pip/_vendor/tomli_w/__init__.py +4 -0
  797. venv/Lib/site-packages/pip/_vendor/tomli_w/_writer.py +229 -0
  798. venv/Lib/site-packages/pip/_vendor/tomli_w/py.typed +1 -0
  799. venv/Lib/site-packages/pip/_vendor/truststore/__init__.py +36 -0
  800. venv/Lib/site-packages/pip/_vendor/truststore/_api.py +341 -0
  801. venv/Lib/site-packages/pip/_vendor/truststore/_macos.py +571 -0
  802. venv/Lib/site-packages/pip/_vendor/truststore/_openssl.py +68 -0
  803. venv/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py +31 -0
  804. venv/Lib/site-packages/pip/_vendor/truststore/_windows.py +567 -0
  805. venv/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
  806. venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +102 -0
  807. venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +355 -0
  808. venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
  809. venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +572 -0
  810. venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1140 -0
  811. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  812. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
  813. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  814. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
  815. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +397 -0
  816. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
  817. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +130 -0
  818. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +518 -0
  819. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +920 -0
  820. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
  821. venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +323 -0
  822. venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
  823. venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
  824. venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
  825. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  826. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
  827. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +155 -0
  828. venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1076 -0
  829. venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +540 -0
  830. venv/Lib/site-packages/pip/_vendor/urllib3/request.py +191 -0
  831. venv/Lib/site-packages/pip/_vendor/urllib3/response.py +879 -0
  832. venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
  833. venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +149 -0
  834. venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +57 -0
  835. venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
  836. venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +137 -0
  837. venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
  838. venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +622 -0
  839. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +504 -0
  840. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
  841. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
  842. venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +271 -0
  843. venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +435 -0
  844. venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +152 -0
  845. venv/Lib/site-packages/pip/py.typed +4 -0
  846. venv/Lib/site-packages/pluggy/__init__.py +30 -0
  847. venv/Lib/site-packages/pluggy/_callers.py +169 -0
  848. venv/Lib/site-packages/pluggy/_hooks.py +714 -0
  849. venv/Lib/site-packages/pluggy/_manager.py +523 -0
  850. venv/Lib/site-packages/pluggy/_result.py +107 -0
  851. venv/Lib/site-packages/pluggy/_tracing.py +72 -0
  852. venv/Lib/site-packages/pluggy/_version.py +21 -0
  853. venv/Lib/site-packages/pluggy/_warnings.py +27 -0
  854. venv/Lib/site-packages/pluggy/py.typed +0 -0
  855. venv/Lib/site-packages/py.py +15 -0
  856. venv/Lib/site-packages/pydantic/__init__.py +456 -0
  857. venv/Lib/site-packages/pydantic/_internal/__init__.py +0 -0
  858. venv/Lib/site-packages/pydantic/_internal/_config.py +386 -0
  859. venv/Lib/site-packages/pydantic/_internal/_core_metadata.py +97 -0
  860. venv/Lib/site-packages/pydantic/_internal/_core_utils.py +174 -0
  861. venv/Lib/site-packages/pydantic/_internal/_dataclasses.py +315 -0
  862. venv/Lib/site-packages/pydantic/_internal/_decorators.py +873 -0
  863. venv/Lib/site-packages/pydantic/_internal/_decorators_v1.py +174 -0
  864. venv/Lib/site-packages/pydantic/_internal/_discriminated_union.py +494 -0
  865. venv/Lib/site-packages/pydantic/_internal/_docs_extraction.py +113 -0
  866. venv/Lib/site-packages/pydantic/_internal/_fields.py +729 -0
  867. venv/Lib/site-packages/pydantic/_internal/_forward_ref.py +23 -0
  868. venv/Lib/site-packages/pydantic/_internal/_generate_schema.py +2934 -0
  869. venv/Lib/site-packages/pydantic/_internal/_generics.py +530 -0
  870. venv/Lib/site-packages/pydantic/_internal/_git.py +27 -0
  871. venv/Lib/site-packages/pydantic/_internal/_import_utils.py +20 -0
  872. venv/Lib/site-packages/pydantic/_internal/_internal_dataclass.py +7 -0
  873. venv/Lib/site-packages/pydantic/_internal/_known_annotated_metadata.py +403 -0
  874. venv/Lib/site-packages/pydantic/_internal/_mock_val_ser.py +228 -0
  875. venv/Lib/site-packages/pydantic/_internal/_model_construction.py +868 -0
  876. venv/Lib/site-packages/pydantic/_internal/_namespace_utils.py +293 -0
  877. venv/Lib/site-packages/pydantic/_internal/_repr.py +124 -0
  878. venv/Lib/site-packages/pydantic/_internal/_schema_gather.py +212 -0
  879. venv/Lib/site-packages/pydantic/_internal/_schema_generation_shared.py +125 -0
  880. venv/Lib/site-packages/pydantic/_internal/_serializers.py +53 -0
  881. venv/Lib/site-packages/pydantic/_internal/_signature.py +189 -0
  882. venv/Lib/site-packages/pydantic/_internal/_typing_extra.py +785 -0
  883. venv/Lib/site-packages/pydantic/_internal/_utils.py +446 -0
  884. venv/Lib/site-packages/pydantic/_internal/_validate_call.py +141 -0
  885. venv/Lib/site-packages/pydantic/_internal/_validators.py +534 -0
  886. venv/Lib/site-packages/pydantic/_migration.py +316 -0
  887. venv/Lib/site-packages/pydantic/alias_generators.py +62 -0
  888. venv/Lib/site-packages/pydantic/aliases.py +135 -0
  889. venv/Lib/site-packages/pydantic/annotated_handlers.py +122 -0
  890. venv/Lib/site-packages/pydantic/class_validators.py +5 -0
  891. venv/Lib/site-packages/pydantic/color.py +604 -0
  892. venv/Lib/site-packages/pydantic/config.py +1296 -0
  893. venv/Lib/site-packages/pydantic/dataclasses.py +413 -0
  894. venv/Lib/site-packages/pydantic/datetime_parse.py +5 -0
  895. venv/Lib/site-packages/pydantic/decorator.py +5 -0
  896. venv/Lib/site-packages/pydantic/deprecated/__init__.py +0 -0
  897. venv/Lib/site-packages/pydantic/deprecated/class_validators.py +256 -0
  898. venv/Lib/site-packages/pydantic/deprecated/config.py +72 -0
  899. venv/Lib/site-packages/pydantic/deprecated/copy_internals.py +224 -0
  900. venv/Lib/site-packages/pydantic/deprecated/decorator.py +284 -0
  901. venv/Lib/site-packages/pydantic/deprecated/json.py +141 -0
  902. venv/Lib/site-packages/pydantic/deprecated/parse.py +80 -0
  903. venv/Lib/site-packages/pydantic/deprecated/tools.py +103 -0
  904. venv/Lib/site-packages/pydantic/env_settings.py +5 -0
  905. venv/Lib/site-packages/pydantic/error_wrappers.py +5 -0
  906. venv/Lib/site-packages/pydantic/errors.py +189 -0
  907. venv/Lib/site-packages/pydantic/experimental/__init__.py +1 -0
  908. venv/Lib/site-packages/pydantic/experimental/arguments_schema.py +44 -0
  909. venv/Lib/site-packages/pydantic/experimental/missing_sentinel.py +5 -0
  910. venv/Lib/site-packages/pydantic/experimental/pipeline.py +663 -0
  911. venv/Lib/site-packages/pydantic/fields.py +1892 -0
  912. venv/Lib/site-packages/pydantic/functional_serializers.py +470 -0
  913. venv/Lib/site-packages/pydantic/functional_validators.py +889 -0
  914. venv/Lib/site-packages/pydantic/generics.py +5 -0
  915. venv/Lib/site-packages/pydantic/json.py +5 -0
  916. venv/Lib/site-packages/pydantic/json_schema.py +2911 -0
  917. venv/Lib/site-packages/pydantic/main.py +1838 -0
  918. venv/Lib/site-packages/pydantic/mypy.py +1412 -0
  919. venv/Lib/site-packages/pydantic/networks.py +1332 -0
  920. venv/Lib/site-packages/pydantic/parse.py +5 -0
  921. venv/Lib/site-packages/pydantic/plugin/__init__.py +193 -0
  922. venv/Lib/site-packages/pydantic/plugin/_loader.py +58 -0
  923. venv/Lib/site-packages/pydantic/plugin/_schema_validator.py +143 -0
  924. venv/Lib/site-packages/pydantic/py.typed +0 -0
  925. venv/Lib/site-packages/pydantic/root_model.py +157 -0
  926. venv/Lib/site-packages/pydantic/schema.py +5 -0
  927. venv/Lib/site-packages/pydantic/tools.py +5 -0
  928. venv/Lib/site-packages/pydantic/type_adapter.py +801 -0
  929. venv/Lib/site-packages/pydantic/types.py +3310 -0
  930. venv/Lib/site-packages/pydantic/typing.py +5 -0
  931. venv/Lib/site-packages/pydantic/utils.py +5 -0
  932. venv/Lib/site-packages/pydantic/v1/__init__.py +131 -0
  933. venv/Lib/site-packages/pydantic/v1/_hypothesis_plugin.py +391 -0
  934. venv/Lib/site-packages/pydantic/v1/annotated_types.py +72 -0
  935. venv/Lib/site-packages/pydantic/v1/class_validators.py +361 -0
  936. venv/Lib/site-packages/pydantic/v1/color.py +494 -0
  937. venv/Lib/site-packages/pydantic/v1/config.py +191 -0
  938. venv/Lib/site-packages/pydantic/v1/dataclasses.py +500 -0
  939. venv/Lib/site-packages/pydantic/v1/datetime_parse.py +248 -0
  940. venv/Lib/site-packages/pydantic/v1/decorator.py +264 -0
  941. venv/Lib/site-packages/pydantic/v1/env_settings.py +350 -0
  942. venv/Lib/site-packages/pydantic/v1/error_wrappers.py +161 -0
  943. venv/Lib/site-packages/pydantic/v1/errors.py +646 -0
  944. venv/Lib/site-packages/pydantic/v1/fields.py +1253 -0
  945. venv/Lib/site-packages/pydantic/v1/generics.py +400 -0
  946. venv/Lib/site-packages/pydantic/v1/json.py +112 -0
  947. venv/Lib/site-packages/pydantic/v1/main.py +1130 -0
  948. venv/Lib/site-packages/pydantic/v1/mypy.py +949 -0
  949. venv/Lib/site-packages/pydantic/v1/networks.py +747 -0
  950. venv/Lib/site-packages/pydantic/v1/parse.py +66 -0
  951. venv/Lib/site-packages/pydantic/v1/py.typed +0 -0
  952. venv/Lib/site-packages/pydantic/v1/schema.py +1163 -0
  953. venv/Lib/site-packages/pydantic/v1/tools.py +92 -0
  954. venv/Lib/site-packages/pydantic/v1/types.py +1205 -0
  955. venv/Lib/site-packages/pydantic/v1/typing.py +627 -0
  956. venv/Lib/site-packages/pydantic/v1/utils.py +807 -0
  957. venv/Lib/site-packages/pydantic/v1/validators.py +768 -0
  958. venv/Lib/site-packages/pydantic/v1/version.py +38 -0
  959. venv/Lib/site-packages/pydantic/validate_call_decorator.py +116 -0
  960. venv/Lib/site-packages/pydantic/validators.py +5 -0
  961. venv/Lib/site-packages/pydantic/version.py +113 -0
  962. venv/Lib/site-packages/pydantic/warnings.py +122 -0
  963. venv/Lib/site-packages/pydantic_core/__init__.py +171 -0
  964. venv/Lib/site-packages/pydantic_core/_pydantic_core.pyi +1056 -0
  965. venv/Lib/site-packages/pydantic_core/core_schema.py +4461 -0
  966. venv/Lib/site-packages/pydantic_core/py.typed +0 -0
  967. venv/Lib/site-packages/pygments/__init__.py +82 -0
  968. venv/Lib/site-packages/pygments/__main__.py +17 -0
  969. venv/Lib/site-packages/pygments/cmdline.py +668 -0
  970. venv/Lib/site-packages/pygments/console.py +70 -0
  971. venv/Lib/site-packages/pygments/filter.py +70 -0
  972. venv/Lib/site-packages/pygments/filters/__init__.py +942 -0
  973. venv/Lib/site-packages/pygments/formatter.py +129 -0
  974. venv/Lib/site-packages/pygments/formatters/__init__.py +157 -0
  975. venv/Lib/site-packages/pygments/formatters/_mapping.py +23 -0
  976. venv/Lib/site-packages/pygments/formatters/bbcode.py +108 -0
  977. venv/Lib/site-packages/pygments/formatters/groff.py +170 -0
  978. venv/Lib/site-packages/pygments/formatters/html.py +997 -0
  979. venv/Lib/site-packages/pygments/formatters/img.py +686 -0
  980. venv/Lib/site-packages/pygments/formatters/irc.py +153 -0
  981. venv/Lib/site-packages/pygments/formatters/latex.py +518 -0
  982. venv/Lib/site-packages/pygments/formatters/other.py +160 -0
  983. venv/Lib/site-packages/pygments/formatters/pangomarkup.py +83 -0
  984. venv/Lib/site-packages/pygments/formatters/rtf.py +349 -0
  985. venv/Lib/site-packages/pygments/formatters/svg.py +185 -0
  986. venv/Lib/site-packages/pygments/formatters/terminal.py +127 -0
  987. venv/Lib/site-packages/pygments/formatters/terminal256.py +338 -0
  988. venv/Lib/site-packages/pygments/lexer.py +963 -0
  989. venv/Lib/site-packages/pygments/lexers/__init__.py +362 -0
  990. venv/Lib/site-packages/pygments/lexers/_ada_builtins.py +103 -0
  991. venv/Lib/site-packages/pygments/lexers/_asy_builtins.py +1644 -0
  992. venv/Lib/site-packages/pygments/lexers/_cl_builtins.py +231 -0
  993. venv/Lib/site-packages/pygments/lexers/_cocoa_builtins.py +75 -0
  994. venv/Lib/site-packages/pygments/lexers/_csound_builtins.py +1780 -0
  995. venv/Lib/site-packages/pygments/lexers/_css_builtins.py +558 -0
  996. venv/Lib/site-packages/pygments/lexers/_googlesql_builtins.py +918 -0
  997. venv/Lib/site-packages/pygments/lexers/_julia_builtins.py +411 -0
  998. venv/Lib/site-packages/pygments/lexers/_lasso_builtins.py +5326 -0
  999. venv/Lib/site-packages/pygments/lexers/_lilypond_builtins.py +5184 -0
  1000. venv/Lib/site-packages/pygments/lexers/_lua_builtins.py +285 -0
  1001. venv/Lib/site-packages/pygments/lexers/_luau_builtins.py +62 -0
  1002. venv/Lib/site-packages/pygments/lexers/_mapping.py +603 -0
  1003. venv/Lib/site-packages/pygments/lexers/_mql_builtins.py +1171 -0
  1004. venv/Lib/site-packages/pygments/lexers/_mysql_builtins.py +1384 -0
  1005. venv/Lib/site-packages/pygments/lexers/_openedge_builtins.py +2600 -0
  1006. venv/Lib/site-packages/pygments/lexers/_php_builtins.py +3328 -0
  1007. venv/Lib/site-packages/pygments/lexers/_postgres_builtins.py +739 -0
  1008. venv/Lib/site-packages/pygments/lexers/_qlik_builtins.py +666 -0
  1009. venv/Lib/site-packages/pygments/lexers/_scheme_builtins.py +1609 -0
  1010. venv/Lib/site-packages/pygments/lexers/_scilab_builtins.py +3093 -0
  1011. venv/Lib/site-packages/pygments/lexers/_sourcemod_builtins.py +1151 -0
  1012. venv/Lib/site-packages/pygments/lexers/_sql_builtins.py +106 -0
  1013. venv/Lib/site-packages/pygments/lexers/_stan_builtins.py +761 -0
  1014. venv/Lib/site-packages/pygments/lexers/_stata_builtins.py +457 -0
  1015. venv/Lib/site-packages/pygments/lexers/_tsql_builtins.py +1003 -0
  1016. venv/Lib/site-packages/pygments/lexers/_usd_builtins.py +112 -0
  1017. venv/Lib/site-packages/pygments/lexers/_vbscript_builtins.py +279 -0
  1018. venv/Lib/site-packages/pygments/lexers/_vim_builtins.py +1938 -0
  1019. venv/Lib/site-packages/pygments/lexers/actionscript.py +243 -0
  1020. venv/Lib/site-packages/pygments/lexers/ada.py +144 -0
  1021. venv/Lib/site-packages/pygments/lexers/agile.py +25 -0
  1022. venv/Lib/site-packages/pygments/lexers/algebra.py +300 -0
  1023. venv/Lib/site-packages/pygments/lexers/ambient.py +75 -0
  1024. venv/Lib/site-packages/pygments/lexers/amdgpu.py +54 -0
  1025. venv/Lib/site-packages/pygments/lexers/ampl.py +87 -0
  1026. venv/Lib/site-packages/pygments/lexers/apdlexer.py +593 -0
  1027. venv/Lib/site-packages/pygments/lexers/apl.py +103 -0
  1028. venv/Lib/site-packages/pygments/lexers/archetype.py +315 -0
  1029. venv/Lib/site-packages/pygments/lexers/arrow.py +116 -0
  1030. venv/Lib/site-packages/pygments/lexers/arturo.py +249 -0
  1031. venv/Lib/site-packages/pygments/lexers/asc.py +55 -0
  1032. venv/Lib/site-packages/pygments/lexers/asm.py +1058 -0
  1033. venv/Lib/site-packages/pygments/lexers/asn1.py +178 -0
  1034. venv/Lib/site-packages/pygments/lexers/automation.py +379 -0
  1035. venv/Lib/site-packages/pygments/lexers/bare.py +101 -0
  1036. venv/Lib/site-packages/pygments/lexers/basic.py +656 -0
  1037. venv/Lib/site-packages/pygments/lexers/bdd.py +57 -0
  1038. venv/Lib/site-packages/pygments/lexers/berry.py +99 -0
  1039. venv/Lib/site-packages/pygments/lexers/bibtex.py +159 -0
  1040. venv/Lib/site-packages/pygments/lexers/blueprint.py +173 -0
  1041. venv/Lib/site-packages/pygments/lexers/boa.py +97 -0
  1042. venv/Lib/site-packages/pygments/lexers/bqn.py +112 -0
  1043. venv/Lib/site-packages/pygments/lexers/business.py +625 -0
  1044. venv/Lib/site-packages/pygments/lexers/c_cpp.py +415 -0
  1045. venv/Lib/site-packages/pygments/lexers/c_like.py +738 -0
  1046. venv/Lib/site-packages/pygments/lexers/capnproto.py +74 -0
  1047. venv/Lib/site-packages/pygments/lexers/carbon.py +95 -0
  1048. venv/Lib/site-packages/pygments/lexers/cddl.py +172 -0
  1049. venv/Lib/site-packages/pygments/lexers/chapel.py +139 -0
  1050. venv/Lib/site-packages/pygments/lexers/clean.py +180 -0
  1051. venv/Lib/site-packages/pygments/lexers/codeql.py +80 -0
  1052. venv/Lib/site-packages/pygments/lexers/comal.py +81 -0
  1053. venv/Lib/site-packages/pygments/lexers/compiled.py +35 -0
  1054. venv/Lib/site-packages/pygments/lexers/configs.py +1433 -0
  1055. venv/Lib/site-packages/pygments/lexers/console.py +114 -0
  1056. venv/Lib/site-packages/pygments/lexers/cplint.py +43 -0
  1057. venv/Lib/site-packages/pygments/lexers/crystal.py +364 -0
  1058. venv/Lib/site-packages/pygments/lexers/csound.py +466 -0
  1059. venv/Lib/site-packages/pygments/lexers/css.py +632 -0
  1060. venv/Lib/site-packages/pygments/lexers/d.py +259 -0
  1061. venv/Lib/site-packages/pygments/lexers/dalvik.py +126 -0
  1062. venv/Lib/site-packages/pygments/lexers/data.py +763 -0
  1063. venv/Lib/site-packages/pygments/lexers/dax.py +135 -0
  1064. venv/Lib/site-packages/pygments/lexers/devicetree.py +120 -0
  1065. venv/Lib/site-packages/pygments/lexers/diff.py +169 -0
  1066. venv/Lib/site-packages/pygments/lexers/dns.py +109 -0
  1067. venv/Lib/site-packages/pygments/lexers/dotnet.py +873 -0
  1068. venv/Lib/site-packages/pygments/lexers/dsls.py +970 -0
  1069. venv/Lib/site-packages/pygments/lexers/dylan.py +279 -0
  1070. venv/Lib/site-packages/pygments/lexers/ecl.py +144 -0
  1071. venv/Lib/site-packages/pygments/lexers/eiffel.py +68 -0
  1072. venv/Lib/site-packages/pygments/lexers/elm.py +123 -0
  1073. venv/Lib/site-packages/pygments/lexers/elpi.py +201 -0
  1074. venv/Lib/site-packages/pygments/lexers/email.py +132 -0
  1075. venv/Lib/site-packages/pygments/lexers/erlang.py +526 -0
  1076. venv/Lib/site-packages/pygments/lexers/esoteric.py +300 -0
  1077. venv/Lib/site-packages/pygments/lexers/ezhil.py +76 -0
  1078. venv/Lib/site-packages/pygments/lexers/factor.py +363 -0
  1079. venv/Lib/site-packages/pygments/lexers/fantom.py +251 -0
  1080. venv/Lib/site-packages/pygments/lexers/felix.py +275 -0
  1081. venv/Lib/site-packages/pygments/lexers/fift.py +68 -0
  1082. venv/Lib/site-packages/pygments/lexers/floscript.py +81 -0
  1083. venv/Lib/site-packages/pygments/lexers/forth.py +178 -0
  1084. venv/Lib/site-packages/pygments/lexers/fortran.py +212 -0
  1085. venv/Lib/site-packages/pygments/lexers/foxpro.py +427 -0
  1086. venv/Lib/site-packages/pygments/lexers/freefem.py +893 -0
  1087. venv/Lib/site-packages/pygments/lexers/func.py +110 -0
  1088. venv/Lib/site-packages/pygments/lexers/functional.py +21 -0
  1089. venv/Lib/site-packages/pygments/lexers/futhark.py +105 -0
  1090. venv/Lib/site-packages/pygments/lexers/gcodelexer.py +35 -0
  1091. venv/Lib/site-packages/pygments/lexers/gdscript.py +189 -0
  1092. venv/Lib/site-packages/pygments/lexers/gleam.py +74 -0
  1093. venv/Lib/site-packages/pygments/lexers/go.py +97 -0
  1094. venv/Lib/site-packages/pygments/lexers/grammar_notation.py +262 -0
  1095. venv/Lib/site-packages/pygments/lexers/graph.py +108 -0
  1096. venv/Lib/site-packages/pygments/lexers/graphics.py +794 -0
  1097. venv/Lib/site-packages/pygments/lexers/graphql.py +176 -0
  1098. venv/Lib/site-packages/pygments/lexers/graphviz.py +58 -0
  1099. venv/Lib/site-packages/pygments/lexers/gsql.py +103 -0
  1100. venv/Lib/site-packages/pygments/lexers/hare.py +73 -0
  1101. venv/Lib/site-packages/pygments/lexers/haskell.py +867 -0
  1102. venv/Lib/site-packages/pygments/lexers/haxe.py +941 -0
  1103. venv/Lib/site-packages/pygments/lexers/hdl.py +466 -0
  1104. venv/Lib/site-packages/pygments/lexers/hexdump.py +102 -0
  1105. venv/Lib/site-packages/pygments/lexers/html.py +670 -0
  1106. venv/Lib/site-packages/pygments/lexers/idl.py +284 -0
  1107. venv/Lib/site-packages/pygments/lexers/igor.py +435 -0
  1108. venv/Lib/site-packages/pygments/lexers/inferno.py +95 -0
  1109. venv/Lib/site-packages/pygments/lexers/installers.py +352 -0
  1110. venv/Lib/site-packages/pygments/lexers/int_fiction.py +1370 -0
  1111. venv/Lib/site-packages/pygments/lexers/iolang.py +61 -0
  1112. venv/Lib/site-packages/pygments/lexers/j.py +151 -0
  1113. venv/Lib/site-packages/pygments/lexers/javascript.py +1591 -0
  1114. venv/Lib/site-packages/pygments/lexers/jmespath.py +69 -0
  1115. venv/Lib/site-packages/pygments/lexers/jslt.py +94 -0
  1116. venv/Lib/site-packages/pygments/lexers/json5.py +83 -0
  1117. venv/Lib/site-packages/pygments/lexers/jsonnet.py +169 -0
  1118. venv/Lib/site-packages/pygments/lexers/jsx.py +100 -0
  1119. venv/Lib/site-packages/pygments/lexers/julia.py +294 -0
  1120. venv/Lib/site-packages/pygments/lexers/jvm.py +1807 -0
  1121. venv/Lib/site-packages/pygments/lexers/kuin.py +332 -0
  1122. venv/Lib/site-packages/pygments/lexers/kusto.py +93 -0
  1123. venv/Lib/site-packages/pygments/lexers/ldap.py +155 -0
  1124. venv/Lib/site-packages/pygments/lexers/lean.py +241 -0
  1125. venv/Lib/site-packages/pygments/lexers/lilypond.py +225 -0
  1126. venv/Lib/site-packages/pygments/lexers/lisp.py +3152 -0
  1127. venv/Lib/site-packages/pygments/lexers/macaulay2.py +1847 -0
  1128. venv/Lib/site-packages/pygments/lexers/make.py +212 -0
  1129. venv/Lib/site-packages/pygments/lexers/maple.py +291 -0
  1130. venv/Lib/site-packages/pygments/lexers/markup.py +1659 -0
  1131. venv/Lib/site-packages/pygments/lexers/math.py +21 -0
  1132. venv/Lib/site-packages/pygments/lexers/matlab.py +3307 -0
  1133. venv/Lib/site-packages/pygments/lexers/maxima.py +84 -0
  1134. venv/Lib/site-packages/pygments/lexers/meson.py +139 -0
  1135. venv/Lib/site-packages/pygments/lexers/mime.py +210 -0
  1136. venv/Lib/site-packages/pygments/lexers/minecraft.py +392 -0
  1137. venv/Lib/site-packages/pygments/lexers/mips.py +130 -0
  1138. venv/Lib/site-packages/pygments/lexers/ml.py +958 -0
  1139. venv/Lib/site-packages/pygments/lexers/modeling.py +368 -0
  1140. venv/Lib/site-packages/pygments/lexers/modula2.py +1579 -0
  1141. venv/Lib/site-packages/pygments/lexers/mojo.py +707 -0
  1142. venv/Lib/site-packages/pygments/lexers/monte.py +203 -0
  1143. venv/Lib/site-packages/pygments/lexers/mosel.py +447 -0
  1144. venv/Lib/site-packages/pygments/lexers/ncl.py +894 -0
  1145. venv/Lib/site-packages/pygments/lexers/nimrod.py +199 -0
  1146. venv/Lib/site-packages/pygments/lexers/nit.py +63 -0
  1147. venv/Lib/site-packages/pygments/lexers/nix.py +144 -0
  1148. venv/Lib/site-packages/pygments/lexers/numbair.py +63 -0
  1149. venv/Lib/site-packages/pygments/lexers/oberon.py +120 -0
  1150. venv/Lib/site-packages/pygments/lexers/objective.py +513 -0
  1151. venv/Lib/site-packages/pygments/lexers/ooc.py +84 -0
  1152. venv/Lib/site-packages/pygments/lexers/openscad.py +96 -0
  1153. venv/Lib/site-packages/pygments/lexers/other.py +41 -0
  1154. venv/Lib/site-packages/pygments/lexers/parasail.py +78 -0
  1155. venv/Lib/site-packages/pygments/lexers/parsers.py +798 -0
  1156. venv/Lib/site-packages/pygments/lexers/pascal.py +644 -0
  1157. venv/Lib/site-packages/pygments/lexers/pawn.py +202 -0
  1158. venv/Lib/site-packages/pygments/lexers/pddl.py +82 -0
  1159. venv/Lib/site-packages/pygments/lexers/perl.py +733 -0
  1160. venv/Lib/site-packages/pygments/lexers/phix.py +363 -0
  1161. venv/Lib/site-packages/pygments/lexers/php.py +335 -0
  1162. venv/Lib/site-packages/pygments/lexers/pointless.py +70 -0
  1163. venv/Lib/site-packages/pygments/lexers/pony.py +93 -0
  1164. venv/Lib/site-packages/pygments/lexers/praat.py +303 -0
  1165. venv/Lib/site-packages/pygments/lexers/procfile.py +41 -0
  1166. venv/Lib/site-packages/pygments/lexers/prolog.py +318 -0
  1167. venv/Lib/site-packages/pygments/lexers/promql.py +176 -0
  1168. venv/Lib/site-packages/pygments/lexers/prql.py +251 -0
  1169. venv/Lib/site-packages/pygments/lexers/ptx.py +119 -0
  1170. venv/Lib/site-packages/pygments/lexers/python.py +1204 -0
  1171. venv/Lib/site-packages/pygments/lexers/q.py +187 -0
  1172. venv/Lib/site-packages/pygments/lexers/qlik.py +117 -0
  1173. venv/Lib/site-packages/pygments/lexers/qvt.py +153 -0
  1174. venv/Lib/site-packages/pygments/lexers/r.py +196 -0
  1175. venv/Lib/site-packages/pygments/lexers/rdf.py +468 -0
  1176. venv/Lib/site-packages/pygments/lexers/rebol.py +419 -0
  1177. venv/Lib/site-packages/pygments/lexers/rego.py +57 -0
  1178. venv/Lib/site-packages/pygments/lexers/rell.py +68 -0
  1179. venv/Lib/site-packages/pygments/lexers/resource.py +83 -0
  1180. venv/Lib/site-packages/pygments/lexers/ride.py +138 -0
  1181. venv/Lib/site-packages/pygments/lexers/rita.py +42 -0
  1182. venv/Lib/site-packages/pygments/lexers/rnc.py +66 -0
  1183. venv/Lib/site-packages/pygments/lexers/roboconf.py +81 -0
  1184. venv/Lib/site-packages/pygments/lexers/robotframework.py +551 -0
  1185. venv/Lib/site-packages/pygments/lexers/ruby.py +518 -0
  1186. venv/Lib/site-packages/pygments/lexers/rust.py +222 -0
  1187. venv/Lib/site-packages/pygments/lexers/sas.py +227 -0
  1188. venv/Lib/site-packages/pygments/lexers/savi.py +171 -0
  1189. venv/Lib/site-packages/pygments/lexers/scdoc.py +85 -0
  1190. venv/Lib/site-packages/pygments/lexers/scripting.py +1638 -0
  1191. venv/Lib/site-packages/pygments/lexers/sgf.py +59 -0
  1192. venv/Lib/site-packages/pygments/lexers/shell.py +902 -0
  1193. venv/Lib/site-packages/pygments/lexers/sieve.py +78 -0
  1194. venv/Lib/site-packages/pygments/lexers/slash.py +183 -0
  1195. venv/Lib/site-packages/pygments/lexers/smalltalk.py +194 -0
  1196. venv/Lib/site-packages/pygments/lexers/smithy.py +77 -0
  1197. venv/Lib/site-packages/pygments/lexers/smv.py +78 -0
  1198. venv/Lib/site-packages/pygments/lexers/snobol.py +82 -0
  1199. venv/Lib/site-packages/pygments/lexers/solidity.py +87 -0
  1200. venv/Lib/site-packages/pygments/lexers/soong.py +78 -0
  1201. venv/Lib/site-packages/pygments/lexers/sophia.py +102 -0
  1202. venv/Lib/site-packages/pygments/lexers/special.py +122 -0
  1203. venv/Lib/site-packages/pygments/lexers/spice.py +70 -0
  1204. venv/Lib/site-packages/pygments/lexers/sql.py +1111 -0
  1205. venv/Lib/site-packages/pygments/lexers/srcinfo.py +62 -0
  1206. venv/Lib/site-packages/pygments/lexers/stata.py +170 -0
  1207. venv/Lib/site-packages/pygments/lexers/supercollider.py +94 -0
  1208. venv/Lib/site-packages/pygments/lexers/tablegen.py +177 -0
  1209. venv/Lib/site-packages/pygments/lexers/tact.py +303 -0
  1210. venv/Lib/site-packages/pygments/lexers/tal.py +77 -0
  1211. venv/Lib/site-packages/pygments/lexers/tcl.py +148 -0
  1212. venv/Lib/site-packages/pygments/lexers/teal.py +88 -0
  1213. venv/Lib/site-packages/pygments/lexers/templates.py +2355 -0
  1214. venv/Lib/site-packages/pygments/lexers/teraterm.py +335 -0
  1215. venv/Lib/site-packages/pygments/lexers/testing.py +209 -0
  1216. venv/Lib/site-packages/pygments/lexers/text.py +27 -0
  1217. venv/Lib/site-packages/pygments/lexers/textedit.py +205 -0
  1218. venv/Lib/site-packages/pygments/lexers/textfmts.py +436 -0
  1219. venv/Lib/site-packages/pygments/lexers/theorem.py +410 -0
  1220. venv/Lib/site-packages/pygments/lexers/thingsdb.py +143 -0
  1221. venv/Lib/site-packages/pygments/lexers/tlb.py +59 -0
  1222. venv/Lib/site-packages/pygments/lexers/tls.py +54 -0
  1223. venv/Lib/site-packages/pygments/lexers/tnt.py +270 -0
  1224. venv/Lib/site-packages/pygments/lexers/trafficscript.py +51 -0
  1225. venv/Lib/site-packages/pygments/lexers/typoscript.py +216 -0
  1226. venv/Lib/site-packages/pygments/lexers/typst.py +160 -0
  1227. venv/Lib/site-packages/pygments/lexers/ul4.py +309 -0
  1228. venv/Lib/site-packages/pygments/lexers/unicon.py +413 -0
  1229. venv/Lib/site-packages/pygments/lexers/urbi.py +145 -0
  1230. venv/Lib/site-packages/pygments/lexers/usd.py +85 -0
  1231. venv/Lib/site-packages/pygments/lexers/varnish.py +189 -0
  1232. venv/Lib/site-packages/pygments/lexers/verification.py +113 -0
  1233. venv/Lib/site-packages/pygments/lexers/verifpal.py +65 -0
  1234. venv/Lib/site-packages/pygments/lexers/vip.py +150 -0
  1235. venv/Lib/site-packages/pygments/lexers/vyper.py +140 -0
  1236. venv/Lib/site-packages/pygments/lexers/web.py +24 -0
  1237. venv/Lib/site-packages/pygments/lexers/webassembly.py +119 -0
  1238. venv/Lib/site-packages/pygments/lexers/webidl.py +298 -0
  1239. venv/Lib/site-packages/pygments/lexers/webmisc.py +1006 -0
  1240. venv/Lib/site-packages/pygments/lexers/wgsl.py +406 -0
  1241. venv/Lib/site-packages/pygments/lexers/whiley.py +115 -0
  1242. venv/Lib/site-packages/pygments/lexers/wowtoc.py +120 -0
  1243. venv/Lib/site-packages/pygments/lexers/wren.py +98 -0
  1244. venv/Lib/site-packages/pygments/lexers/x10.py +66 -0
  1245. venv/Lib/site-packages/pygments/lexers/xorg.py +38 -0
  1246. venv/Lib/site-packages/pygments/lexers/yang.py +103 -0
  1247. venv/Lib/site-packages/pygments/lexers/yara.py +69 -0
  1248. venv/Lib/site-packages/pygments/lexers/zig.py +125 -0
  1249. venv/Lib/site-packages/pygments/modeline.py +43 -0
  1250. venv/Lib/site-packages/pygments/plugin.py +74 -0
  1251. venv/Lib/site-packages/pygments/regexopt.py +102 -0
  1252. venv/Lib/site-packages/pygments/scanner.py +104 -0
  1253. venv/Lib/site-packages/pygments/sphinxext.py +247 -0
  1254. venv/Lib/site-packages/pygments/style.py +203 -0
  1255. venv/Lib/site-packages/pygments/styles/__init__.py +61 -0
  1256. venv/Lib/site-packages/pygments/styles/_mapping.py +54 -0
  1257. venv/Lib/site-packages/pygments/styles/abap.py +32 -0
  1258. venv/Lib/site-packages/pygments/styles/algol.py +65 -0
  1259. venv/Lib/site-packages/pygments/styles/algol_nu.py +65 -0
  1260. venv/Lib/site-packages/pygments/styles/arduino.py +100 -0
  1261. venv/Lib/site-packages/pygments/styles/autumn.py +67 -0
  1262. venv/Lib/site-packages/pygments/styles/borland.py +53 -0
  1263. venv/Lib/site-packages/pygments/styles/bw.py +52 -0
  1264. venv/Lib/site-packages/pygments/styles/coffee.py +80 -0
  1265. venv/Lib/site-packages/pygments/styles/colorful.py +83 -0
  1266. venv/Lib/site-packages/pygments/styles/default.py +76 -0
  1267. venv/Lib/site-packages/pygments/styles/dracula.py +90 -0
  1268. venv/Lib/site-packages/pygments/styles/emacs.py +75 -0
  1269. venv/Lib/site-packages/pygments/styles/friendly.py +76 -0
  1270. venv/Lib/site-packages/pygments/styles/friendly_grayscale.py +80 -0
  1271. venv/Lib/site-packages/pygments/styles/fruity.py +47 -0
  1272. venv/Lib/site-packages/pygments/styles/gh_dark.py +113 -0
  1273. venv/Lib/site-packages/pygments/styles/gruvbox.py +118 -0
  1274. venv/Lib/site-packages/pygments/styles/igor.py +32 -0
  1275. venv/Lib/site-packages/pygments/styles/inkpot.py +72 -0
  1276. venv/Lib/site-packages/pygments/styles/lightbulb.py +110 -0
  1277. venv/Lib/site-packages/pygments/styles/lilypond.py +62 -0
  1278. venv/Lib/site-packages/pygments/styles/lovelace.py +100 -0
  1279. venv/Lib/site-packages/pygments/styles/manni.py +79 -0
  1280. venv/Lib/site-packages/pygments/styles/material.py +124 -0
  1281. venv/Lib/site-packages/pygments/styles/monokai.py +112 -0
  1282. venv/Lib/site-packages/pygments/styles/murphy.py +82 -0
  1283. venv/Lib/site-packages/pygments/styles/native.py +70 -0
  1284. venv/Lib/site-packages/pygments/styles/nord.py +156 -0
  1285. venv/Lib/site-packages/pygments/styles/onedark.py +73 -0
  1286. venv/Lib/site-packages/pygments/styles/paraiso_dark.py +124 -0
  1287. venv/Lib/site-packages/pygments/styles/paraiso_light.py +124 -0
  1288. venv/Lib/site-packages/pygments/styles/pastie.py +78 -0
  1289. venv/Lib/site-packages/pygments/styles/perldoc.py +73 -0
  1290. venv/Lib/site-packages/pygments/styles/rainbow_dash.py +95 -0
  1291. venv/Lib/site-packages/pygments/styles/rrt.py +54 -0
  1292. venv/Lib/site-packages/pygments/styles/sas.py +46 -0
  1293. venv/Lib/site-packages/pygments/styles/solarized.py +144 -0
  1294. venv/Lib/site-packages/pygments/styles/staroffice.py +31 -0
  1295. venv/Lib/site-packages/pygments/styles/stata_dark.py +42 -0
  1296. venv/Lib/site-packages/pygments/styles/stata_light.py +42 -0
  1297. venv/Lib/site-packages/pygments/styles/tango.py +143 -0
  1298. venv/Lib/site-packages/pygments/styles/trac.py +66 -0
  1299. venv/Lib/site-packages/pygments/styles/vim.py +67 -0
  1300. venv/Lib/site-packages/pygments/styles/vs.py +41 -0
  1301. venv/Lib/site-packages/pygments/styles/xcode.py +53 -0
  1302. venv/Lib/site-packages/pygments/styles/zenburn.py +83 -0
  1303. venv/Lib/site-packages/pygments/token.py +214 -0
  1304. venv/Lib/site-packages/pygments/unistring.py +153 -0
  1305. venv/Lib/site-packages/pygments/util.py +324 -0
  1306. venv/Lib/site-packages/pyproject_hooks/__init__.py +31 -0
  1307. venv/Lib/site-packages/pyproject_hooks/_impl.py +410 -0
  1308. venv/Lib/site-packages/pyproject_hooks/_in_process/__init__.py +21 -0
  1309. venv/Lib/site-packages/pyproject_hooks/_in_process/_in_process.py +389 -0
  1310. venv/Lib/site-packages/pyproject_hooks/py.typed +0 -0
  1311. venv/Lib/site-packages/pytest/__init__.py +186 -0
  1312. venv/Lib/site-packages/pytest/__main__.py +9 -0
  1313. venv/Lib/site-packages/pytest/py.typed +0 -0
  1314. venv/Lib/site-packages/readme_renderer/__init__.py +13 -0
  1315. venv/Lib/site-packages/readme_renderer/__main__.py +66 -0
  1316. venv/Lib/site-packages/readme_renderer/clean.py +89 -0
  1317. venv/Lib/site-packages/readme_renderer/markdown.py +123 -0
  1318. venv/Lib/site-packages/readme_renderer/py.typed +0 -0
  1319. venv/Lib/site-packages/readme_renderer/rst.py +135 -0
  1320. venv/Lib/site-packages/readme_renderer/txt.py +24 -0
  1321. venv/Lib/site-packages/requests/__init__.py +183 -0
  1322. venv/Lib/site-packages/requests/__version__.py +14 -0
  1323. venv/Lib/site-packages/requests/_internal_utils.py +51 -0
  1324. venv/Lib/site-packages/requests/adapters.py +697 -0
  1325. venv/Lib/site-packages/requests/api.py +157 -0
  1326. venv/Lib/site-packages/requests/auth.py +314 -0
  1327. venv/Lib/site-packages/requests/certs.py +18 -0
  1328. venv/Lib/site-packages/requests/compat.py +106 -0
  1329. venv/Lib/site-packages/requests/cookies.py +561 -0
  1330. venv/Lib/site-packages/requests/exceptions.py +152 -0
  1331. venv/Lib/site-packages/requests/help.py +131 -0
  1332. venv/Lib/site-packages/requests/hooks.py +34 -0
  1333. venv/Lib/site-packages/requests/models.py +1041 -0
  1334. venv/Lib/site-packages/requests/packages.py +23 -0
  1335. venv/Lib/site-packages/requests/sessions.py +834 -0
  1336. venv/Lib/site-packages/requests/status_codes.py +128 -0
  1337. venv/Lib/site-packages/requests/structures.py +99 -0
  1338. venv/Lib/site-packages/requests/utils.py +1083 -0
  1339. venv/Lib/site-packages/requests_toolbelt/__init__.py +34 -0
  1340. venv/Lib/site-packages/requests_toolbelt/_compat.py +302 -0
  1341. venv/Lib/site-packages/requests_toolbelt/adapters/__init__.py +15 -0
  1342. venv/Lib/site-packages/requests_toolbelt/adapters/appengine.py +206 -0
  1343. venv/Lib/site-packages/requests_toolbelt/adapters/fingerprint.py +48 -0
  1344. venv/Lib/site-packages/requests_toolbelt/adapters/host_header_ssl.py +43 -0
  1345. venv/Lib/site-packages/requests_toolbelt/adapters/socket_options.py +129 -0
  1346. venv/Lib/site-packages/requests_toolbelt/adapters/source.py +67 -0
  1347. venv/Lib/site-packages/requests_toolbelt/adapters/ssl.py +66 -0
  1348. venv/Lib/site-packages/requests_toolbelt/adapters/x509.py +196 -0
  1349. venv/Lib/site-packages/requests_toolbelt/auth/__init__.py +0 -0
  1350. venv/Lib/site-packages/requests_toolbelt/auth/_digest_auth_compat.py +29 -0
  1351. venv/Lib/site-packages/requests_toolbelt/auth/guess.py +146 -0
  1352. venv/Lib/site-packages/requests_toolbelt/auth/handler.py +142 -0
  1353. venv/Lib/site-packages/requests_toolbelt/auth/http_proxy_digest.py +103 -0
  1354. venv/Lib/site-packages/requests_toolbelt/cookies/__init__.py +0 -0
  1355. venv/Lib/site-packages/requests_toolbelt/cookies/forgetful.py +7 -0
  1356. venv/Lib/site-packages/requests_toolbelt/downloadutils/__init__.py +0 -0
  1357. venv/Lib/site-packages/requests_toolbelt/downloadutils/stream.py +176 -0
  1358. venv/Lib/site-packages/requests_toolbelt/downloadutils/tee.py +123 -0
  1359. venv/Lib/site-packages/requests_toolbelt/exceptions.py +25 -0
  1360. venv/Lib/site-packages/requests_toolbelt/multipart/__init__.py +31 -0
  1361. venv/Lib/site-packages/requests_toolbelt/multipart/decoder.py +156 -0
  1362. venv/Lib/site-packages/requests_toolbelt/multipart/encoder.py +655 -0
  1363. venv/Lib/site-packages/requests_toolbelt/sessions.py +89 -0
  1364. venv/Lib/site-packages/requests_toolbelt/streaming_iterator.py +116 -0
  1365. venv/Lib/site-packages/requests_toolbelt/threaded/__init__.py +97 -0
  1366. venv/Lib/site-packages/requests_toolbelt/threaded/pool.py +211 -0
  1367. venv/Lib/site-packages/requests_toolbelt/threaded/thread.py +53 -0
  1368. venv/Lib/site-packages/requests_toolbelt/utils/__init__.py +0 -0
  1369. venv/Lib/site-packages/requests_toolbelt/utils/deprecated.py +91 -0
  1370. venv/Lib/site-packages/requests_toolbelt/utils/dump.py +198 -0
  1371. venv/Lib/site-packages/requests_toolbelt/utils/formdata.py +108 -0
  1372. venv/Lib/site-packages/requests_toolbelt/utils/user_agent.py +143 -0
  1373. venv/Lib/site-packages/rfc3986/__init__.py +53 -0
  1374. venv/Lib/site-packages/rfc3986/_mixin.py +373 -0
  1375. venv/Lib/site-packages/rfc3986/abnf_regexp.py +275 -0
  1376. venv/Lib/site-packages/rfc3986/api.py +104 -0
  1377. venv/Lib/site-packages/rfc3986/builder.py +388 -0
  1378. venv/Lib/site-packages/rfc3986/compat.py +59 -0
  1379. venv/Lib/site-packages/rfc3986/exceptions.py +120 -0
  1380. venv/Lib/site-packages/rfc3986/iri.py +161 -0
  1381. venv/Lib/site-packages/rfc3986/misc.py +131 -0
  1382. venv/Lib/site-packages/rfc3986/normalizers.py +171 -0
  1383. venv/Lib/site-packages/rfc3986/parseresult.py +474 -0
  1384. venv/Lib/site-packages/rfc3986/uri.py +160 -0
  1385. venv/Lib/site-packages/rfc3986/validators.py +440 -0
  1386. venv/Lib/site-packages/rich/__init__.py +177 -0
  1387. venv/Lib/site-packages/rich/__main__.py +245 -0
  1388. venv/Lib/site-packages/rich/_emoji_codes.py +3610 -0
  1389. venv/Lib/site-packages/rich/_emoji_replace.py +31 -0
  1390. venv/Lib/site-packages/rich/_export_format.py +76 -0
  1391. venv/Lib/site-packages/rich/_extension.py +10 -0
  1392. venv/Lib/site-packages/rich/_fileno.py +24 -0
  1393. venv/Lib/site-packages/rich/_inspect.py +272 -0
  1394. venv/Lib/site-packages/rich/_log_render.py +94 -0
  1395. venv/Lib/site-packages/rich/_loop.py +43 -0
  1396. venv/Lib/site-packages/rich/_null_file.py +69 -0
  1397. venv/Lib/site-packages/rich/_palettes.py +309 -0
  1398. venv/Lib/site-packages/rich/_pick.py +17 -0
  1399. venv/Lib/site-packages/rich/_ratio.py +153 -0
  1400. venv/Lib/site-packages/rich/_spinners.py +482 -0
  1401. venv/Lib/site-packages/rich/_stack.py +16 -0
  1402. venv/Lib/site-packages/rich/_timer.py +19 -0
  1403. venv/Lib/site-packages/rich/_unicode_data/__init__.py +93 -0
  1404. venv/Lib/site-packages/rich/_unicode_data/_versions.py +23 -0
  1405. venv/Lib/site-packages/rich/_unicode_data/unicode10-0-0.py +611 -0
  1406. venv/Lib/site-packages/rich/_unicode_data/unicode11-0-0.py +625 -0
  1407. venv/Lib/site-packages/rich/_unicode_data/unicode12-0-0.py +637 -0
  1408. venv/Lib/site-packages/rich/_unicode_data/unicode12-1-0.py +636 -0
  1409. venv/Lib/site-packages/rich/_unicode_data/unicode13-0-0.py +648 -0
  1410. venv/Lib/site-packages/rich/_unicode_data/unicode14-0-0.py +661 -0
  1411. venv/Lib/site-packages/rich/_unicode_data/unicode15-0-0.py +671 -0
  1412. venv/Lib/site-packages/rich/_unicode_data/unicode15-1-0.py +670 -0
  1413. venv/Lib/site-packages/rich/_unicode_data/unicode16-0-0.py +683 -0
  1414. venv/Lib/site-packages/rich/_unicode_data/unicode17-0-0.py +691 -0
  1415. venv/Lib/site-packages/rich/_unicode_data/unicode4-1-0.py +425 -0
  1416. venv/Lib/site-packages/rich/_unicode_data/unicode5-0-0.py +430 -0
  1417. venv/Lib/site-packages/rich/_unicode_data/unicode5-1-0.py +433 -0
  1418. venv/Lib/site-packages/rich/_unicode_data/unicode5-2-0.py +461 -0
  1419. venv/Lib/site-packages/rich/_unicode_data/unicode6-0-0.py +469 -0
  1420. venv/Lib/site-packages/rich/_unicode_data/unicode6-1-0.py +480 -0
  1421. venv/Lib/site-packages/rich/_unicode_data/unicode6-2-0.py +480 -0
  1422. venv/Lib/site-packages/rich/_unicode_data/unicode6-3-0.py +481 -0
  1423. venv/Lib/site-packages/rich/_unicode_data/unicode7-0-0.py +507 -0
  1424. venv/Lib/site-packages/rich/_unicode_data/unicode8-0-0.py +515 -0
  1425. venv/Lib/site-packages/rich/_unicode_data/unicode9-0-0.py +598 -0
  1426. venv/Lib/site-packages/rich/_win32_console.py +661 -0
  1427. venv/Lib/site-packages/rich/_windows.py +71 -0
  1428. venv/Lib/site-packages/rich/_windows_renderer.py +56 -0
  1429. venv/Lib/site-packages/rich/_wrap.py +93 -0
  1430. venv/Lib/site-packages/rich/abc.py +33 -0
  1431. venv/Lib/site-packages/rich/align.py +320 -0
  1432. venv/Lib/site-packages/rich/ansi.py +241 -0
  1433. venv/Lib/site-packages/rich/bar.py +93 -0
  1434. venv/Lib/site-packages/rich/box.py +474 -0
  1435. venv/Lib/site-packages/rich/cells.py +352 -0
  1436. venv/Lib/site-packages/rich/color.py +621 -0
  1437. venv/Lib/site-packages/rich/color_triplet.py +38 -0
  1438. venv/Lib/site-packages/rich/columns.py +187 -0
  1439. venv/Lib/site-packages/rich/console.py +2698 -0
  1440. venv/Lib/site-packages/rich/constrain.py +37 -0
  1441. venv/Lib/site-packages/rich/containers.py +167 -0
  1442. venv/Lib/site-packages/rich/control.py +219 -0
  1443. venv/Lib/site-packages/rich/default_styles.py +196 -0
  1444. venv/Lib/site-packages/rich/diagnose.py +39 -0
  1445. venv/Lib/site-packages/rich/emoji.py +93 -0
  1446. venv/Lib/site-packages/rich/errors.py +34 -0
  1447. venv/Lib/site-packages/rich/file_proxy.py +60 -0
  1448. venv/Lib/site-packages/rich/filesize.py +88 -0
  1449. venv/Lib/site-packages/rich/highlighter.py +232 -0
  1450. venv/Lib/site-packages/rich/json.py +139 -0
  1451. venv/Lib/site-packages/rich/jupyter.py +101 -0
  1452. venv/Lib/site-packages/rich/layout.py +442 -0
  1453. venv/Lib/site-packages/rich/live.py +404 -0
  1454. venv/Lib/site-packages/rich/live_render.py +116 -0
  1455. venv/Lib/site-packages/rich/logging.py +305 -0
  1456. venv/Lib/site-packages/rich/markdown.py +802 -0
  1457. venv/Lib/site-packages/rich/markup.py +251 -0
  1458. venv/Lib/site-packages/rich/measure.py +151 -0
  1459. venv/Lib/site-packages/rich/padding.py +141 -0
  1460. venv/Lib/site-packages/rich/pager.py +34 -0
  1461. venv/Lib/site-packages/rich/palette.py +100 -0
  1462. venv/Lib/site-packages/rich/panel.py +317 -0
  1463. venv/Lib/site-packages/rich/pretty.py +1016 -0
  1464. venv/Lib/site-packages/rich/progress.py +1716 -0
  1465. venv/Lib/site-packages/rich/progress_bar.py +223 -0
  1466. venv/Lib/site-packages/rich/prompt.py +400 -0
  1467. venv/Lib/site-packages/rich/protocol.py +41 -0
  1468. venv/Lib/site-packages/rich/py.typed +0 -0
  1469. venv/Lib/site-packages/rich/region.py +10 -0
  1470. venv/Lib/site-packages/rich/repr.py +150 -0
  1471. venv/Lib/site-packages/rich/rule.py +130 -0
  1472. venv/Lib/site-packages/rich/scope.py +92 -0
  1473. venv/Lib/site-packages/rich/screen.py +54 -0
  1474. venv/Lib/site-packages/rich/segment.py +780 -0
  1475. venv/Lib/site-packages/rich/spinner.py +132 -0
  1476. venv/Lib/site-packages/rich/status.py +131 -0
  1477. venv/Lib/site-packages/rich/style.py +796 -0
  1478. venv/Lib/site-packages/rich/styled.py +42 -0
  1479. venv/Lib/site-packages/rich/syntax.py +988 -0
  1480. venv/Lib/site-packages/rich/table.py +1015 -0
  1481. venv/Lib/site-packages/rich/terminal_theme.py +153 -0
  1482. venv/Lib/site-packages/rich/text.py +1363 -0
  1483. venv/Lib/site-packages/rich/theme.py +116 -0
  1484. venv/Lib/site-packages/rich/themes.py +5 -0
  1485. venv/Lib/site-packages/rich/traceback.py +924 -0
  1486. venv/Lib/site-packages/rich/tree.py +257 -0
  1487. venv/Lib/site-packages/twine/__init__.py +54 -0
  1488. venv/Lib/site-packages/twine/__main__.py +54 -0
  1489. venv/Lib/site-packages/twine/auth.py +307 -0
  1490. venv/Lib/site-packages/twine/cli.py +139 -0
  1491. venv/Lib/site-packages/twine/commands/__init__.py +93 -0
  1492. venv/Lib/site-packages/twine/commands/check.py +195 -0
  1493. venv/Lib/site-packages/twine/commands/register.py +87 -0
  1494. venv/Lib/site-packages/twine/commands/upload.py +253 -0
  1495. venv/Lib/site-packages/twine/distribution.py +8 -0
  1496. venv/Lib/site-packages/twine/exceptions.py +175 -0
  1497. venv/Lib/site-packages/twine/package.py +403 -0
  1498. venv/Lib/site-packages/twine/py.typed +0 -0
  1499. venv/Lib/site-packages/twine/repository.py +246 -0
  1500. venv/Lib/site-packages/twine/sdist.py +83 -0
  1501. venv/Lib/site-packages/twine/settings.py +360 -0
  1502. venv/Lib/site-packages/twine/utils.py +387 -0
  1503. venv/Lib/site-packages/twine/wheel.py +81 -0
  1504. venv/Lib/site-packages/typing_extensions.py +4317 -0
  1505. venv/Lib/site-packages/typing_inspection/__init__.py +0 -0
  1506. venv/Lib/site-packages/typing_inspection/introspection.py +587 -0
  1507. venv/Lib/site-packages/typing_inspection/py.typed +0 -0
  1508. venv/Lib/site-packages/typing_inspection/typing_objects.py +607 -0
  1509. venv/Lib/site-packages/typing_inspection/typing_objects.pyi +417 -0
  1510. venv/Lib/site-packages/urllib3/__init__.py +211 -0
  1511. venv/Lib/site-packages/urllib3/_base_connection.py +167 -0
  1512. venv/Lib/site-packages/urllib3/_collections.py +486 -0
  1513. venv/Lib/site-packages/urllib3/_request_methods.py +278 -0
  1514. venv/Lib/site-packages/urllib3/_version.py +24 -0
  1515. venv/Lib/site-packages/urllib3/connection.py +1099 -0
  1516. venv/Lib/site-packages/urllib3/connectionpool.py +1191 -0
  1517. venv/Lib/site-packages/urllib3/contrib/__init__.py +0 -0
  1518. venv/Lib/site-packages/urllib3/contrib/emscripten/__init__.py +17 -0
  1519. venv/Lib/site-packages/urllib3/contrib/emscripten/connection.py +260 -0
  1520. venv/Lib/site-packages/urllib3/contrib/emscripten/fetch.py +726 -0
  1521. venv/Lib/site-packages/urllib3/contrib/emscripten/request.py +22 -0
  1522. venv/Lib/site-packages/urllib3/contrib/emscripten/response.py +281 -0
  1523. venv/Lib/site-packages/urllib3/contrib/pyopenssl.py +563 -0
  1524. venv/Lib/site-packages/urllib3/contrib/socks.py +228 -0
  1525. venv/Lib/site-packages/urllib3/exceptions.py +335 -0
  1526. venv/Lib/site-packages/urllib3/fields.py +341 -0
  1527. venv/Lib/site-packages/urllib3/filepost.py +89 -0
  1528. venv/Lib/site-packages/urllib3/http2/__init__.py +53 -0
  1529. venv/Lib/site-packages/urllib3/http2/connection.py +356 -0
  1530. venv/Lib/site-packages/urllib3/http2/probe.py +87 -0
  1531. venv/Lib/site-packages/urllib3/poolmanager.py +653 -0
  1532. venv/Lib/site-packages/urllib3/py.typed +2 -0
  1533. venv/Lib/site-packages/urllib3/response.py +1493 -0
  1534. venv/Lib/site-packages/urllib3/util/__init__.py +42 -0
  1535. venv/Lib/site-packages/urllib3/util/connection.py +137 -0
  1536. venv/Lib/site-packages/urllib3/util/proxy.py +43 -0
  1537. venv/Lib/site-packages/urllib3/util/request.py +263 -0
  1538. venv/Lib/site-packages/urllib3/util/response.py +101 -0
  1539. venv/Lib/site-packages/urllib3/util/retry.py +557 -0
  1540. venv/Lib/site-packages/urllib3/util/ssl_.py +477 -0
  1541. venv/Lib/site-packages/urllib3/util/ssl_match_hostname.py +153 -0
  1542. venv/Lib/site-packages/urllib3/util/ssltransport.py +271 -0
  1543. venv/Lib/site-packages/urllib3/util/timeout.py +275 -0
  1544. venv/Lib/site-packages/urllib3/util/url.py +469 -0
  1545. venv/Lib/site-packages/urllib3/util/util.py +42 -0
  1546. venv/Lib/site-packages/urllib3/util/wait.py +124 -0
  1547. venv/Lib/site-packages/win32ctypes/__init__.py +8 -0
  1548. venv/Lib/site-packages/win32ctypes/core/__init__.py +60 -0
  1549. venv/Lib/site-packages/win32ctypes/core/_winerrors.py +9 -0
  1550. venv/Lib/site-packages/win32ctypes/core/cffi/__init__.py +11 -0
  1551. venv/Lib/site-packages/win32ctypes/core/cffi/_authentication.py +172 -0
  1552. venv/Lib/site-packages/win32ctypes/core/cffi/_common.py +29 -0
  1553. venv/Lib/site-packages/win32ctypes/core/cffi/_dll.py +30 -0
  1554. venv/Lib/site-packages/win32ctypes/core/cffi/_nl_support.py +18 -0
  1555. venv/Lib/site-packages/win32ctypes/core/cffi/_resource.py +132 -0
  1556. venv/Lib/site-packages/win32ctypes/core/cffi/_system_information.py +32 -0
  1557. venv/Lib/site-packages/win32ctypes/core/cffi/_time.py +18 -0
  1558. venv/Lib/site-packages/win32ctypes/core/cffi/_util.py +105 -0
  1559. venv/Lib/site-packages/win32ctypes/core/compat.py +10 -0
  1560. venv/Lib/site-packages/win32ctypes/core/ctypes/__init__.py +11 -0
  1561. venv/Lib/site-packages/win32ctypes/core/ctypes/_authentication.py +122 -0
  1562. venv/Lib/site-packages/win32ctypes/core/ctypes/_common.py +53 -0
  1563. venv/Lib/site-packages/win32ctypes/core/ctypes/_dll.py +21 -0
  1564. venv/Lib/site-packages/win32ctypes/core/ctypes/_nl_support.py +12 -0
  1565. venv/Lib/site-packages/win32ctypes/core/ctypes/_resource.py +148 -0
  1566. venv/Lib/site-packages/win32ctypes/core/ctypes/_system_information.py +36 -0
  1567. venv/Lib/site-packages/win32ctypes/core/ctypes/_time.py +15 -0
  1568. venv/Lib/site-packages/win32ctypes/core/ctypes/_util.py +78 -0
  1569. venv/Lib/site-packages/win32ctypes/pywin32/__init__.py +12 -0
  1570. venv/Lib/site-packages/win32ctypes/pywin32/pywintypes.py +67 -0
  1571. venv/Lib/site-packages/win32ctypes/pywin32/win32api.py +294 -0
  1572. venv/Lib/site-packages/win32ctypes/pywin32/win32cred.py +145 -0
  1573. venv/Lib/site-packages/win32ctypes/pywintypes.py +13 -0
  1574. venv/Lib/site-packages/win32ctypes/tests/__init__.py +21 -0
  1575. venv/Lib/site-packages/win32ctypes/tests/test_backends.py +36 -0
  1576. venv/Lib/site-packages/win32ctypes/tests/test_win32api.py +304 -0
  1577. venv/Lib/site-packages/win32ctypes/tests/test_win32cred.py +230 -0
  1578. venv/Lib/site-packages/win32ctypes/version.py +1 -0
  1579. venv/Lib/site-packages/win32ctypes/win32api.py +13 -0
  1580. venv/Lib/site-packages/win32ctypes/win32cred.py +13 -0
@@ -0,0 +1,1791 @@
1
+ # mypy: allow-untyped-defs
2
+ """(Disabled by default) support for testing pytest and pytest plugins.
3
+
4
+ PYTEST_DONT_REWRITE
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import collections.abc
10
+ from collections.abc import Callable
11
+ from collections.abc import Generator
12
+ from collections.abc import Iterable
13
+ from collections.abc import Sequence
14
+ import contextlib
15
+ from fnmatch import fnmatch
16
+ import gc
17
+ import importlib
18
+ from io import StringIO
19
+ import locale
20
+ import os
21
+ from pathlib import Path
22
+ import platform
23
+ import re
24
+ import shutil
25
+ import subprocess
26
+ import sys
27
+ import traceback
28
+ from typing import Any
29
+ from typing import Final
30
+ from typing import final
31
+ from typing import IO
32
+ from typing import Literal
33
+ from typing import overload
34
+ from typing import TextIO
35
+ from typing import TYPE_CHECKING
36
+ from weakref import WeakKeyDictionary
37
+
38
+ from iniconfig import IniConfig
39
+ from iniconfig import SectionWrapper
40
+
41
+ from _pytest import timing
42
+ from _pytest._code import Source
43
+ from _pytest.capture import _get_multicapture
44
+ from _pytest.compat import NOTSET
45
+ from _pytest.compat import NotSetType
46
+ from _pytest.config import _PluggyPlugin
47
+ from _pytest.config import Config
48
+ from _pytest.config import ExitCode
49
+ from _pytest.config import hookimpl
50
+ from _pytest.config import main
51
+ from _pytest.config import PytestPluginManager
52
+ from _pytest.config.argparsing import Parser
53
+ from _pytest.deprecated import check_ispytest
54
+ from _pytest.fixtures import fixture
55
+ from _pytest.fixtures import FixtureRequest
56
+ from _pytest.main import Session
57
+ from _pytest.monkeypatch import MonkeyPatch
58
+ from _pytest.nodes import Collector
59
+ from _pytest.nodes import Item
60
+ from _pytest.outcomes import fail
61
+ from _pytest.outcomes import importorskip
62
+ from _pytest.outcomes import skip
63
+ from _pytest.pathlib import bestrelpath
64
+ from _pytest.pathlib import make_numbered_dir
65
+ from _pytest.reports import CollectReport
66
+ from _pytest.reports import TestReport
67
+ from _pytest.tmpdir import TempPathFactory
68
+ from _pytest.warning_types import PytestFDWarning
69
+
70
+
71
+ if TYPE_CHECKING:
72
+ import pexpect
73
+
74
+
75
+ pytest_plugins = ["pytester_assertions"]
76
+
77
+
78
+ IGNORE_PAM = [ # filenames added when obtaining details about the current user
79
+ "/var/lib/sss/mc/passwd"
80
+ ]
81
+
82
+
83
+ def pytest_addoption(parser: Parser) -> None:
84
+ parser.addoption(
85
+ "--lsof",
86
+ action="store_true",
87
+ dest="lsof",
88
+ default=False,
89
+ help="Run FD checks if lsof is available",
90
+ )
91
+
92
+ parser.addoption(
93
+ "--runpytest",
94
+ default="inprocess",
95
+ dest="runpytest",
96
+ choices=("inprocess", "subprocess"),
97
+ help=(
98
+ "Run pytest sub runs in tests using an 'inprocess' "
99
+ "or 'subprocess' (python -m main) method"
100
+ ),
101
+ )
102
+
103
+ parser.addini(
104
+ "pytester_example_dir", help="Directory to take the pytester example files from"
105
+ )
106
+
107
+
108
+ def pytest_configure(config: Config) -> None:
109
+ if config.getvalue("lsof"):
110
+ checker = LsofFdLeakChecker()
111
+ if checker.matching_platform():
112
+ config.pluginmanager.register(checker)
113
+
114
+ config.addinivalue_line(
115
+ "markers",
116
+ "pytester_example_path(*path_segments): join the given path "
117
+ "segments to `pytester_example_dir` for this test.",
118
+ )
119
+
120
+
121
+ class LsofFdLeakChecker:
122
+ def get_open_files(self) -> list[tuple[str, str]]:
123
+ if sys.version_info >= (3, 11):
124
+ # New in Python 3.11, ignores utf-8 mode
125
+ encoding = locale.getencoding()
126
+ else:
127
+ encoding = locale.getpreferredencoding(False)
128
+ out = subprocess.run(
129
+ ("lsof", "-Ffn0", "-p", str(os.getpid())),
130
+ stdout=subprocess.PIPE,
131
+ stderr=subprocess.DEVNULL,
132
+ check=True,
133
+ text=True,
134
+ encoding=encoding,
135
+ ).stdout
136
+
137
+ def isopen(line: str) -> bool:
138
+ return line.startswith("f") and (
139
+ "deleted" not in line
140
+ and "mem" not in line
141
+ and "txt" not in line
142
+ and "cwd" not in line
143
+ )
144
+
145
+ open_files = []
146
+
147
+ for line in out.split("\n"):
148
+ if isopen(line):
149
+ fields = line.split("\0")
150
+ fd = fields[0][1:]
151
+ filename = fields[1][1:]
152
+ if filename in IGNORE_PAM:
153
+ continue
154
+ if filename.startswith("/"):
155
+ open_files.append((fd, filename))
156
+
157
+ return open_files
158
+
159
+ def matching_platform(self) -> bool:
160
+ try:
161
+ subprocess.run(("lsof", "-v"), check=True)
162
+ except (OSError, subprocess.CalledProcessError):
163
+ return False
164
+ else:
165
+ return True
166
+
167
+ @hookimpl(wrapper=True, tryfirst=True)
168
+ def pytest_runtest_protocol(self, item: Item) -> Generator[None, object, object]:
169
+ lines1 = self.get_open_files()
170
+ try:
171
+ return (yield)
172
+ finally:
173
+ if hasattr(sys, "pypy_version_info"):
174
+ gc.collect()
175
+ lines2 = self.get_open_files()
176
+
177
+ new_fds = {t[0] for t in lines2} - {t[0] for t in lines1}
178
+ leaked_files = [t for t in lines2 if t[0] in new_fds]
179
+ if leaked_files:
180
+ error = [
181
+ f"***** {len(leaked_files)} FD leakage detected",
182
+ *(str(f) for f in leaked_files),
183
+ "*** Before:",
184
+ *(str(f) for f in lines1),
185
+ "*** After:",
186
+ *(str(f) for f in lines2),
187
+ f"***** {len(leaked_files)} FD leakage detected",
188
+ "*** function {}:{}: {} ".format(*item.location),
189
+ "See issue #2366",
190
+ ]
191
+ item.warn(PytestFDWarning("\n".join(error)))
192
+
193
+
194
+ # used at least by pytest-xdist plugin
195
+
196
+
197
+ @fixture
198
+ def _pytest(request: FixtureRequest) -> PytestArg:
199
+ """Return a helper which offers a gethookrecorder(hook) method which
200
+ returns a HookRecorder instance which helps to make assertions about called
201
+ hooks."""
202
+ return PytestArg(request)
203
+
204
+
205
+ class PytestArg:
206
+ def __init__(self, request: FixtureRequest) -> None:
207
+ self._request = request
208
+
209
+ def gethookrecorder(self, hook) -> HookRecorder:
210
+ hookrecorder = HookRecorder(hook._pm)
211
+ self._request.addfinalizer(hookrecorder.finish_recording)
212
+ return hookrecorder
213
+
214
+
215
+ def get_public_names(values: Iterable[str]) -> list[str]:
216
+ """Only return names from iterator values without a leading underscore."""
217
+ return [x for x in values if x[0] != "_"]
218
+
219
+
220
+ @final
221
+ class RecordedHookCall:
222
+ """A recorded call to a hook.
223
+
224
+ The arguments to the hook call are set as attributes.
225
+ For example:
226
+
227
+ .. code-block:: python
228
+
229
+ calls = hook_recorder.getcalls("pytest_runtest_setup")
230
+ # Suppose pytest_runtest_setup was called once with `item=an_item`.
231
+ assert calls[0].item is an_item
232
+ """
233
+
234
+ def __init__(self, name: str, kwargs) -> None:
235
+ self.__dict__.update(kwargs)
236
+ self._name = name
237
+
238
+ def __repr__(self) -> str:
239
+ d = self.__dict__.copy()
240
+ del d["_name"]
241
+ return f"<RecordedHookCall {self._name!r}(**{d!r})>"
242
+
243
+ if TYPE_CHECKING:
244
+ # The class has undetermined attributes, this tells mypy about it.
245
+ def __getattr__(self, key: str): ...
246
+
247
+
248
+ @final
249
+ class HookRecorder:
250
+ """Record all hooks called in a plugin manager.
251
+
252
+ Hook recorders are created by :class:`Pytester`.
253
+
254
+ This wraps all the hook calls in the plugin manager, recording each call
255
+ before propagating the normal calls.
256
+ """
257
+
258
+ def __init__(
259
+ self, pluginmanager: PytestPluginManager, *, _ispytest: bool = False
260
+ ) -> None:
261
+ check_ispytest(_ispytest)
262
+
263
+ self._pluginmanager = pluginmanager
264
+ self.calls: list[RecordedHookCall] = []
265
+ self.ret: int | ExitCode | None = None
266
+
267
+ def before(hook_name: str, hook_impls, kwargs) -> None:
268
+ self.calls.append(RecordedHookCall(hook_name, kwargs))
269
+
270
+ def after(outcome, hook_name: str, hook_impls, kwargs) -> None:
271
+ pass
272
+
273
+ self._undo_wrapping = pluginmanager.add_hookcall_monitoring(before, after)
274
+
275
+ def finish_recording(self) -> None:
276
+ self._undo_wrapping()
277
+
278
+ def getcalls(self, names: str | Iterable[str]) -> list[RecordedHookCall]:
279
+ """Get all recorded calls to hooks with the given names (or name)."""
280
+ if isinstance(names, str):
281
+ names = names.split()
282
+ return [call for call in self.calls if call._name in names]
283
+
284
+ def assert_contains(self, entries: Sequence[tuple[str, str]]) -> None:
285
+ __tracebackhide__ = True
286
+ i = 0
287
+ entries = list(entries)
288
+ # Since Python 3.13, f_locals is not a dict, but eval requires a dict.
289
+ backlocals = dict(sys._getframe(1).f_locals)
290
+ while entries:
291
+ name, check = entries.pop(0)
292
+ for ind, call in enumerate(self.calls[i:]):
293
+ if call._name == name:
294
+ print("NAMEMATCH", name, call)
295
+ if eval(check, backlocals, call.__dict__):
296
+ print("CHECKERMATCH", repr(check), "->", call)
297
+ else:
298
+ print("NOCHECKERMATCH", repr(check), "-", call)
299
+ continue
300
+ i += ind + 1
301
+ break
302
+ print("NONAMEMATCH", name, "with", call)
303
+ else:
304
+ fail(f"could not find {name!r} check {check!r}")
305
+
306
+ def popcall(self, name: str) -> RecordedHookCall:
307
+ __tracebackhide__ = True
308
+ for i, call in enumerate(self.calls):
309
+ if call._name == name:
310
+ del self.calls[i]
311
+ return call
312
+ lines = [f"could not find call {name!r}, in:"]
313
+ lines.extend([f" {x}" for x in self.calls])
314
+ fail("\n".join(lines))
315
+
316
+ def getcall(self, name: str) -> RecordedHookCall:
317
+ values = self.getcalls(name)
318
+ assert len(values) == 1, (name, values)
319
+ return values[0]
320
+
321
+ # functionality for test reports
322
+
323
+ @overload
324
+ def getreports(
325
+ self,
326
+ names: Literal["pytest_collectreport"],
327
+ ) -> Sequence[CollectReport]: ...
328
+
329
+ @overload
330
+ def getreports(
331
+ self,
332
+ names: Literal["pytest_runtest_logreport"],
333
+ ) -> Sequence[TestReport]: ...
334
+
335
+ @overload
336
+ def getreports(
337
+ self,
338
+ names: str | Iterable[str] = (
339
+ "pytest_collectreport",
340
+ "pytest_runtest_logreport",
341
+ ),
342
+ ) -> Sequence[CollectReport | TestReport]: ...
343
+
344
+ def getreports(
345
+ self,
346
+ names: str | Iterable[str] = (
347
+ "pytest_collectreport",
348
+ "pytest_runtest_logreport",
349
+ ),
350
+ ) -> Sequence[CollectReport | TestReport]:
351
+ return [x.report for x in self.getcalls(names)]
352
+
353
+ def matchreport(
354
+ self,
355
+ inamepart: str = "",
356
+ names: str | Iterable[str] = (
357
+ "pytest_runtest_logreport",
358
+ "pytest_collectreport",
359
+ ),
360
+ when: str | None = None,
361
+ ) -> CollectReport | TestReport:
362
+ """Return a testreport whose dotted import path matches."""
363
+ values = []
364
+ for rep in self.getreports(names=names):
365
+ if not when and rep.when != "call" and rep.passed:
366
+ # setup/teardown passing reports - let's ignore those
367
+ continue
368
+ if when and rep.when != when:
369
+ continue
370
+ if not inamepart or inamepart in rep.nodeid.split("::"):
371
+ values.append(rep)
372
+ if not values:
373
+ raise ValueError(
374
+ f"could not find test report matching {inamepart!r}: "
375
+ "no test reports at all!"
376
+ )
377
+ if len(values) > 1:
378
+ raise ValueError(
379
+ f"found 2 or more testreports matching {inamepart!r}: {values}"
380
+ )
381
+ return values[0]
382
+
383
+ @overload
384
+ def getfailures(
385
+ self,
386
+ names: Literal["pytest_collectreport"],
387
+ ) -> Sequence[CollectReport]: ...
388
+
389
+ @overload
390
+ def getfailures(
391
+ self,
392
+ names: Literal["pytest_runtest_logreport"],
393
+ ) -> Sequence[TestReport]: ...
394
+
395
+ @overload
396
+ def getfailures(
397
+ self,
398
+ names: str | Iterable[str] = (
399
+ "pytest_collectreport",
400
+ "pytest_runtest_logreport",
401
+ ),
402
+ ) -> Sequence[CollectReport | TestReport]: ...
403
+
404
+ def getfailures(
405
+ self,
406
+ names: str | Iterable[str] = (
407
+ "pytest_collectreport",
408
+ "pytest_runtest_logreport",
409
+ ),
410
+ ) -> Sequence[CollectReport | TestReport]:
411
+ return [rep for rep in self.getreports(names) if rep.failed]
412
+
413
+ def getfailedcollections(self) -> Sequence[CollectReport]:
414
+ return self.getfailures("pytest_collectreport")
415
+
416
+ def listoutcomes(
417
+ self,
418
+ ) -> tuple[
419
+ Sequence[TestReport],
420
+ Sequence[CollectReport | TestReport],
421
+ Sequence[CollectReport | TestReport],
422
+ ]:
423
+ passed = []
424
+ skipped = []
425
+ failed = []
426
+ for rep in self.getreports(
427
+ ("pytest_collectreport", "pytest_runtest_logreport")
428
+ ):
429
+ if rep.passed:
430
+ if rep.when == "call":
431
+ assert isinstance(rep, TestReport)
432
+ passed.append(rep)
433
+ elif rep.skipped:
434
+ skipped.append(rep)
435
+ else:
436
+ assert rep.failed, f"Unexpected outcome: {rep!r}"
437
+ failed.append(rep)
438
+ return passed, skipped, failed
439
+
440
+ def countoutcomes(self) -> list[int]:
441
+ return [len(x) for x in self.listoutcomes()]
442
+
443
+ def assertoutcome(self, passed: int = 0, skipped: int = 0, failed: int = 0) -> None:
444
+ __tracebackhide__ = True
445
+ from _pytest.pytester_assertions import assertoutcome
446
+
447
+ outcomes = self.listoutcomes()
448
+ assertoutcome(
449
+ outcomes,
450
+ passed=passed,
451
+ skipped=skipped,
452
+ failed=failed,
453
+ )
454
+
455
+ def clear(self) -> None:
456
+ self.calls[:] = []
457
+
458
+
459
+ @fixture
460
+ def linecomp() -> LineComp:
461
+ """A :class: `LineComp` instance for checking that an input linearly
462
+ contains a sequence of strings."""
463
+ return LineComp()
464
+
465
+
466
+ @fixture(name="LineMatcher")
467
+ def LineMatcher_fixture(request: FixtureRequest) -> type[LineMatcher]:
468
+ """A reference to the :class: `LineMatcher`.
469
+
470
+ This is instantiable with a list of lines (without their trailing newlines).
471
+ This is useful for testing large texts, such as the output of commands.
472
+ """
473
+ return LineMatcher
474
+
475
+
476
+ @fixture
477
+ def pytester(
478
+ request: FixtureRequest, tmp_path_factory: TempPathFactory, monkeypatch: MonkeyPatch
479
+ ) -> Pytester:
480
+ """
481
+ Facilities to write tests/configuration files, execute pytest in isolation, and match
482
+ against expected output, perfect for black-box testing of pytest plugins.
483
+
484
+ It attempts to isolate the test run from external factors as much as possible, modifying
485
+ the current working directory to ``path`` and environment variables during initialization.
486
+
487
+ It is particularly useful for testing plugins. It is similar to the :fixture:`tmp_path`
488
+ fixture but provides methods which aid in testing pytest itself.
489
+ """
490
+ return Pytester(request, tmp_path_factory, monkeypatch, _ispytest=True)
491
+
492
+
493
+ @fixture
494
+ def _sys_snapshot() -> Generator[None]:
495
+ snappaths = SysPathsSnapshot()
496
+ snapmods = SysModulesSnapshot()
497
+ yield
498
+ snapmods.restore()
499
+ snappaths.restore()
500
+
501
+
502
+ @fixture
503
+ def _config_for_test() -> Generator[Config]:
504
+ from _pytest.config import get_config
505
+
506
+ config = get_config()
507
+ yield config
508
+ config._ensure_unconfigure() # cleanup, e.g. capman closing tmpfiles.
509
+
510
+
511
+ # Regex to match the session duration string in the summary: "74.34s".
512
+ rex_session_duration = re.compile(r"\d+\.\d\ds")
513
+ # Regex to match all the counts and phrases in the summary line: "34 passed, 111 skipped".
514
+ rex_outcome = re.compile(r"(\d+) (\w+)")
515
+
516
+
517
+ @final
518
+ class RunResult:
519
+ """The result of running a command from :class:`~pytest.Pytester`."""
520
+
521
+ def __init__(
522
+ self,
523
+ ret: int | ExitCode,
524
+ outlines: list[str],
525
+ errlines: list[str],
526
+ duration: float,
527
+ ) -> None:
528
+ try:
529
+ self.ret: int | ExitCode = ExitCode(ret)
530
+ """The return value."""
531
+ except ValueError:
532
+ self.ret = ret
533
+ self.outlines = outlines
534
+ """List of lines captured from stdout."""
535
+ self.errlines = errlines
536
+ """List of lines captured from stderr."""
537
+ self.stdout = LineMatcher(outlines)
538
+ """:class:`~pytest.LineMatcher` of stdout.
539
+
540
+ Use e.g. :func:`str(stdout) <pytest.LineMatcher.__str__()>` to reconstruct stdout, or the commonly used
541
+ :func:`stdout.fnmatch_lines() <pytest.LineMatcher.fnmatch_lines()>` method.
542
+ """
543
+ self.stderr = LineMatcher(errlines)
544
+ """:class:`~pytest.LineMatcher` of stderr."""
545
+ self.duration = duration
546
+ """Duration in seconds."""
547
+
548
+ def __repr__(self) -> str:
549
+ return (
550
+ f"<RunResult ret={self.ret!s} "
551
+ f"len(stdout.lines)={len(self.stdout.lines)} "
552
+ f"len(stderr.lines)={len(self.stderr.lines)} "
553
+ f"duration={self.duration:.2f}s>"
554
+ )
555
+
556
+ def parseoutcomes(self) -> dict[str, int]:
557
+ """Return a dictionary of outcome noun -> count from parsing the terminal
558
+ output that the test process produced.
559
+
560
+ The returned nouns will always be in plural form::
561
+
562
+ ======= 1 failed, 1 passed, 1 warning, 1 error in 0.13s ====
563
+
564
+ Will return ``{"failed": 1, "passed": 1, "warnings": 1, "errors": 1}``.
565
+ """
566
+ return self.parse_summary_nouns(self.outlines)
567
+
568
+ @classmethod
569
+ def parse_summary_nouns(cls, lines) -> dict[str, int]:
570
+ """Extract the nouns from a pytest terminal summary line.
571
+
572
+ It always returns the plural noun for consistency::
573
+
574
+ ======= 1 failed, 1 passed, 1 warning, 1 error in 0.13s ====
575
+
576
+ Will return ``{"failed": 1, "passed": 1, "warnings": 1, "errors": 1}``.
577
+ """
578
+ for line in reversed(lines):
579
+ if rex_session_duration.search(line):
580
+ outcomes = rex_outcome.findall(line)
581
+ ret = {noun: int(count) for (count, noun) in outcomes}
582
+ break
583
+ else:
584
+ raise ValueError("Pytest terminal summary report not found")
585
+
586
+ to_plural = {
587
+ "warning": "warnings",
588
+ "error": "errors",
589
+ }
590
+ return {to_plural.get(k, k): v for k, v in ret.items()}
591
+
592
+ def assert_outcomes(
593
+ self,
594
+ passed: int = 0,
595
+ skipped: int = 0,
596
+ failed: int = 0,
597
+ errors: int = 0,
598
+ xpassed: int = 0,
599
+ xfailed: int = 0,
600
+ warnings: int | None = None,
601
+ deselected: int | None = None,
602
+ ) -> None:
603
+ """
604
+ Assert that the specified outcomes appear with the respective
605
+ numbers (0 means it didn't occur) in the text output from a test run.
606
+
607
+ ``warnings`` and ``deselected`` are only checked if not None.
608
+ """
609
+ __tracebackhide__ = True
610
+ from _pytest.pytester_assertions import assert_outcomes
611
+
612
+ outcomes = self.parseoutcomes()
613
+ assert_outcomes(
614
+ outcomes,
615
+ passed=passed,
616
+ skipped=skipped,
617
+ failed=failed,
618
+ errors=errors,
619
+ xpassed=xpassed,
620
+ xfailed=xfailed,
621
+ warnings=warnings,
622
+ deselected=deselected,
623
+ )
624
+
625
+
626
+ class SysModulesSnapshot:
627
+ def __init__(self, preserve: Callable[[str], bool] | None = None) -> None:
628
+ self.__preserve = preserve
629
+ self.__saved = dict(sys.modules)
630
+
631
+ def restore(self) -> None:
632
+ if self.__preserve:
633
+ self.__saved.update(
634
+ (k, m) for k, m in sys.modules.items() if self.__preserve(k)
635
+ )
636
+ sys.modules.clear()
637
+ sys.modules.update(self.__saved)
638
+
639
+
640
+ class SysPathsSnapshot:
641
+ def __init__(self) -> None:
642
+ self.__saved = list(sys.path), list(sys.meta_path)
643
+
644
+ def restore(self) -> None:
645
+ sys.path[:], sys.meta_path[:] = self.__saved
646
+
647
+
648
+ @final
649
+ class Pytester:
650
+ """
651
+ Facilities to write tests/configuration files, execute pytest in isolation, and match
652
+ against expected output, perfect for black-box testing of pytest plugins.
653
+
654
+ It attempts to isolate the test run from external factors as much as possible, modifying
655
+ the current working directory to :attr:`path` and environment variables during initialization.
656
+ """
657
+
658
+ __test__ = False
659
+
660
+ CLOSE_STDIN: Final = NOTSET
661
+
662
+ class TimeoutExpired(Exception):
663
+ pass
664
+
665
+ def __init__(
666
+ self,
667
+ request: FixtureRequest,
668
+ tmp_path_factory: TempPathFactory,
669
+ monkeypatch: MonkeyPatch,
670
+ *,
671
+ _ispytest: bool = False,
672
+ ) -> None:
673
+ check_ispytest(_ispytest)
674
+ self._request = request
675
+ self._mod_collections: WeakKeyDictionary[Collector, list[Item | Collector]] = (
676
+ WeakKeyDictionary()
677
+ )
678
+ if request.function:
679
+ name: str = request.function.__name__
680
+ else:
681
+ name = request.node.name
682
+ self._name = name
683
+ self._path: Path = tmp_path_factory.mktemp(name, numbered=True)
684
+ #: A list of plugins to use with :py:meth:`parseconfig` and
685
+ #: :py:meth:`runpytest`. Initially this is an empty list but plugins can
686
+ #: be added to the list.
687
+ #:
688
+ #: When running in subprocess mode, specify plugins by name (str) - adding
689
+ #: plugin objects directly is not supported.
690
+ self.plugins: list[str | _PluggyPlugin] = []
691
+ self._sys_path_snapshot = SysPathsSnapshot()
692
+ self._sys_modules_snapshot = self.__take_sys_modules_snapshot()
693
+ self._request.addfinalizer(self._finalize)
694
+ self._method = self._request.config.getoption("--runpytest")
695
+ self._test_tmproot = tmp_path_factory.mktemp(f"tmp-{name}", numbered=True)
696
+
697
+ self._monkeypatch = mp = monkeypatch
698
+ self.chdir()
699
+ mp.setenv("PYTEST_DEBUG_TEMPROOT", str(self._test_tmproot))
700
+ # Ensure no unexpected caching via tox.
701
+ mp.delenv("TOX_ENV_DIR", raising=False)
702
+ # Discard outer pytest options.
703
+ mp.delenv("PYTEST_ADDOPTS", raising=False)
704
+ # Ensure no user config is used.
705
+ tmphome = str(self.path)
706
+ mp.setenv("HOME", tmphome)
707
+ mp.setenv("USERPROFILE", tmphome)
708
+ # Do not use colors for inner runs by default.
709
+ mp.setenv("PY_COLORS", "0")
710
+
711
+ @property
712
+ def path(self) -> Path:
713
+ """Temporary directory path used to create files/run tests from, etc."""
714
+ return self._path
715
+
716
+ def __repr__(self) -> str:
717
+ return f"<Pytester {self.path!r}>"
718
+
719
+ def _finalize(self) -> None:
720
+ """
721
+ Clean up global state artifacts.
722
+
723
+ Some methods modify the global interpreter state and this tries to
724
+ clean this up. It does not remove the temporary directory however so
725
+ it can be looked at after the test run has finished.
726
+ """
727
+ self._sys_modules_snapshot.restore()
728
+ self._sys_path_snapshot.restore()
729
+
730
+ def __take_sys_modules_snapshot(self) -> SysModulesSnapshot:
731
+ # Some zope modules used by twisted-related tests keep internal state
732
+ # and can't be deleted; we had some trouble in the past with
733
+ # `zope.interface` for example.
734
+ #
735
+ # Preserve readline due to https://bugs.python.org/issue41033.
736
+ # pexpect issues a SIGWINCH.
737
+ def preserve_module(name):
738
+ return name.startswith(("zope", "readline"))
739
+
740
+ return SysModulesSnapshot(preserve=preserve_module)
741
+
742
+ def make_hook_recorder(self, pluginmanager: PytestPluginManager) -> HookRecorder:
743
+ """Create a new :class:`HookRecorder` for a :class:`PytestPluginManager`."""
744
+ pluginmanager.reprec = reprec = HookRecorder(pluginmanager, _ispytest=True) # type: ignore[attr-defined]
745
+ self._request.addfinalizer(reprec.finish_recording)
746
+ return reprec
747
+
748
+ def chdir(self) -> None:
749
+ """Cd into the temporary directory.
750
+
751
+ This is done automatically upon instantiation.
752
+ """
753
+ self._monkeypatch.chdir(self.path)
754
+
755
+ def _makefile(
756
+ self,
757
+ ext: str,
758
+ lines: Sequence[Any | bytes],
759
+ files: dict[str, str],
760
+ encoding: str = "utf-8",
761
+ ) -> Path:
762
+ items = list(files.items())
763
+
764
+ if ext is None:
765
+ raise TypeError("ext must not be None")
766
+
767
+ if ext and not ext.startswith("."):
768
+ raise ValueError(
769
+ f"pytester.makefile expects a file extension, try .{ext} instead of {ext}"
770
+ )
771
+
772
+ def to_text(s: Any | bytes) -> str:
773
+ return s.decode(encoding) if isinstance(s, bytes) else str(s)
774
+
775
+ if lines:
776
+ source = "\n".join(to_text(x) for x in lines)
777
+ basename = self._name
778
+ items.insert(0, (basename, source))
779
+
780
+ ret = None
781
+ for basename, value in items:
782
+ p = self.path.joinpath(basename).with_suffix(ext)
783
+ p.parent.mkdir(parents=True, exist_ok=True)
784
+ source_ = Source(value)
785
+ source = "\n".join(to_text(line) for line in source_.lines)
786
+ p.write_text(source.strip(), encoding=encoding)
787
+ if ret is None:
788
+ ret = p
789
+ assert ret is not None
790
+ return ret
791
+
792
+ def makefile(self, ext: str, *args: str, **kwargs: str) -> Path:
793
+ r"""Create new text file(s) in the test directory.
794
+
795
+ :param ext:
796
+ The extension the file(s) should use, including the dot, e.g. `.py`.
797
+ :param args:
798
+ All args are treated as strings and joined using newlines.
799
+ The result is written as contents to the file. The name of the
800
+ file is based on the test function requesting this fixture.
801
+ :param kwargs:
802
+ Each keyword is the name of a file, while the value of it will
803
+ be written as contents of the file.
804
+ :returns:
805
+ The first created file.
806
+
807
+ Examples:
808
+
809
+ .. code-block:: python
810
+
811
+ pytester.makefile(".txt", "line1", "line2")
812
+
813
+ pytester.makefile(".ini", pytest="[pytest]\naddopts=-rs\n")
814
+
815
+ To create binary files, use :meth:`pathlib.Path.write_bytes` directly:
816
+
817
+ .. code-block:: python
818
+
819
+ filename = pytester.path.joinpath("foo.bin")
820
+ filename.write_bytes(b"...")
821
+ """
822
+ return self._makefile(ext, args, kwargs)
823
+
824
+ def makeconftest(self, source: str) -> Path:
825
+ """Write a conftest.py file.
826
+
827
+ :param source: The contents.
828
+ :returns: The conftest.py file.
829
+ """
830
+ return self.makepyfile(conftest=source)
831
+
832
+ def makeini(self, source: str) -> Path:
833
+ """Write a tox.ini file.
834
+
835
+ :param source: The contents.
836
+ :returns: The tox.ini file.
837
+ """
838
+ return self.makefile(".ini", tox=source)
839
+
840
+ def maketoml(self, source: str) -> Path:
841
+ """Write a pytest.toml file.
842
+
843
+ :param source: The contents.
844
+ :returns: The pytest.toml file.
845
+
846
+ .. versionadded:: 9.0
847
+ """
848
+ return self.makefile(".toml", pytest=source)
849
+
850
+ def getinicfg(self, source: str) -> SectionWrapper:
851
+ """Return the pytest section from the tox.ini config file."""
852
+ p = self.makeini(source)
853
+ return IniConfig(str(p))["pytest"]
854
+
855
+ def makepyprojecttoml(self, source: str) -> Path:
856
+ """Write a pyproject.toml file.
857
+
858
+ :param source: The contents.
859
+ :returns: The pyproject.ini file.
860
+
861
+ .. versionadded:: 6.0
862
+ """
863
+ return self.makefile(".toml", pyproject=source)
864
+
865
+ def makepyfile(self, *args, **kwargs) -> Path:
866
+ r"""Shortcut for .makefile() with a .py extension.
867
+
868
+ Defaults to the test name with a '.py' extension, e.g test_foobar.py, overwriting
869
+ existing files.
870
+
871
+ Examples:
872
+
873
+ .. code-block:: python
874
+
875
+ def test_something(pytester):
876
+ # Initial file is created test_something.py.
877
+ pytester.makepyfile("foobar")
878
+ # To create multiple files, pass kwargs accordingly.
879
+ pytester.makepyfile(custom="foobar")
880
+ # At this point, both 'test_something.py' & 'custom.py' exist in the test directory.
881
+
882
+ """
883
+ return self._makefile(".py", args, kwargs)
884
+
885
+ def maketxtfile(self, *args, **kwargs) -> Path:
886
+ r"""Shortcut for .makefile() with a .txt extension.
887
+
888
+ Defaults to the test name with a '.txt' extension, e.g test_foobar.txt, overwriting
889
+ existing files.
890
+
891
+ Examples:
892
+
893
+ .. code-block:: python
894
+
895
+ def test_something(pytester):
896
+ # Initial file is created test_something.txt.
897
+ pytester.maketxtfile("foobar")
898
+ # To create multiple files, pass kwargs accordingly.
899
+ pytester.maketxtfile(custom="foobar")
900
+ # At this point, both 'test_something.txt' & 'custom.txt' exist in the test directory.
901
+
902
+ """
903
+ return self._makefile(".txt", args, kwargs)
904
+
905
+ def syspathinsert(self, path: str | os.PathLike[str] | None = None) -> None:
906
+ """Prepend a directory to sys.path, defaults to :attr:`path`.
907
+
908
+ This is undone automatically when this object dies at the end of each
909
+ test.
910
+
911
+ :param path:
912
+ The path.
913
+ """
914
+ if path is None:
915
+ path = self.path
916
+
917
+ self._monkeypatch.syspath_prepend(str(path))
918
+
919
+ def mkdir(self, name: str | os.PathLike[str]) -> Path:
920
+ """Create a new (sub)directory.
921
+
922
+ :param name:
923
+ The name of the directory, relative to the pytester path.
924
+ :returns:
925
+ The created directory.
926
+ :rtype: pathlib.Path
927
+ """
928
+ p = self.path / name
929
+ p.mkdir()
930
+ return p
931
+
932
+ def mkpydir(self, name: str | os.PathLike[str]) -> Path:
933
+ """Create a new python package.
934
+
935
+ This creates a (sub)directory with an empty ``__init__.py`` file so it
936
+ gets recognised as a Python package.
937
+ """
938
+ p = self.path / name
939
+ p.mkdir()
940
+ p.joinpath("__init__.py").touch()
941
+ return p
942
+
943
+ def copy_example(self, name: str | None = None) -> Path:
944
+ """Copy file from project's directory into the testdir.
945
+
946
+ :param name:
947
+ The name of the file to copy.
948
+ :return:
949
+ Path to the copied directory (inside ``self.path``).
950
+ :rtype: pathlib.Path
951
+ """
952
+ example_dir_ = self._request.config.getini("pytester_example_dir")
953
+ if example_dir_ is None:
954
+ raise ValueError("pytester_example_dir is unset, can't copy examples")
955
+ example_dir: Path = self._request.config.rootpath / example_dir_
956
+
957
+ for extra_element in self._request.node.iter_markers("pytester_example_path"):
958
+ assert extra_element.args
959
+ example_dir = example_dir.joinpath(*extra_element.args)
960
+
961
+ if name is None:
962
+ func_name = self._name
963
+ maybe_dir = example_dir / func_name
964
+ maybe_file = example_dir / (func_name + ".py")
965
+
966
+ if maybe_dir.is_dir():
967
+ example_path = maybe_dir
968
+ elif maybe_file.is_file():
969
+ example_path = maybe_file
970
+ else:
971
+ raise LookupError(
972
+ f"{func_name} can't be found as module or package in {example_dir}"
973
+ )
974
+ else:
975
+ example_path = example_dir.joinpath(name)
976
+
977
+ if example_path.is_dir() and not example_path.joinpath("__init__.py").is_file():
978
+ shutil.copytree(example_path, self.path, symlinks=True, dirs_exist_ok=True)
979
+ return self.path
980
+ elif example_path.is_file():
981
+ result = self.path.joinpath(example_path.name)
982
+ shutil.copy(example_path, result)
983
+ return result
984
+ else:
985
+ raise LookupError(
986
+ f'example "{example_path}" is not found as a file or directory'
987
+ )
988
+
989
+ def getnode(self, config: Config, arg: str | os.PathLike[str]) -> Collector | Item:
990
+ """Get the collection node of a file.
991
+
992
+ :param config:
993
+ A pytest config.
994
+ See :py:meth:`parseconfig` and :py:meth:`parseconfigure` for creating it.
995
+ :param arg:
996
+ Path to the file.
997
+ :returns:
998
+ The node.
999
+ """
1000
+ session = Session.from_config(config)
1001
+ assert "::" not in str(arg)
1002
+ p = Path(os.path.abspath(arg))
1003
+ config.hook.pytest_sessionstart(session=session)
1004
+ res = session.perform_collect([str(p)], genitems=False)[0]
1005
+ config.hook.pytest_sessionfinish(session=session, exitstatus=ExitCode.OK)
1006
+ return res
1007
+
1008
+ def getpathnode(self, path: str | os.PathLike[str]) -> Collector | Item:
1009
+ """Return the collection node of a file.
1010
+
1011
+ This is like :py:meth:`getnode` but uses :py:meth:`parseconfigure` to
1012
+ create the (configured) pytest Config instance.
1013
+
1014
+ :param path:
1015
+ Path to the file.
1016
+ :returns:
1017
+ The node.
1018
+ """
1019
+ path = Path(path)
1020
+ config = self.parseconfigure(path)
1021
+ session = Session.from_config(config)
1022
+ x = bestrelpath(session.path, path)
1023
+ config.hook.pytest_sessionstart(session=session)
1024
+ res = session.perform_collect([x], genitems=False)[0]
1025
+ config.hook.pytest_sessionfinish(session=session, exitstatus=ExitCode.OK)
1026
+ return res
1027
+
1028
+ def genitems(self, colitems: Sequence[Item | Collector]) -> list[Item]:
1029
+ """Generate all test items from a collection node.
1030
+
1031
+ This recurses into the collection node and returns a list of all the
1032
+ test items contained within.
1033
+
1034
+ :param colitems:
1035
+ The collection nodes.
1036
+ :returns:
1037
+ The collected items.
1038
+ """
1039
+ session = colitems[0].session
1040
+ result: list[Item] = []
1041
+ for colitem in colitems:
1042
+ result.extend(session.genitems(colitem))
1043
+ return result
1044
+
1045
+ def runitem(self, source: str) -> Any:
1046
+ """Run the "test_func" Item.
1047
+
1048
+ The calling test instance (class containing the test method) must
1049
+ provide a ``.getrunner()`` method which should return a runner which
1050
+ can run the test protocol for a single item, e.g.
1051
+ ``_pytest.runner.runtestprotocol``.
1052
+ """
1053
+ # used from runner functional tests
1054
+ item = self.getitem(source)
1055
+ # the test class where we are called from wants to provide the runner
1056
+ testclassinstance = self._request.instance
1057
+ runner = testclassinstance.getrunner()
1058
+ return runner(item)
1059
+
1060
+ def inline_runsource(self, source: str, *cmdlineargs) -> HookRecorder:
1061
+ """Run a test module in process using ``pytest.main()``.
1062
+
1063
+ This run writes "source" into a temporary file and runs
1064
+ ``pytest.main()`` on it, returning a :py:class:`HookRecorder` instance
1065
+ for the result.
1066
+
1067
+ :param source: The source code of the test module.
1068
+ :param cmdlineargs: Any extra command line arguments to use.
1069
+ """
1070
+ p = self.makepyfile(source)
1071
+ values = [*list(cmdlineargs), p]
1072
+ return self.inline_run(*values)
1073
+
1074
+ def inline_genitems(self, *args) -> tuple[list[Item], HookRecorder]:
1075
+ """Run ``pytest.main(['--collect-only'])`` in-process.
1076
+
1077
+ Runs the :py:func:`pytest.main` function to run all of pytest inside
1078
+ the test process itself like :py:meth:`inline_run`, but returns a
1079
+ tuple of the collected items and a :py:class:`HookRecorder` instance.
1080
+ """
1081
+ rec = self.inline_run("--collect-only", *args)
1082
+ items = [x.item for x in rec.getcalls("pytest_itemcollected")]
1083
+ return items, rec
1084
+
1085
+ def inline_run(
1086
+ self,
1087
+ *args: str | os.PathLike[str],
1088
+ plugins=(),
1089
+ no_reraise_ctrlc: bool = False,
1090
+ ) -> HookRecorder:
1091
+ """Run ``pytest.main()`` in-process, returning a HookRecorder.
1092
+
1093
+ Runs the :py:func:`pytest.main` function to run all of pytest inside
1094
+ the test process itself. This means it can return a
1095
+ :py:class:`HookRecorder` instance which gives more detailed results
1096
+ from that run than can be done by matching stdout/stderr from
1097
+ :py:meth:`runpytest`.
1098
+
1099
+ :param args:
1100
+ Command line arguments to pass to :py:func:`pytest.main`.
1101
+ :param plugins:
1102
+ Extra plugin instances the ``pytest.main()`` instance should use.
1103
+ :param no_reraise_ctrlc:
1104
+ Typically we reraise keyboard interrupts from the child run. If
1105
+ True, the KeyboardInterrupt exception is captured.
1106
+ """
1107
+ from _pytest.unraisableexception import gc_collect_iterations_key
1108
+
1109
+ # (maybe a cpython bug?) the importlib cache sometimes isn't updated
1110
+ # properly between file creation and inline_run (especially if imports
1111
+ # are interspersed with file creation)
1112
+ importlib.invalidate_caches()
1113
+
1114
+ plugins = list(plugins)
1115
+ finalizers = []
1116
+ try:
1117
+ # Any sys.module or sys.path changes done while running pytest
1118
+ # inline should be reverted after the test run completes to avoid
1119
+ # clashing with later inline tests run within the same pytest test,
1120
+ # e.g. just because they use matching test module names.
1121
+ finalizers.append(self.__take_sys_modules_snapshot().restore)
1122
+ finalizers.append(SysPathsSnapshot().restore)
1123
+
1124
+ # Important note:
1125
+ # - our tests should not leave any other references/registrations
1126
+ # laying around other than possibly loaded test modules
1127
+ # referenced from sys.modules, as nothing will clean those up
1128
+ # automatically
1129
+
1130
+ rec = []
1131
+
1132
+ class PytesterHelperPlugin:
1133
+ @staticmethod
1134
+ def pytest_configure(config: Config) -> None:
1135
+ rec.append(self.make_hook_recorder(config.pluginmanager))
1136
+
1137
+ # The unraisable plugin GC collect slows down inline
1138
+ # pytester runs too much.
1139
+ config.stash[gc_collect_iterations_key] = 0
1140
+
1141
+ plugins.append(PytesterHelperPlugin())
1142
+ ret = main([str(x) for x in args], plugins=plugins)
1143
+ if len(rec) == 1:
1144
+ reprec = rec.pop()
1145
+ else:
1146
+
1147
+ class reprec: # type: ignore
1148
+ pass
1149
+
1150
+ reprec.ret = ret
1151
+
1152
+ # Typically we reraise keyboard interrupts from the child run
1153
+ # because it's our user requesting interruption of the testing.
1154
+ if ret == ExitCode.INTERRUPTED and not no_reraise_ctrlc:
1155
+ calls = reprec.getcalls("pytest_keyboard_interrupt")
1156
+ if calls and calls[-1].excinfo.type == KeyboardInterrupt:
1157
+ raise KeyboardInterrupt()
1158
+ return reprec
1159
+ finally:
1160
+ for finalizer in finalizers:
1161
+ finalizer()
1162
+
1163
+ def runpytest_inprocess(
1164
+ self, *args: str | os.PathLike[str], **kwargs: Any
1165
+ ) -> RunResult:
1166
+ """Return result of running pytest in-process, providing a similar
1167
+ interface to what self.runpytest() provides."""
1168
+ syspathinsert = kwargs.pop("syspathinsert", False)
1169
+
1170
+ if syspathinsert:
1171
+ self.syspathinsert()
1172
+ instant = timing.Instant()
1173
+ capture = _get_multicapture("sys")
1174
+ capture.start_capturing()
1175
+ try:
1176
+ try:
1177
+ reprec = self.inline_run(*args, **kwargs)
1178
+ except SystemExit as e:
1179
+ ret = e.args[0]
1180
+ try:
1181
+ ret = ExitCode(e.args[0])
1182
+ except ValueError:
1183
+ pass
1184
+
1185
+ class reprec: # type: ignore
1186
+ ret = ret
1187
+
1188
+ except Exception:
1189
+ traceback.print_exc()
1190
+
1191
+ class reprec: # type: ignore
1192
+ ret = ExitCode(3)
1193
+
1194
+ finally:
1195
+ out, err = capture.readouterr()
1196
+ capture.stop_capturing()
1197
+ sys.stdout.write(out)
1198
+ sys.stderr.write(err)
1199
+
1200
+ assert reprec.ret is not None
1201
+ res = RunResult(
1202
+ reprec.ret, out.splitlines(), err.splitlines(), instant.elapsed().seconds
1203
+ )
1204
+ res.reprec = reprec # type: ignore
1205
+ return res
1206
+
1207
+ def runpytest(self, *args: str | os.PathLike[str], **kwargs: Any) -> RunResult:
1208
+ """Run pytest inline or in a subprocess, depending on the command line
1209
+ option "--runpytest" and return a :py:class:`~pytest.RunResult`."""
1210
+ new_args = self._ensure_basetemp(args)
1211
+ if self._method == "inprocess":
1212
+ return self.runpytest_inprocess(*new_args, **kwargs)
1213
+ elif self._method == "subprocess":
1214
+ return self.runpytest_subprocess(*new_args, **kwargs)
1215
+ raise RuntimeError(f"Unrecognized runpytest option: {self._method}")
1216
+
1217
+ def _ensure_basetemp(
1218
+ self, args: Sequence[str | os.PathLike[str]]
1219
+ ) -> list[str | os.PathLike[str]]:
1220
+ new_args = list(args)
1221
+ for x in new_args:
1222
+ if str(x).startswith("--basetemp"):
1223
+ break
1224
+ else:
1225
+ new_args.append(
1226
+ "--basetemp={}".format(self.path.parent.joinpath("basetemp"))
1227
+ )
1228
+ return new_args
1229
+
1230
+ def parseconfig(self, *args: str | os.PathLike[str]) -> Config:
1231
+ """Return a new pytest :class:`pytest.Config` instance from given
1232
+ commandline args.
1233
+
1234
+ This invokes the pytest bootstrapping code in _pytest.config to create a
1235
+ new :py:class:`pytest.PytestPluginManager` and call the
1236
+ :hook:`pytest_cmdline_parse` hook to create a new :class:`pytest.Config`
1237
+ instance.
1238
+
1239
+ If :attr:`plugins` has been populated they should be plugin modules
1240
+ to be registered with the plugin manager.
1241
+ """
1242
+ import _pytest.config
1243
+
1244
+ new_args = [str(x) for x in self._ensure_basetemp(args)]
1245
+
1246
+ config = _pytest.config._prepareconfig(new_args, self.plugins)
1247
+ # we don't know what the test will do with this half-setup config
1248
+ # object and thus we make sure it gets unconfigured properly in any
1249
+ # case (otherwise capturing could still be active, for example)
1250
+ self._request.addfinalizer(config._ensure_unconfigure)
1251
+ return config
1252
+
1253
+ def parseconfigure(self, *args: str | os.PathLike[str]) -> Config:
1254
+ """Return a new pytest configured Config instance.
1255
+
1256
+ Returns a new :py:class:`pytest.Config` instance like
1257
+ :py:meth:`parseconfig`, but also calls the :hook:`pytest_configure`
1258
+ hook.
1259
+ """
1260
+ config = self.parseconfig(*args)
1261
+ config._do_configure()
1262
+ return config
1263
+
1264
+ def getitem(
1265
+ self, source: str | os.PathLike[str], funcname: str = "test_func"
1266
+ ) -> Item:
1267
+ """Return the test item for a test function.
1268
+
1269
+ Writes the source to a python file and runs pytest's collection on
1270
+ the resulting module, returning the test item for the requested
1271
+ function name.
1272
+
1273
+ :param source:
1274
+ The module source.
1275
+ :param funcname:
1276
+ The name of the test function for which to return a test item.
1277
+ :returns:
1278
+ The test item.
1279
+ """
1280
+ items = self.getitems(source)
1281
+ for item in items:
1282
+ if item.name == funcname:
1283
+ return item
1284
+ assert 0, f"{funcname!r} item not found in module:\n{source}\nitems: {items}"
1285
+
1286
+ def getitems(self, source: str | os.PathLike[str]) -> list[Item]:
1287
+ """Return all test items collected from the module.
1288
+
1289
+ Writes the source to a Python file and runs pytest's collection on
1290
+ the resulting module, returning all test items contained within.
1291
+ """
1292
+ modcol = self.getmodulecol(source)
1293
+ return self.genitems([modcol])
1294
+
1295
+ def getmodulecol(
1296
+ self,
1297
+ source: str | os.PathLike[str],
1298
+ configargs=(),
1299
+ *,
1300
+ withinit: bool = False,
1301
+ ):
1302
+ """Return the module collection node for ``source``.
1303
+
1304
+ Writes ``source`` to a file using :py:meth:`makepyfile` and then
1305
+ runs the pytest collection on it, returning the collection node for the
1306
+ test module.
1307
+
1308
+ :param source:
1309
+ The source code of the module to collect.
1310
+
1311
+ :param configargs:
1312
+ Any extra arguments to pass to :py:meth:`parseconfigure`.
1313
+
1314
+ :param withinit:
1315
+ Whether to also write an ``__init__.py`` file to the same
1316
+ directory to ensure it is a package.
1317
+ """
1318
+ if isinstance(source, os.PathLike):
1319
+ path = self.path.joinpath(source)
1320
+ assert not withinit, "not supported for paths"
1321
+ else:
1322
+ kw = {self._name: str(source)}
1323
+ path = self.makepyfile(**kw)
1324
+ if withinit:
1325
+ self.makepyfile(__init__="#")
1326
+ self.config = config = self.parseconfigure(path, *configargs)
1327
+ return self.getnode(config, path)
1328
+
1329
+ def collect_by_name(self, modcol: Collector, name: str) -> Item | Collector | None:
1330
+ """Return the collection node for name from the module collection.
1331
+
1332
+ Searches a module collection node for a collection node matching the
1333
+ given name.
1334
+
1335
+ :param modcol: A module collection node; see :py:meth:`getmodulecol`.
1336
+ :param name: The name of the node to return.
1337
+ """
1338
+ if modcol not in self._mod_collections:
1339
+ self._mod_collections[modcol] = list(modcol.collect())
1340
+ for colitem in self._mod_collections[modcol]:
1341
+ if colitem.name == name:
1342
+ return colitem
1343
+ return None
1344
+
1345
+ def popen(
1346
+ self,
1347
+ cmdargs: Sequence[str | os.PathLike[str]],
1348
+ stdout: int | TextIO = subprocess.PIPE,
1349
+ stderr: int | TextIO = subprocess.PIPE,
1350
+ stdin: NotSetType | bytes | IO[Any] | int = CLOSE_STDIN,
1351
+ **kw,
1352
+ ):
1353
+ """Invoke :py:class:`subprocess.Popen`.
1354
+
1355
+ Calls :py:class:`subprocess.Popen` making sure the current working
1356
+ directory is in ``PYTHONPATH``.
1357
+
1358
+ You probably want to use :py:meth:`run` instead.
1359
+ """
1360
+ env = os.environ.copy()
1361
+ env["PYTHONPATH"] = os.pathsep.join(
1362
+ filter(None, [os.getcwd(), env.get("PYTHONPATH", "")])
1363
+ )
1364
+ kw["env"] = env
1365
+
1366
+ if stdin is self.CLOSE_STDIN:
1367
+ kw["stdin"] = subprocess.PIPE
1368
+ elif isinstance(stdin, bytes):
1369
+ kw["stdin"] = subprocess.PIPE
1370
+ else:
1371
+ kw["stdin"] = stdin
1372
+
1373
+ popen = subprocess.Popen(cmdargs, stdout=stdout, stderr=stderr, **kw)
1374
+ if stdin is self.CLOSE_STDIN:
1375
+ assert popen.stdin is not None
1376
+ popen.stdin.close()
1377
+ elif isinstance(stdin, bytes):
1378
+ assert popen.stdin is not None
1379
+ popen.stdin.write(stdin)
1380
+
1381
+ return popen
1382
+
1383
+ def run(
1384
+ self,
1385
+ *cmdargs: str | os.PathLike[str],
1386
+ timeout: float | None = None,
1387
+ stdin: NotSetType | bytes | IO[Any] | int = CLOSE_STDIN,
1388
+ ) -> RunResult:
1389
+ """Run a command with arguments.
1390
+
1391
+ Run a process using :py:class:`subprocess.Popen` saving the stdout and
1392
+ stderr.
1393
+
1394
+ :param cmdargs:
1395
+ The sequence of arguments to pass to :py:class:`subprocess.Popen`,
1396
+ with path-like objects being converted to :py:class:`str`
1397
+ automatically.
1398
+ :param timeout:
1399
+ The period in seconds after which to timeout and raise
1400
+ :py:class:`Pytester.TimeoutExpired`.
1401
+ :param stdin:
1402
+ Optional standard input.
1403
+
1404
+ - If it is ``CLOSE_STDIN`` (Default), then this method calls
1405
+ :py:class:`subprocess.Popen` with ``stdin=subprocess.PIPE``, and
1406
+ the standard input is closed immediately after the new command is
1407
+ started.
1408
+
1409
+ - If it is of type :py:class:`bytes`, these bytes are sent to the
1410
+ standard input of the command.
1411
+
1412
+ - Otherwise, it is passed through to :py:class:`subprocess.Popen`.
1413
+ For further information in this case, consult the document of the
1414
+ ``stdin`` parameter in :py:class:`subprocess.Popen`.
1415
+ :type stdin: _pytest.compat.NotSetType | bytes | IO[Any] | int
1416
+ :returns:
1417
+ The result.
1418
+
1419
+ """
1420
+ __tracebackhide__ = True
1421
+
1422
+ cmdargs = tuple(os.fspath(arg) for arg in cmdargs)
1423
+ p1 = self.path.joinpath("stdout")
1424
+ p2 = self.path.joinpath("stderr")
1425
+ print("running:", *cmdargs)
1426
+ print(" in:", Path.cwd())
1427
+
1428
+ with p1.open("w", encoding="utf8") as f1, p2.open("w", encoding="utf8") as f2:
1429
+ instant = timing.Instant()
1430
+ popen = self.popen(
1431
+ cmdargs,
1432
+ stdin=stdin,
1433
+ stdout=f1,
1434
+ stderr=f2,
1435
+ )
1436
+ if popen.stdin is not None:
1437
+ popen.stdin.close()
1438
+
1439
+ def handle_timeout() -> None:
1440
+ __tracebackhide__ = True
1441
+
1442
+ timeout_message = f"{timeout} second timeout expired running: {cmdargs}"
1443
+
1444
+ popen.kill()
1445
+ popen.wait()
1446
+ raise self.TimeoutExpired(timeout_message)
1447
+
1448
+ if timeout is None:
1449
+ ret = popen.wait()
1450
+ else:
1451
+ try:
1452
+ ret = popen.wait(timeout)
1453
+ except subprocess.TimeoutExpired:
1454
+ handle_timeout()
1455
+ f1.flush()
1456
+ f2.flush()
1457
+
1458
+ with p1.open(encoding="utf8") as f1, p2.open(encoding="utf8") as f2:
1459
+ out = f1.read().splitlines()
1460
+ err = f2.read().splitlines()
1461
+
1462
+ self._dump_lines(out, sys.stdout)
1463
+ self._dump_lines(err, sys.stderr)
1464
+
1465
+ with contextlib.suppress(ValueError):
1466
+ ret = ExitCode(ret)
1467
+ return RunResult(ret, out, err, instant.elapsed().seconds)
1468
+
1469
+ def _dump_lines(self, lines, fp):
1470
+ try:
1471
+ for line in lines:
1472
+ print(line, file=fp)
1473
+ except UnicodeEncodeError:
1474
+ print(f"couldn't print to {fp} because of encoding")
1475
+
1476
+ def _getpytestargs(self) -> tuple[str, ...]:
1477
+ return sys.executable, "-mpytest"
1478
+
1479
+ def runpython(self, script: os.PathLike[str]) -> RunResult:
1480
+ """Run a python script using sys.executable as interpreter."""
1481
+ return self.run(sys.executable, script)
1482
+
1483
+ def runpython_c(self, command: str) -> RunResult:
1484
+ """Run ``python -c "command"``."""
1485
+ return self.run(sys.executable, "-c", command)
1486
+
1487
+ def runpytest_subprocess(
1488
+ self, *args: str | os.PathLike[str], timeout: float | None = None
1489
+ ) -> RunResult:
1490
+ """Run pytest as a subprocess with given arguments.
1491
+
1492
+ Any plugins added to the :py:attr:`plugins` list will be added using the
1493
+ ``-p`` command line option. Additionally ``--basetemp`` is used to put
1494
+ any temporary files and directories in a numbered directory prefixed
1495
+ with "runpytest-" to not conflict with the normal numbered pytest
1496
+ location for temporary files and directories.
1497
+
1498
+ :param args:
1499
+ The sequence of arguments to pass to the pytest subprocess.
1500
+ :param timeout:
1501
+ The period in seconds after which to timeout and raise
1502
+ :py:class:`Pytester.TimeoutExpired`.
1503
+ :returns:
1504
+ The result.
1505
+ """
1506
+ __tracebackhide__ = True
1507
+ p = make_numbered_dir(root=self.path, prefix="runpytest-", mode=0o700)
1508
+ args = (f"--basetemp={p}", *args)
1509
+ for plugin in self.plugins:
1510
+ if not isinstance(plugin, str):
1511
+ raise ValueError(
1512
+ f"Specifying plugins as objects is not supported in pytester subprocess mode; "
1513
+ f"specify by name instead: {plugin}"
1514
+ )
1515
+ args = ("-p", plugin, *args)
1516
+ args = self._getpytestargs() + args
1517
+ return self.run(*args, timeout=timeout)
1518
+
1519
+ def spawn_pytest(self, string: str, expect_timeout: float = 10.0) -> pexpect.spawn:
1520
+ """Run pytest using pexpect.
1521
+
1522
+ This makes sure to use the right pytest and sets up the temporary
1523
+ directory locations.
1524
+
1525
+ The pexpect child is returned.
1526
+ """
1527
+ basetemp = self.path / "temp-pexpect"
1528
+ basetemp.mkdir(mode=0o700)
1529
+ invoke = " ".join(map(str, self._getpytestargs()))
1530
+ cmd = f"{invoke} --basetemp={basetemp} {string}"
1531
+ return self.spawn(cmd, expect_timeout=expect_timeout)
1532
+
1533
+ def spawn(self, cmd: str, expect_timeout: float = 10.0) -> pexpect.spawn:
1534
+ """Run a command using pexpect.
1535
+
1536
+ The pexpect child is returned.
1537
+ """
1538
+ pexpect = importorskip("pexpect", "3.0")
1539
+ if hasattr(sys, "pypy_version_info") and "64" in platform.machine():
1540
+ skip("pypy-64 bit not supported")
1541
+ if not hasattr(pexpect, "spawn"):
1542
+ skip("pexpect.spawn not available")
1543
+ logfile = self.path.joinpath("spawn.out").open("wb")
1544
+
1545
+ child = pexpect.spawn(cmd, logfile=logfile, timeout=expect_timeout)
1546
+ self._request.addfinalizer(logfile.close)
1547
+ return child
1548
+
1549
+
1550
+ class LineComp:
1551
+ def __init__(self) -> None:
1552
+ self.stringio = StringIO()
1553
+ """:class:`python:io.StringIO()` instance used for input."""
1554
+
1555
+ def assert_contains_lines(self, lines2: Sequence[str]) -> None:
1556
+ """Assert that ``lines2`` are contained (linearly) in :attr:`stringio`'s value.
1557
+
1558
+ Lines are matched using :func:`LineMatcher.fnmatch_lines <pytest.LineMatcher.fnmatch_lines>`.
1559
+ """
1560
+ __tracebackhide__ = True
1561
+ val = self.stringio.getvalue()
1562
+ self.stringio.truncate(0)
1563
+ self.stringio.seek(0)
1564
+ lines1 = val.split("\n")
1565
+ LineMatcher(lines1).fnmatch_lines(lines2)
1566
+
1567
+
1568
+ class LineMatcher:
1569
+ """Flexible matching of text.
1570
+
1571
+ This is a convenience class to test large texts like the output of
1572
+ commands.
1573
+
1574
+ The constructor takes a list of lines without their trailing newlines, i.e.
1575
+ ``text.splitlines()``.
1576
+ """
1577
+
1578
+ def __init__(self, lines: list[str]) -> None:
1579
+ self.lines = lines
1580
+ self._log_output: list[str] = []
1581
+
1582
+ def __str__(self) -> str:
1583
+ """Return the entire original text.
1584
+
1585
+ .. versionadded:: 6.2
1586
+ You can use :meth:`str` in older versions.
1587
+ """
1588
+ return "\n".join(self.lines)
1589
+
1590
+ def _getlines(self, lines2: str | Sequence[str] | Source) -> Sequence[str]:
1591
+ if isinstance(lines2, str):
1592
+ lines2 = Source(lines2)
1593
+ if isinstance(lines2, Source):
1594
+ lines2 = lines2.strip().lines
1595
+ return lines2
1596
+
1597
+ def fnmatch_lines_random(self, lines2: Sequence[str]) -> None:
1598
+ """Check lines exist in the output in any order (using :func:`python:fnmatch.fnmatch`)."""
1599
+ __tracebackhide__ = True
1600
+ self._match_lines_random(lines2, fnmatch)
1601
+
1602
+ def re_match_lines_random(self, lines2: Sequence[str]) -> None:
1603
+ """Check lines exist in the output in any order (using :func:`python:re.match`)."""
1604
+ __tracebackhide__ = True
1605
+ self._match_lines_random(lines2, lambda name, pat: bool(re.match(pat, name)))
1606
+
1607
+ def _match_lines_random(
1608
+ self, lines2: Sequence[str], match_func: Callable[[str, str], bool]
1609
+ ) -> None:
1610
+ __tracebackhide__ = True
1611
+ lines2 = self._getlines(lines2)
1612
+ for line in lines2:
1613
+ for x in self.lines:
1614
+ if line == x or match_func(x, line):
1615
+ self._log("matched: ", repr(line))
1616
+ break
1617
+ else:
1618
+ msg = f"line {line!r} not found in output"
1619
+ self._log(msg)
1620
+ self._fail(msg)
1621
+
1622
+ def get_lines_after(self, fnline: str) -> Sequence[str]:
1623
+ """Return all lines following the given line in the text.
1624
+
1625
+ The given line can contain glob wildcards.
1626
+ """
1627
+ for i, line in enumerate(self.lines):
1628
+ if fnline == line or fnmatch(line, fnline):
1629
+ return self.lines[i + 1 :]
1630
+ raise ValueError(f"line {fnline!r} not found in output")
1631
+
1632
+ def _log(self, *args) -> None:
1633
+ self._log_output.append(" ".join(str(x) for x in args))
1634
+
1635
+ @property
1636
+ def _log_text(self) -> str:
1637
+ return "\n".join(self._log_output)
1638
+
1639
+ def fnmatch_lines(
1640
+ self, lines2: Sequence[str], *, consecutive: bool = False
1641
+ ) -> None:
1642
+ """Check lines exist in the output (using :func:`python:fnmatch.fnmatch`).
1643
+
1644
+ The argument is a list of lines which have to match and can use glob
1645
+ wildcards. If they do not match a pytest.fail() is called. The
1646
+ matches and non-matches are also shown as part of the error message.
1647
+
1648
+ :param lines2: String patterns to match.
1649
+ :param consecutive: Match lines consecutively?
1650
+ """
1651
+ __tracebackhide__ = True
1652
+ self._match_lines(lines2, fnmatch, "fnmatch", consecutive=consecutive)
1653
+
1654
+ def re_match_lines(
1655
+ self, lines2: Sequence[str], *, consecutive: bool = False
1656
+ ) -> None:
1657
+ """Check lines exist in the output (using :func:`python:re.match`).
1658
+
1659
+ The argument is a list of lines which have to match using ``re.match``.
1660
+ If they do not match a pytest.fail() is called.
1661
+
1662
+ The matches and non-matches are also shown as part of the error message.
1663
+
1664
+ :param lines2: string patterns to match.
1665
+ :param consecutive: match lines consecutively?
1666
+ """
1667
+ __tracebackhide__ = True
1668
+ self._match_lines(
1669
+ lines2,
1670
+ lambda name, pat: bool(re.match(pat, name)),
1671
+ "re.match",
1672
+ consecutive=consecutive,
1673
+ )
1674
+
1675
+ def _match_lines(
1676
+ self,
1677
+ lines2: Sequence[str],
1678
+ match_func: Callable[[str, str], bool],
1679
+ match_nickname: str,
1680
+ *,
1681
+ consecutive: bool = False,
1682
+ ) -> None:
1683
+ """Underlying implementation of ``fnmatch_lines`` and ``re_match_lines``.
1684
+
1685
+ :param Sequence[str] lines2:
1686
+ List of string patterns to match. The actual format depends on
1687
+ ``match_func``.
1688
+ :param match_func:
1689
+ A callable ``match_func(line, pattern)`` where line is the
1690
+ captured line from stdout/stderr and pattern is the matching
1691
+ pattern.
1692
+ :param str match_nickname:
1693
+ The nickname for the match function that will be logged to stdout
1694
+ when a match occurs.
1695
+ :param consecutive:
1696
+ Match lines consecutively?
1697
+ """
1698
+ if not isinstance(lines2, collections.abc.Sequence):
1699
+ raise TypeError(f"invalid type for lines2: {type(lines2).__name__}")
1700
+ lines2 = self._getlines(lines2)
1701
+ lines1 = self.lines[:]
1702
+ extralines = []
1703
+ __tracebackhide__ = True
1704
+ wnick = len(match_nickname) + 1
1705
+ started = False
1706
+ for line in lines2:
1707
+ nomatchprinted = False
1708
+ while lines1:
1709
+ nextline = lines1.pop(0)
1710
+ if line == nextline:
1711
+ self._log("exact match:", repr(line))
1712
+ started = True
1713
+ break
1714
+ elif match_func(nextline, line):
1715
+ self._log(f"{match_nickname}:", repr(line))
1716
+ self._log(
1717
+ "{:>{width}}".format("with:", width=wnick), repr(nextline)
1718
+ )
1719
+ started = True
1720
+ break
1721
+ else:
1722
+ if consecutive and started:
1723
+ msg = f"no consecutive match: {line!r}"
1724
+ self._log(msg)
1725
+ self._log(
1726
+ "{:>{width}}".format("with:", width=wnick), repr(nextline)
1727
+ )
1728
+ self._fail(msg)
1729
+ if not nomatchprinted:
1730
+ self._log(
1731
+ "{:>{width}}".format("nomatch:", width=wnick), repr(line)
1732
+ )
1733
+ nomatchprinted = True
1734
+ self._log("{:>{width}}".format("and:", width=wnick), repr(nextline))
1735
+ extralines.append(nextline)
1736
+ else:
1737
+ msg = f"remains unmatched: {line!r}"
1738
+ self._log(msg)
1739
+ self._fail(msg)
1740
+ self._log_output = []
1741
+
1742
+ def no_fnmatch_line(self, pat: str) -> None:
1743
+ """Ensure captured lines do not match the given pattern, using ``fnmatch.fnmatch``.
1744
+
1745
+ :param str pat: The pattern to match lines.
1746
+ """
1747
+ __tracebackhide__ = True
1748
+ self._no_match_line(pat, fnmatch, "fnmatch")
1749
+
1750
+ def no_re_match_line(self, pat: str) -> None:
1751
+ """Ensure captured lines do not match the given pattern, using ``re.match``.
1752
+
1753
+ :param str pat: The regular expression to match lines.
1754
+ """
1755
+ __tracebackhide__ = True
1756
+ self._no_match_line(
1757
+ pat, lambda name, pat: bool(re.match(pat, name)), "re.match"
1758
+ )
1759
+
1760
+ def _no_match_line(
1761
+ self, pat: str, match_func: Callable[[str, str], bool], match_nickname: str
1762
+ ) -> None:
1763
+ """Ensure captured lines does not have a the given pattern, using ``fnmatch.fnmatch``.
1764
+
1765
+ :param str pat: The pattern to match lines.
1766
+ """
1767
+ __tracebackhide__ = True
1768
+ nomatch_printed = False
1769
+ wnick = len(match_nickname) + 1
1770
+ for line in self.lines:
1771
+ if match_func(line, pat):
1772
+ msg = f"{match_nickname}: {pat!r}"
1773
+ self._log(msg)
1774
+ self._log("{:>{width}}".format("with:", width=wnick), repr(line))
1775
+ self._fail(msg)
1776
+ else:
1777
+ if not nomatch_printed:
1778
+ self._log("{:>{width}}".format("nomatch:", width=wnick), repr(pat))
1779
+ nomatch_printed = True
1780
+ self._log("{:>{width}}".format("and:", width=wnick), repr(line))
1781
+ self._log_output = []
1782
+
1783
+ def _fail(self, msg: str) -> None:
1784
+ __tracebackhide__ = True
1785
+ log_text = self._log_text
1786
+ self._log_output = []
1787
+ fail(log_text)
1788
+
1789
+ def str(self) -> str:
1790
+ """Return the entire original text."""
1791
+ return str(self)