pytest 8.1.0__tar.gz → 8.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (600) hide show
  1. {pytest-8.1.0 → pytest-8.1.2}/AUTHORS +1 -0
  2. {pytest-8.1.0/src/pytest.egg-info → pytest-8.1.2}/PKG-INFO +1 -1
  3. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/index.rst +2 -0
  4. pytest-8.1.2/doc/en/announce/release-8.1.1.rst +18 -0
  5. pytest-8.1.2/doc/en/announce/release-8.1.2.rst +18 -0
  6. {pytest-8.1.0 → pytest-8.1.2}/doc/en/builtin.rst +2 -2
  7. {pytest-8.1.0 → pytest-8.1.2}/doc/en/changelog.rst +40 -2
  8. {pytest-8.1.0 → pytest-8.1.2}/doc/en/conf.py +2 -1
  9. {pytest-8.1.0 → pytest-8.1.2}/doc/en/deprecations.rst +66 -68
  10. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/parametrize.rst +3 -3
  11. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/pythoncollection.rst +2 -2
  12. {pytest-8.1.0 → pytest-8.1.2}/doc/en/explanation/flaky.rst +2 -3
  13. {pytest-8.1.0 → pytest-8.1.2}/doc/en/getting-started.rst +1 -1
  14. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/doctest.rst +1 -0
  15. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/fixtures.rst +1 -1
  16. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/writing_hook_functions.rst +1 -1
  17. {pytest-8.1.0 → pytest-8.1.2}/doc/en/index.rst +3 -2
  18. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_code/code.py +2 -0
  19. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_version.py +2 -2
  20. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/compat.py +17 -0
  21. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/config/__init__.py +3 -1
  22. pytest-8.1.2/src/_pytest/config/compat.py +85 -0
  23. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/deprecated.py +15 -0
  24. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/hookspec.py +21 -22
  25. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/legacypath.py +3 -17
  26. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/main.py +3 -1
  27. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/nodes.py +41 -5
  28. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/pathlib.py +4 -0
  29. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/python.py +3 -0
  30. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/python_api.py +9 -5
  31. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/stash.py +4 -0
  32. {pytest-8.1.0 → pytest-8.1.2/src/pytest.egg-info}/PKG-INFO +1 -1
  33. {pytest-8.1.0 → pytest-8.1.2}/src/pytest.egg-info/SOURCES.txt +3 -0
  34. {pytest-8.1.0 → pytest-8.1.2}/testing/deprecated_test.py +55 -0
  35. {pytest-8.1.0 → pytest-8.1.2}/testing/python/approx.py +18 -0
  36. {pytest-8.1.0 → pytest-8.1.2}/testing/test_legacypath.py +2 -2
  37. {pytest-8.1.0 → pytest-8.1.2}/testing/test_nodes.py +6 -3
  38. {pytest-8.1.0 → pytest-8.1.2}/testing/test_pathlib.py +71 -0
  39. {pytest-8.1.0 → pytest-8.1.2}/.coveragerc +0 -0
  40. {pytest-8.1.0 → pytest-8.1.2}/.git-blame-ignore-revs +0 -0
  41. {pytest-8.1.0 → pytest-8.1.2}/.gitattributes +0 -0
  42. {pytest-8.1.0 → pytest-8.1.2}/.github/FUNDING.yml +0 -0
  43. {pytest-8.1.0 → pytest-8.1.2}/.github/ISSUE_TEMPLATE/1_bug_report.md +0 -0
  44. {pytest-8.1.0 → pytest-8.1.2}/.github/ISSUE_TEMPLATE/2_feature_request.md +0 -0
  45. {pytest-8.1.0 → pytest-8.1.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  46. {pytest-8.1.0 → pytest-8.1.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  47. {pytest-8.1.0 → pytest-8.1.2}/.github/config.yml +0 -0
  48. {pytest-8.1.0 → pytest-8.1.2}/.github/dependabot.yml +0 -0
  49. {pytest-8.1.0 → pytest-8.1.2}/.github/labels.toml +0 -0
  50. {pytest-8.1.0 → pytest-8.1.2}/.github/workflows/backport.yml +0 -0
  51. {pytest-8.1.0 → pytest-8.1.2}/.github/workflows/deploy.yml +0 -0
  52. {pytest-8.1.0 → pytest-8.1.2}/.github/workflows/prepare-release-pr.yml +0 -0
  53. {pytest-8.1.0 → pytest-8.1.2}/.github/workflows/stale.yml +0 -0
  54. {pytest-8.1.0 → pytest-8.1.2}/.github/workflows/test.yml +0 -0
  55. {pytest-8.1.0 → pytest-8.1.2}/.github/workflows/update-plugin-list.yml +0 -0
  56. {pytest-8.1.0 → pytest-8.1.2}/.gitignore +0 -0
  57. {pytest-8.1.0 → pytest-8.1.2}/.pre-commit-config.yaml +0 -0
  58. {pytest-8.1.0 → pytest-8.1.2}/.readthedocs.yml +0 -0
  59. {pytest-8.1.0 → pytest-8.1.2}/CHANGELOG.rst +0 -0
  60. {pytest-8.1.0 → pytest-8.1.2}/CITATION +0 -0
  61. {pytest-8.1.0 → pytest-8.1.2}/CODE_OF_CONDUCT.md +0 -0
  62. {pytest-8.1.0 → pytest-8.1.2}/CONTRIBUTING.rst +0 -0
  63. {pytest-8.1.0 → pytest-8.1.2}/LICENSE +0 -0
  64. {pytest-8.1.0 → pytest-8.1.2}/OPENCOLLECTIVE.rst +0 -0
  65. {pytest-8.1.0 → pytest-8.1.2}/README.rst +0 -0
  66. {pytest-8.1.0 → pytest-8.1.2}/RELEASING.rst +0 -0
  67. {pytest-8.1.0 → pytest-8.1.2}/TIDELIFT.rst +0 -0
  68. {pytest-8.1.0 → pytest-8.1.2}/bench/bench.py +0 -0
  69. {pytest-8.1.0 → pytest-8.1.2}/bench/bench_argcomplete.py +0 -0
  70. {pytest-8.1.0 → pytest-8.1.2}/bench/empty.py +0 -0
  71. {pytest-8.1.0 → pytest-8.1.2}/bench/manyparam.py +0 -0
  72. {pytest-8.1.0 → pytest-8.1.2}/bench/skip.py +0 -0
  73. {pytest-8.1.0 → pytest-8.1.2}/bench/unit_test.py +0 -0
  74. {pytest-8.1.0 → pytest-8.1.2}/bench/xunit.py +0 -0
  75. {pytest-8.1.0 → pytest-8.1.2}/changelog/README.rst +0 -0
  76. {pytest-8.1.0 → pytest-8.1.2}/changelog/_template.rst +0 -0
  77. {pytest-8.1.0 → pytest-8.1.2}/codecov.yml +0 -0
  78. {pytest-8.1.0 → pytest-8.1.2}/doc/en/Makefile +0 -0
  79. {pytest-8.1.0 → pytest-8.1.2}/doc/en/_templates/globaltoc.html +0 -0
  80. {pytest-8.1.0 → pytest-8.1.2}/doc/en/_templates/layout.html +0 -0
  81. {pytest-8.1.0 → pytest-8.1.2}/doc/en/_templates/links.html +0 -0
  82. {pytest-8.1.0 → pytest-8.1.2}/doc/en/_templates/relations.html +0 -0
  83. {pytest-8.1.0 → pytest-8.1.2}/doc/en/_templates/sidebarintro.html +0 -0
  84. {pytest-8.1.0 → pytest-8.1.2}/doc/en/_templates/slim_searchbox.html +0 -0
  85. {pytest-8.1.0 → pytest-8.1.2}/doc/en/adopt.rst +0 -0
  86. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.0.0.rst +0 -0
  87. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.0.1.rst +0 -0
  88. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.0.2.rst +0 -0
  89. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.0.3.rst +0 -0
  90. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.1.0.rst +0 -0
  91. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.1.1.rst +0 -0
  92. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.1.2.rst +0 -0
  93. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.1.3.rst +0 -0
  94. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.2.0.rst +0 -0
  95. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.2.1.rst +0 -0
  96. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.2.2.rst +0 -0
  97. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.2.4.rst +0 -0
  98. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.3.0.rst +0 -0
  99. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.3.1.rst +0 -0
  100. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.3.2.rst +0 -0
  101. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.3.3.rst +0 -0
  102. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.3.4.rst +0 -0
  103. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.3.5.rst +0 -0
  104. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.4.0.rst +0 -0
  105. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.4.1.rst +0 -0
  106. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.4.2.rst +0 -0
  107. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.5.0.rst +0 -0
  108. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.5.1.rst +0 -0
  109. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.5.2.rst +0 -0
  110. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.6.0.rst +0 -0
  111. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.6.1.rst +0 -0
  112. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.6.2.rst +0 -0
  113. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.6.3.rst +0 -0
  114. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.7.0.rst +0 -0
  115. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.7.1.rst +0 -0
  116. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.7.2.rst +0 -0
  117. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.8.2.rst +0 -0
  118. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.8.3.rst +0 -0
  119. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.8.4.rst +0 -0
  120. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.8.5.rst +0 -0
  121. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.8.6.rst +0 -0
  122. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.8.7.rst +0 -0
  123. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.9.0.rst +0 -0
  124. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.9.1.rst +0 -0
  125. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.9.2.rst +0 -0
  126. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.0.rst +0 -0
  127. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.1.rst +0 -0
  128. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.2.rst +0 -0
  129. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.3.rst +0 -0
  130. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.4.rst +0 -0
  131. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.5.rst +0 -0
  132. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.6.rst +0 -0
  133. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.7.rst +0 -0
  134. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.1.0.rst +0 -0
  135. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.1.1.rst +0 -0
  136. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.1.2.rst +0 -0
  137. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.1.3.rst +0 -0
  138. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.10.0.rst +0 -0
  139. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.10.1.rst +0 -0
  140. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.2.0.rst +0 -0
  141. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.2.1.rst +0 -0
  142. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.2.2.rst +0 -0
  143. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.2.3.rst +0 -0
  144. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.2.4.rst +0 -0
  145. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.2.5.rst +0 -0
  146. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.3.0.rst +0 -0
  147. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.3.1.rst +0 -0
  148. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.3.2.rst +0 -0
  149. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.4.0.rst +0 -0
  150. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.4.1.rst +0 -0
  151. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.4.2.rst +0 -0
  152. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.5.0.rst +0 -0
  153. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.5.1.rst +0 -0
  154. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.6.0.rst +0 -0
  155. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.6.1.rst +0 -0
  156. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.6.2.rst +0 -0
  157. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.6.3.rst +0 -0
  158. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.6.4.rst +0 -0
  159. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.7.0.rst +0 -0
  160. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.7.1.rst +0 -0
  161. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.7.2.rst +0 -0
  162. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.7.3.rst +0 -0
  163. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.7.4.rst +0 -0
  164. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.8.0.rst +0 -0
  165. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.8.1.rst +0 -0
  166. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.8.2.rst +0 -0
  167. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.9.0.rst +0 -0
  168. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.9.1.rst +0 -0
  169. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.9.2.rst +0 -0
  170. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.9.3.rst +0 -0
  171. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.0.0.rst +0 -0
  172. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.0.1.rst +0 -0
  173. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.0.2.rst +0 -0
  174. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.1.0.rst +0 -0
  175. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.1.1.rst +0 -0
  176. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.2.0.rst +0 -0
  177. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.2.1.rst +0 -0
  178. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.3.0.rst +0 -0
  179. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.3.1.rst +0 -0
  180. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.4.0.rst +0 -0
  181. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.4.1.rst +0 -0
  182. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.4.2.rst +0 -0
  183. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.5.0.rst +0 -0
  184. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.0.rst +0 -0
  185. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.1.rst +0 -0
  186. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.2.rst +0 -0
  187. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.3.rst +0 -0
  188. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.4.rst +0 -0
  189. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.5.rst +0 -0
  190. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.6.rst +0 -0
  191. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.7.rst +0 -0
  192. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.8.rst +0 -0
  193. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.9.rst +0 -0
  194. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.0.0.rst +0 -0
  195. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.0.1.rst +0 -0
  196. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.1.0.rst +0 -0
  197. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.1.1.rst +0 -0
  198. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.1.2.rst +0 -0
  199. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.1.3.rst +0 -0
  200. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.2.0.rst +0 -0
  201. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.2.1.rst +0 -0
  202. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.2.2.rst +0 -0
  203. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.2.3.rst +0 -0
  204. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.2.4.rst +0 -0
  205. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.3.0.rst +0 -0
  206. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.3.1.rst +0 -0
  207. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.3.2.rst +0 -0
  208. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.3.3.rst +0 -0
  209. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.3.4.rst +0 -0
  210. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.3.5.rst +0 -0
  211. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.4.0.rst +0 -0
  212. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.4.1.rst +0 -0
  213. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.4.2.rst +0 -0
  214. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.4.3.rst +0 -0
  215. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.0.0.rst +0 -0
  216. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.0.0rc1.rst +0 -0
  217. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.0.1.rst +0 -0
  218. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.0.2.rst +0 -0
  219. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.1.0.rst +0 -0
  220. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.1.1.rst +0 -0
  221. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.1.2.rst +0 -0
  222. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.2.0.rst +0 -0
  223. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.2.1.rst +0 -0
  224. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.2.2.rst +0 -0
  225. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.2.3.rst +0 -0
  226. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.2.4.rst +0 -0
  227. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.2.5.rst +0 -0
  228. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.0.0.rst +0 -0
  229. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.0.0rc1.rst +0 -0
  230. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.0.1.rst +0 -0
  231. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.1.0.rst +0 -0
  232. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.1.1.rst +0 -0
  233. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.1.2.rst +0 -0
  234. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.1.3.rst +0 -0
  235. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.2.0.rst +0 -0
  236. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.2.1.rst +0 -0
  237. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.2.2.rst +0 -0
  238. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.3.0.rst +0 -0
  239. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.3.1.rst +0 -0
  240. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.3.2.rst +0 -0
  241. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.4.0.rst +0 -0
  242. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.4.1.rst +0 -0
  243. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.4.2.rst +0 -0
  244. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.4.3.rst +0 -0
  245. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.4.4.rst +0 -0
  246. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-8.0.0.rst +0 -0
  247. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-8.0.0rc1.rst +0 -0
  248. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-8.0.0rc2.rst +0 -0
  249. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-8.0.1.rst +0 -0
  250. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-8.0.2.rst +0 -0
  251. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-8.1.0.rst +0 -0
  252. {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/sprint2016.rst +0 -0
  253. {pytest-8.1.0 → pytest-8.1.2}/doc/en/backwards-compatibility.rst +0 -0
  254. {pytest-8.1.0 → pytest-8.1.2}/doc/en/conftest.py +0 -0
  255. {pytest-8.1.0 → pytest-8.1.2}/doc/en/contact.rst +0 -0
  256. {pytest-8.1.0 → pytest-8.1.2}/doc/en/contents.rst +0 -0
  257. {pytest-8.1.0 → pytest-8.1.2}/doc/en/contributing.rst +0 -0
  258. {pytest-8.1.0 → pytest-8.1.2}/doc/en/development_guide.rst +0 -0
  259. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/assertion/failure_demo.py +0 -0
  260. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/assertion/global_testmodule_config/conftest.py +0 -0
  261. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/assertion/global_testmodule_config/test_hello_world.py +0 -0
  262. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/assertion/test_failures.py +0 -0
  263. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/assertion/test_setup_flow_example.py +0 -0
  264. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/attic.rst +0 -0
  265. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/conftest.py +0 -0
  266. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory/conftest.py +0 -0
  267. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory/pytest.ini +0 -0
  268. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory/tests/manifest.json +0 -0
  269. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory/tests/test_first.py +0 -0
  270. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory/tests/test_second.py +0 -0
  271. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory/tests/test_third.py +0 -0
  272. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory.rst +0 -0
  273. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/fixture_availability.svg +0 -0
  274. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/fixture_availability_plugins.svg +0 -0
  275. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse.py +0 -0
  276. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse.svg +0 -0
  277. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse_flat.svg +0 -0
  278. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse_multiple_scopes.py +0 -0
  279. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse_multiple_scopes.svg +0 -0
  280. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse_temp_effects.py +0 -0
  281. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse_temp_effects.svg +0 -0
  282. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_dependencies.py +0 -0
  283. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_dependencies.svg +0 -0
  284. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_dependencies_flat.svg +0 -0
  285. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_dependencies_unclear.svg +0 -0
  286. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_scope.py +0 -0
  287. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_scope.svg +0 -0
  288. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_request_different_scope.py +0 -0
  289. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_request_different_scope.svg +0 -0
  290. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/index.rst +0 -0
  291. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/markers.rst +0 -0
  292. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/multipython.py +0 -0
  293. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/nonpython/__init__.py +0 -0
  294. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/nonpython/conftest.py +0 -0
  295. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/nonpython/test_simple.yaml +0 -0
  296. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/nonpython.rst +0 -0
  297. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/pythoncollection.py +0 -0
  298. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/reportingdemo.rst +0 -0
  299. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/simple.rst +0 -0
  300. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/special.rst +0 -0
  301. {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/xfail_demo.py +0 -0
  302. {pytest-8.1.0 → pytest-8.1.2}/doc/en/explanation/anatomy.rst +0 -0
  303. {pytest-8.1.0 → pytest-8.1.2}/doc/en/explanation/fixtures.rst +0 -0
  304. {pytest-8.1.0 → pytest-8.1.2}/doc/en/explanation/goodpractices.rst +0 -0
  305. {pytest-8.1.0 → pytest-8.1.2}/doc/en/explanation/index.rst +0 -0
  306. {pytest-8.1.0 → pytest-8.1.2}/doc/en/explanation/pythonpath.rst +0 -0
  307. {pytest-8.1.0 → pytest-8.1.2}/doc/en/funcarg_compare.rst +0 -0
  308. {pytest-8.1.0 → pytest-8.1.2}/doc/en/funcargs.rst +0 -0
  309. {pytest-8.1.0 → pytest-8.1.2}/doc/en/historical-notes.rst +0 -0
  310. {pytest-8.1.0 → pytest-8.1.2}/doc/en/history.rst +0 -0
  311. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/assert.rst +0 -0
  312. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/bash-completion.rst +0 -0
  313. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/cache.rst +0 -0
  314. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/capture-stdout-stderr.rst +0 -0
  315. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/capture-warnings.rst +0 -0
  316. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/existingtestsuite.rst +0 -0
  317. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/failures.rst +0 -0
  318. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/index.rst +0 -0
  319. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/logging.rst +0 -0
  320. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/mark.rst +0 -0
  321. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/monkeypatch.rst +0 -0
  322. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/output.rst +0 -0
  323. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/parametrize.rst +0 -0
  324. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/plugins.rst +0 -0
  325. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/skipping.rst +0 -0
  326. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/tmp_path.rst +0 -0
  327. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/unittest.rst +0 -0
  328. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/usage.rst +0 -0
  329. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/writing_plugins.rst +0 -0
  330. {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/xunit_setup.rst +0 -0
  331. {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/cramer2.png +0 -0
  332. {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/favicon.png +0 -0
  333. {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/freiburg2.jpg +0 -0
  334. {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/gaynor3.png +0 -0
  335. {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/keleshev.png +0 -0
  336. {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/pullrequest.png +0 -0
  337. {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/pylib.png +0 -0
  338. {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/pytest1.png +0 -0
  339. {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/pytest_logo_curves.svg +0 -0
  340. {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/theuni.png +0 -0
  341. {pytest-8.1.0 → pytest-8.1.2}/doc/en/license.rst +0 -0
  342. {pytest-8.1.0 → pytest-8.1.2}/doc/en/naming20.rst +0 -0
  343. {pytest-8.1.0 → pytest-8.1.2}/doc/en/proposals/parametrize_with_fixtures.rst +0 -0
  344. {pytest-8.1.0 → pytest-8.1.2}/doc/en/pytest.ini +0 -0
  345. {pytest-8.1.0 → pytest-8.1.2}/doc/en/recwarn.rst +0 -0
  346. {pytest-8.1.0 → pytest-8.1.2}/doc/en/reference/customize.rst +0 -0
  347. {pytest-8.1.0 → pytest-8.1.2}/doc/en/reference/exit-codes.rst +0 -0
  348. {pytest-8.1.0 → pytest-8.1.2}/doc/en/reference/fixtures.rst +0 -0
  349. {pytest-8.1.0 → pytest-8.1.2}/doc/en/reference/index.rst +0 -0
  350. {pytest-8.1.0 → pytest-8.1.2}/doc/en/reference/plugin_list.rst +0 -0
  351. {pytest-8.1.0 → pytest-8.1.2}/doc/en/reference/reference.rst +0 -0
  352. {pytest-8.1.0 → pytest-8.1.2}/doc/en/requirements.txt +0 -0
  353. {pytest-8.1.0 → pytest-8.1.2}/doc/en/sponsor.rst +0 -0
  354. {pytest-8.1.0 → pytest-8.1.2}/doc/en/talks.rst +0 -0
  355. {pytest-8.1.0 → pytest-8.1.2}/doc/en/tidelift.rst +0 -0
  356. {pytest-8.1.0 → pytest-8.1.2}/doc/en/yieldfixture.rst +0 -0
  357. {pytest-8.1.0 → pytest-8.1.2}/extra/get_issues.py +0 -0
  358. {pytest-8.1.0 → pytest-8.1.2}/pyproject.toml +0 -0
  359. {pytest-8.1.0 → pytest-8.1.2}/scripts/.gitignore +0 -0
  360. {pytest-8.1.0 → pytest-8.1.2}/scripts/generate-gh-release-notes.py +0 -0
  361. {pytest-8.1.0 → pytest-8.1.2}/scripts/prepare-release-pr.py +0 -0
  362. {pytest-8.1.0 → pytest-8.1.2}/scripts/release.major.rst +0 -0
  363. {pytest-8.1.0 → pytest-8.1.2}/scripts/release.minor.rst +0 -0
  364. {pytest-8.1.0 → pytest-8.1.2}/scripts/release.patch.rst +0 -0
  365. {pytest-8.1.0 → pytest-8.1.2}/scripts/release.pre.rst +0 -0
  366. {pytest-8.1.0 → pytest-8.1.2}/scripts/release.py +0 -0
  367. {pytest-8.1.0 → pytest-8.1.2}/scripts/towncrier-draft-to-file.py +0 -0
  368. {pytest-8.1.0 → pytest-8.1.2}/scripts/update-plugin-list.py +0 -0
  369. {pytest-8.1.0 → pytest-8.1.2}/setup.cfg +0 -0
  370. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/__init__.py +0 -0
  371. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_argcomplete.py +0 -0
  372. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_code/__init__.py +0 -0
  373. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_code/source.py +0 -0
  374. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_io/__init__.py +0 -0
  375. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_io/pprint.py +0 -0
  376. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_io/saferepr.py +0 -0
  377. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_io/terminalwriter.py +0 -0
  378. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_io/wcwidth.py +0 -0
  379. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_py/__init__.py +0 -0
  380. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_py/error.py +0 -0
  381. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_py/path.py +0 -0
  382. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/assertion/__init__.py +0 -0
  383. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/assertion/rewrite.py +0 -0
  384. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/assertion/truncate.py +0 -0
  385. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/assertion/util.py +0 -0
  386. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/cacheprovider.py +0 -0
  387. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/capture.py +0 -0
  388. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/config/argparsing.py +0 -0
  389. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/config/exceptions.py +0 -0
  390. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/config/findpaths.py +0 -0
  391. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/debugging.py +0 -0
  392. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/doctest.py +0 -0
  393. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/faulthandler.py +0 -0
  394. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/fixtures.py +0 -0
  395. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/freeze_support.py +0 -0
  396. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/helpconfig.py +0 -0
  397. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/junitxml.py +0 -0
  398. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/logging.py +0 -0
  399. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/mark/__init__.py +0 -0
  400. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/mark/expression.py +0 -0
  401. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/mark/structures.py +0 -0
  402. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/monkeypatch.py +0 -0
  403. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/outcomes.py +0 -0
  404. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/pastebin.py +0 -0
  405. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/py.typed +0 -0
  406. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/pytester.py +0 -0
  407. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/pytester_assertions.py +0 -0
  408. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/python_path.py +0 -0
  409. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/recwarn.py +0 -0
  410. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/reports.py +0 -0
  411. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/runner.py +0 -0
  412. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/scope.py +0 -0
  413. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/setuponly.py +0 -0
  414. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/setupplan.py +0 -0
  415. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/skipping.py +0 -0
  416. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/stepwise.py +0 -0
  417. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/terminal.py +0 -0
  418. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/threadexception.py +0 -0
  419. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/timing.py +0 -0
  420. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/tmpdir.py +0 -0
  421. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/unittest.py +0 -0
  422. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/unraisableexception.py +0 -0
  423. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/warning_types.py +0 -0
  424. {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/warnings.py +0 -0
  425. {pytest-8.1.0 → pytest-8.1.2}/src/py.py +0 -0
  426. {pytest-8.1.0 → pytest-8.1.2}/src/pytest/__init__.py +0 -0
  427. {pytest-8.1.0 → pytest-8.1.2}/src/pytest/__main__.py +0 -0
  428. {pytest-8.1.0 → pytest-8.1.2}/src/pytest/py.typed +0 -0
  429. {pytest-8.1.0 → pytest-8.1.2}/src/pytest.egg-info/dependency_links.txt +0 -0
  430. {pytest-8.1.0 → pytest-8.1.2}/src/pytest.egg-info/entry_points.txt +0 -0
  431. {pytest-8.1.0 → pytest-8.1.2}/src/pytest.egg-info/requires.txt +0 -0
  432. {pytest-8.1.0 → pytest-8.1.2}/src/pytest.egg-info/top_level.txt +0 -0
  433. {pytest-8.1.0 → pytest-8.1.2}/testing/_py/test_local.py +0 -0
  434. {pytest-8.1.0 → pytest-8.1.2}/testing/acceptance_test.py +0 -0
  435. {pytest-8.1.0 → pytest-8.1.2}/testing/code/test_code.py +0 -0
  436. {pytest-8.1.0 → pytest-8.1.2}/testing/code/test_excinfo.py +0 -0
  437. {pytest-8.1.0 → pytest-8.1.2}/testing/code/test_source.py +0 -0
  438. {pytest-8.1.0 → pytest-8.1.2}/testing/conftest.py +0 -0
  439. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/README.rst +0 -0
  440. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/__init__.py +0 -0
  441. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/acceptance/fixture_mock_integration.py +0 -0
  442. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/collect_init_tests/pytest.ini +0 -0
  443. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/collect_init_tests/tests/__init__.py +0 -0
  444. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/collect_init_tests/tests/test_foo.py +0 -0
  445. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/package_infinite_recursion/__init__.pyi +0 -0
  446. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/package_infinite_recursion/conftest.py +0 -0
  447. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/package_infinite_recursion/tests/__init__.py +0 -0
  448. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/package_infinite_recursion/tests/test_basic.py +0 -0
  449. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/package_init_given_as_arg/pkg/__init__.py +0 -0
  450. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/package_init_given_as_arg/pkg/test_foo.py +0 -0
  451. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/config/collect_pytest_prefix/__init__.pyi +0 -0
  452. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/config/collect_pytest_prefix/conftest.py +0 -0
  453. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/config/collect_pytest_prefix/test_foo.py +0 -0
  454. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/conftest_usageerror/__init__.pyi +0 -0
  455. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/conftest_usageerror/conftest.py +0 -0
  456. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/customdirectory/conftest.py +0 -0
  457. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/customdirectory/pytest.ini +0 -0
  458. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/customdirectory/tests/manifest.json +0 -0
  459. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/customdirectory/tests/test_first.py +0 -0
  460. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/customdirectory/tests/test_second.py +0 -0
  461. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/customdirectory/tests/test_third.py +0 -0
  462. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_dataclasses.py +0 -0
  463. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_dataclasses_field_comparison_off.py +0 -0
  464. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_dataclasses_verbose.py +0 -0
  465. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_dataclasses_with_custom_eq.py +0 -0
  466. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_initvar.py +0 -0
  467. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_recursive_dataclasses.py +0 -0
  468. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_two_different_dataclasses.py +0 -0
  469. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/doctest/main_py/__main__.py +0 -0
  470. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/doctest/main_py/test_normal_module.py +0 -0
  471. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/custom_item/__init__.pyi +0 -0
  472. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/custom_item/conftest.py +0 -0
  473. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/custom_item/foo/__init__.py +0 -0
  474. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/custom_item/foo/test_foo.py +0 -0
  475. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub1/__init__.py +0 -0
  476. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub1/conftest.py +0 -0
  477. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub1/test_in_sub1.py +0 -0
  478. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub2/__init__.py +0 -0
  479. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub2/conftest.py +0 -0
  480. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub2/test_in_sub2.py +0 -0
  481. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_detect_recursive_dependency_error.py +0 -0
  482. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/__init__.pyi +0 -0
  483. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/conftest.py +0 -0
  484. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/pkg/__init__.py +0 -0
  485. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/pkg/conftest.py +0 -0
  486. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/pkg/test_spam.py +0 -0
  487. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_module/__init__.pyi +0 -0
  488. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_module/conftest.py +0 -0
  489. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_module/test_extend_fixture_conftest_module.py +0 -0
  490. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_module_class.py +0 -0
  491. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_basic.py +0 -0
  492. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_lookup_classlevel.py +0 -0
  493. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_lookup_modulelevel.py +0 -0
  494. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_lookupfails.py +0 -0
  495. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/test_fixture_named_request.py +0 -0
  496. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/test_getfixturevalue_dynamic.py +0 -0
  497. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/issue88_initial_file_multinodes/__init__.pyi +0 -0
  498. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/issue88_initial_file_multinodes/conftest.py +0 -0
  499. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/issue88_initial_file_multinodes/test_hello.py +0 -0
  500. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/issue_519.py +0 -0
  501. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/junit-10.xsd +0 -0
  502. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/marks/marks_considered_keywords/__init__.pyi +0 -0
  503. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/marks/marks_considered_keywords/conftest.py +0 -0
  504. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/marks/marks_considered_keywords/test_marks_as_keywords.py +0 -0
  505. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/perf_examples/collect_stats/.gitignore +0 -0
  506. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/perf_examples/collect_stats/generate_folders.py +0 -0
  507. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/perf_examples/collect_stats/template_test.py +0 -0
  508. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/pytest.ini +0 -0
  509. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/tmpdir/tmp_path_fixture.py +0 -0
  510. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_parametrized_fixture_error_message.py +0 -0
  511. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_setup_skip.py +0 -0
  512. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_setup_skip_class.py +0 -0
  513. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_setup_skip_module.py +0 -0
  514. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_unittest_asyncio.py +0 -0
  515. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_unittest_asynctest.py +0 -0
  516. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_unittest_plain_async.py +0 -0
  517. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/warnings/test_group_warnings_by_message.py +0 -0
  518. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/warnings/test_group_warnings_by_message_summary/test_1.py +0 -0
  519. {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/warnings/test_group_warnings_by_message_summary/test_2.py +0 -0
  520. {pytest-8.1.0 → pytest-8.1.2}/testing/examples/test_issue519.py +0 -0
  521. {pytest-8.1.0 → pytest-8.1.2}/testing/freeze/.gitignore +0 -0
  522. {pytest-8.1.0 → pytest-8.1.2}/testing/freeze/create_executable.py +0 -0
  523. {pytest-8.1.0 → pytest-8.1.2}/testing/freeze/runtests_script.py +0 -0
  524. {pytest-8.1.0 → pytest-8.1.2}/testing/freeze/tests/test_doctest.txt +0 -0
  525. {pytest-8.1.0 → pytest-8.1.2}/testing/freeze/tests/test_trivial.py +0 -0
  526. {pytest-8.1.0 → pytest-8.1.2}/testing/freeze/tox_run.py +0 -0
  527. {pytest-8.1.0 → pytest-8.1.2}/testing/io/test_pprint.py +0 -0
  528. {pytest-8.1.0 → pytest-8.1.2}/testing/io/test_saferepr.py +0 -0
  529. {pytest-8.1.0 → pytest-8.1.2}/testing/io/test_terminalwriter.py +0 -0
  530. {pytest-8.1.0 → pytest-8.1.2}/testing/io/test_wcwidth.py +0 -0
  531. {pytest-8.1.0 → pytest-8.1.2}/testing/logging/test_fixture.py +0 -0
  532. {pytest-8.1.0 → pytest-8.1.2}/testing/logging/test_formatter.py +0 -0
  533. {pytest-8.1.0 → pytest-8.1.2}/testing/logging/test_reporting.py +0 -0
  534. {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/.gitignore +0 -0
  535. {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/README.rst +0 -0
  536. {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/bdd_wallet.feature +0 -0
  537. {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/bdd_wallet.py +0 -0
  538. {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/django_settings.py +0 -0
  539. {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/pytest.ini +0 -0
  540. {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/pytest_anyio_integration.py +0 -0
  541. {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/pytest_asyncio_integration.py +0 -0
  542. {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/pytest_mock_integration.py +0 -0
  543. {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/pytest_trio_integration.py +0 -0
  544. {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/pytest_twisted_integration.py +0 -0
  545. {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/requirements.txt +0 -0
  546. {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/simple_integration.py +0 -0
  547. {pytest-8.1.0 → pytest-8.1.2}/testing/python/collect.py +0 -0
  548. {pytest-8.1.0 → pytest-8.1.2}/testing/python/fixtures.py +0 -0
  549. {pytest-8.1.0 → pytest-8.1.2}/testing/python/integration.py +0 -0
  550. {pytest-8.1.0 → pytest-8.1.2}/testing/python/metafunc.py +0 -0
  551. {pytest-8.1.0 → pytest-8.1.2}/testing/python/raises.py +0 -0
  552. {pytest-8.1.0 → pytest-8.1.2}/testing/python/show_fixtures_per_test.py +0 -0
  553. {pytest-8.1.0 → pytest-8.1.2}/testing/test_argcomplete.py +0 -0
  554. {pytest-8.1.0 → pytest-8.1.2}/testing/test_assertion.py +0 -0
  555. {pytest-8.1.0 → pytest-8.1.2}/testing/test_assertrewrite.py +0 -0
  556. {pytest-8.1.0 → pytest-8.1.2}/testing/test_cacheprovider.py +0 -0
  557. {pytest-8.1.0 → pytest-8.1.2}/testing/test_capture.py +0 -0
  558. {pytest-8.1.0 → pytest-8.1.2}/testing/test_collection.py +0 -0
  559. {pytest-8.1.0 → pytest-8.1.2}/testing/test_compat.py +0 -0
  560. {pytest-8.1.0 → pytest-8.1.2}/testing/test_config.py +0 -0
  561. {pytest-8.1.0 → pytest-8.1.2}/testing/test_conftest.py +0 -0
  562. {pytest-8.1.0 → pytest-8.1.2}/testing/test_debugging.py +0 -0
  563. {pytest-8.1.0 → pytest-8.1.2}/testing/test_doctest.py +0 -0
  564. {pytest-8.1.0 → pytest-8.1.2}/testing/test_entry_points.py +0 -0
  565. {pytest-8.1.0 → pytest-8.1.2}/testing/test_error_diffs.py +0 -0
  566. {pytest-8.1.0 → pytest-8.1.2}/testing/test_faulthandler.py +0 -0
  567. {pytest-8.1.0 → pytest-8.1.2}/testing/test_findpaths.py +0 -0
  568. {pytest-8.1.0 → pytest-8.1.2}/testing/test_helpconfig.py +0 -0
  569. {pytest-8.1.0 → pytest-8.1.2}/testing/test_junitxml.py +0 -0
  570. {pytest-8.1.0 → pytest-8.1.2}/testing/test_link_resolve.py +0 -0
  571. {pytest-8.1.0 → pytest-8.1.2}/testing/test_main.py +0 -0
  572. {pytest-8.1.0 → pytest-8.1.2}/testing/test_mark.py +0 -0
  573. {pytest-8.1.0 → pytest-8.1.2}/testing/test_mark_expression.py +0 -0
  574. {pytest-8.1.0 → pytest-8.1.2}/testing/test_meta.py +0 -0
  575. {pytest-8.1.0 → pytest-8.1.2}/testing/test_monkeypatch.py +0 -0
  576. {pytest-8.1.0 → pytest-8.1.2}/testing/test_parseopt.py +0 -0
  577. {pytest-8.1.0 → pytest-8.1.2}/testing/test_pastebin.py +0 -0
  578. {pytest-8.1.0 → pytest-8.1.2}/testing/test_pluginmanager.py +0 -0
  579. {pytest-8.1.0 → pytest-8.1.2}/testing/test_pytester.py +0 -0
  580. {pytest-8.1.0 → pytest-8.1.2}/testing/test_python_path.py +0 -0
  581. {pytest-8.1.0 → pytest-8.1.2}/testing/test_recwarn.py +0 -0
  582. {pytest-8.1.0 → pytest-8.1.2}/testing/test_reports.py +0 -0
  583. {pytest-8.1.0 → pytest-8.1.2}/testing/test_runner.py +0 -0
  584. {pytest-8.1.0 → pytest-8.1.2}/testing/test_runner_xunit.py +0 -0
  585. {pytest-8.1.0 → pytest-8.1.2}/testing/test_scope.py +0 -0
  586. {pytest-8.1.0 → pytest-8.1.2}/testing/test_session.py +0 -0
  587. {pytest-8.1.0 → pytest-8.1.2}/testing/test_setuponly.py +0 -0
  588. {pytest-8.1.0 → pytest-8.1.2}/testing/test_setupplan.py +0 -0
  589. {pytest-8.1.0 → pytest-8.1.2}/testing/test_skipping.py +0 -0
  590. {pytest-8.1.0 → pytest-8.1.2}/testing/test_stash.py +0 -0
  591. {pytest-8.1.0 → pytest-8.1.2}/testing/test_stepwise.py +0 -0
  592. {pytest-8.1.0 → pytest-8.1.2}/testing/test_terminal.py +0 -0
  593. {pytest-8.1.0 → pytest-8.1.2}/testing/test_threadexception.py +0 -0
  594. {pytest-8.1.0 → pytest-8.1.2}/testing/test_tmpdir.py +0 -0
  595. {pytest-8.1.0 → pytest-8.1.2}/testing/test_unittest.py +0 -0
  596. {pytest-8.1.0 → pytest-8.1.2}/testing/test_unraisableexception.py +0 -0
  597. {pytest-8.1.0 → pytest-8.1.2}/testing/test_warning_types.py +0 -0
  598. {pytest-8.1.0 → pytest-8.1.2}/testing/test_warnings.py +0 -0
  599. {pytest-8.1.0 → pytest-8.1.2}/testing/typing_checks.py +0 -0
  600. {pytest-8.1.0 → pytest-8.1.2}/tox.ini +0 -0
@@ -318,6 +318,7 @@ Pierre Sassoulas
318
318
  Pieter Mulder
319
319
  Piotr Banaszkiewicz
320
320
  Piotr Helm
321
+ Poulami Sau
321
322
  Prakhar Gurunani
322
323
  Prashant Anand
323
324
  Prashant Sharma
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pytest
3
- Version: 8.1.0
3
+ Version: 8.1.2
4
4
  Summary: pytest: simple powerful testing with Python
5
5
  Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin, Others (See AUTHORS)
6
6
  License: MIT
@@ -6,6 +6,8 @@ Release announcements
6
6
  :maxdepth: 2
7
7
 
8
8
 
9
+ release-8.1.2
10
+ release-8.1.1
9
11
  release-8.1.0
10
12
  release-8.0.2
11
13
  release-8.0.1
@@ -0,0 +1,18 @@
1
+ pytest-8.1.1
2
+ =======================================
3
+
4
+ pytest 8.1.1 has just been released to PyPI.
5
+
6
+ This is a bug-fix release, being a drop-in replacement. To upgrade::
7
+
8
+ pip install --upgrade pytest
9
+
10
+ The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
11
+
12
+ Thanks to all of the contributors to this release:
13
+
14
+ * Ran Benita
15
+
16
+
17
+ Happy testing,
18
+ The pytest Development Team
@@ -0,0 +1,18 @@
1
+ pytest-8.1.2
2
+ =======================================
3
+
4
+ pytest 8.1.2 has just been released to PyPI.
5
+
6
+ This is a bug-fix release, being a drop-in replacement. To upgrade::
7
+
8
+ pip install --upgrade pytest
9
+
10
+ The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
11
+
12
+ Thanks to all of the contributors to this release:
13
+
14
+ * Bruno Oliveira
15
+
16
+
17
+ Happy testing,
18
+ The pytest Development Team
@@ -170,10 +170,10 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
170
170
  `pytest-xdist <https://github.com/pytest-dev/pytest-xdist>`__ plugin. See
171
171
  :issue:`7767` for details.
172
172
 
173
- tmpdir_factory [session scope] -- .../_pytest/legacypath.py:317
173
+ tmpdir_factory [session scope] -- .../_pytest/legacypath.py:303
174
174
  Return a :class:`pytest.TempdirFactory` instance for the test session.
175
175
 
176
- tmpdir -- .../_pytest/legacypath.py:324
176
+ tmpdir -- .../_pytest/legacypath.py:310
177
177
  Return a temporary directory path object which is unique to each test
178
178
  function invocation, created as a sub directory of the base temporary
179
179
  directory.
@@ -28,9 +28,23 @@ with advance notice in the **Deprecations** section of releases.
28
28
 
29
29
  .. towncrier release notes start
30
30
 
31
- pytest 8.1.0 (2024-03-03)
31
+ pytest 8.1.2 (2024-04-26)
32
32
  =========================
33
33
 
34
+ Bug Fixes
35
+ ---------
36
+
37
+ - `#12114 <https://github.com/pytest-dev/pytest/issues/12114>`_: Fixed error in :func:`pytest.approx` when used with `numpy` arrays and comparing with other types.
38
+
39
+
40
+ pytest 8.1.1 (2024-03-08)
41
+ =========================
42
+
43
+ .. note::
44
+
45
+ This release is not a usual bug fix release -- it contains features and improvements, being a follow up
46
+ to ``8.1.0``, which has been yanked from PyPI.
47
+
34
48
  Features
35
49
  --------
36
50
 
@@ -86,6 +100,9 @@ Improvements
86
100
  Bug Fixes
87
101
  ---------
88
102
 
103
+ - `#11475 <https://github.com/pytest-dev/pytest/issues/11475>`_: Fixed regression where ``--importmode=importlib`` would import non-test modules more than once.
104
+
105
+
89
106
  - `#11904 <https://github.com/pytest-dev/pytest/issues/11904>`_: Fixed a regression in pytest 8.0.0 that would cause test collection to fail due to permission errors when using ``--pyargs``.
90
107
 
91
108
  This change improves the collection tree for tests specified using ``--pyargs``, see :pull:`12043` for a comparison with pytest 8.0 and <8.
@@ -100,7 +117,6 @@ Bug Fixes
100
117
  - `#12039 <https://github.com/pytest-dev/pytest/issues/12039>`_: Fixed a regression in ``8.0.2`` where tests created using :fixture:`tmp_path` have been collected multiple times in CI under Windows.
101
118
 
102
119
 
103
-
104
120
  Improved Documentation
105
121
  ----------------------
106
122
 
@@ -120,6 +136,28 @@ Trivial/Internal Changes
120
136
  If you really need to, copy the function from the previous pytest release.
121
137
 
122
138
 
139
+ - `#12069 <https://github.com/pytest-dev/pytest/issues/12069>`_: Delayed the deprecation of the following features to ``9.0.0``:
140
+
141
+ * :ref:`node-ctor-fspath-deprecation`.
142
+ * :ref:`legacy-path-hooks-deprecated`.
143
+
144
+ It was discovered after ``8.1.0`` was released that the warnings about the impeding removal were not being displayed, so the team decided to revert the removal.
145
+
146
+ This is the reason for ``8.1.0`` being yanked.
147
+
148
+
149
+ pytest 8.1.0 (YANKED)
150
+ =====================
151
+
152
+
153
+ .. note::
154
+
155
+ This release has been **yanked**: it broke some plugins without the proper warning period, due to
156
+ some warnings not showing up as expected.
157
+
158
+ See `#12069 <https://github.com/pytest-dev/pytest/issues/12069>`__.
159
+
160
+
123
161
  pytest 8.0.2 (2024-02-24)
124
162
  =========================
125
163
 
@@ -200,6 +200,7 @@ nitpick_ignore = [
200
200
  ("py:class", "_tracing.TagTracerSub"),
201
201
  ("py:class", "warnings.WarningMessage"),
202
202
  # Undocumented type aliases
203
+ ("py:class", "LEGACY_PATH"),
203
204
  ("py:class", "_PluggyPlugin"),
204
205
  # TypeVars
205
206
  ("py:class", "_pytest._code.code.E"),
@@ -394,7 +395,7 @@ epub_copyright = "2013, holger krekel et alii"
394
395
  # The format is a list of tuples containing the path and title.
395
396
  # epub_pre_files = []
396
397
 
397
- # HTML files shat should be inserted after the pages created by sphinx.
398
+ # HTML files that should be inserted after the pages created by sphinx.
398
399
  # The format is a list of tuples containing the path and title.
399
400
  # epub_post_files = []
400
401
 
@@ -19,7 +19,45 @@ Below is a complete list of all pytest features which are considered deprecated.
19
19
  :class:`~pytest.PytestWarning` or subclasses, which can be filtered using :ref:`standard warning filters <warnings>`.
20
20
 
21
21
 
22
- .. _legacy-path-hooks-deprecated:
22
+ .. _node-ctor-fspath-deprecation:
23
+
24
+ ``fspath`` argument for Node constructors replaced with ``pathlib.Path``
25
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
26
+
27
+ .. deprecated:: 7.0
28
+
29
+ In order to support the transition from ``py.path.local`` to :mod:`pathlib`,
30
+ the ``fspath`` argument to :class:`~_pytest.nodes.Node` constructors like
31
+ :func:`pytest.Function.from_parent()` and :func:`pytest.Class.from_parent()`
32
+ is now deprecated.
33
+
34
+ Plugins which construct nodes should pass the ``path`` argument, of type
35
+ :class:`pathlib.Path`, instead of the ``fspath`` argument.
36
+
37
+ Plugins which implement custom items and collectors are encouraged to replace
38
+ ``fspath`` parameters (``py.path.local``) with ``path`` parameters
39
+ (``pathlib.Path``), and drop any other usage of the ``py`` library if possible.
40
+
41
+ If possible, plugins with custom items should use :ref:`cooperative
42
+ constructors <uncooperative-constructors-deprecated>` to avoid hardcoding
43
+ arguments they only pass on to the superclass.
44
+
45
+ .. note::
46
+ The name of the :class:`~_pytest.nodes.Node` arguments and attributes (the
47
+ new attribute being ``path``) is **the opposite** of the situation for
48
+ hooks, :ref:`outlined below <legacy-path-hooks-deprecated>` (the old
49
+ argument being ``path``).
50
+
51
+ This is an unfortunate artifact due to historical reasons, which should be
52
+ resolved in future versions as we slowly get rid of the :pypi:`py`
53
+ dependency (see :issue:`9283` for a longer discussion).
54
+
55
+ Due to the ongoing migration of methods like :meth:`~pytest.Item.reportinfo`
56
+ which still is expected to return a ``py.path.local`` object, nodes still have
57
+ both ``fspath`` (``py.path.local``) and ``path`` (``pathlib.Path``) attributes,
58
+ no matter what argument was used in the constructor. We expect to deprecate the
59
+ ``fspath`` attribute in a future release.
60
+
23
61
 
24
62
  Configuring hook specs/impls using markers
25
63
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -62,6 +100,33 @@ Changed ``hookwrapper`` attributes:
62
100
  * ``historic``
63
101
 
64
102
 
103
+ .. _legacy-path-hooks-deprecated:
104
+
105
+ ``py.path.local`` arguments for hooks replaced with ``pathlib.Path``
106
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
107
+
108
+ .. deprecated:: 7.0
109
+
110
+ In order to support the transition from ``py.path.local`` to :mod:`pathlib`, the following hooks now receive additional arguments:
111
+
112
+ * :hook:`pytest_ignore_collect(collection_path: pathlib.Path) <pytest_ignore_collect>` as equivalent to ``path``
113
+ * :hook:`pytest_collect_file(file_path: pathlib.Path) <pytest_collect_file>` as equivalent to ``path``
114
+ * :hook:`pytest_pycollect_makemodule(module_path: pathlib.Path) <pytest_pycollect_makemodule>` as equivalent to ``path``
115
+ * :hook:`pytest_report_header(start_path: pathlib.Path) <pytest_report_header>` as equivalent to ``startdir``
116
+ * :hook:`pytest_report_collectionfinish(start_path: pathlib.Path) <pytest_report_collectionfinish>` as equivalent to ``startdir``
117
+
118
+ The accompanying ``py.path.local`` based paths have been deprecated: plugins which manually invoke those hooks should only pass the new ``pathlib.Path`` arguments, and users should change their hook implementations to use the new ``pathlib.Path`` arguments.
119
+
120
+ .. note::
121
+ The name of the :class:`~_pytest.nodes.Node` arguments and attributes,
122
+ :ref:`outlined above <node-ctor-fspath-deprecation>` (the new attribute
123
+ being ``path``) is **the opposite** of the situation for hooks (the old
124
+ argument being ``path``).
125
+
126
+ This is an unfortunate artifact due to historical reasons, which should be
127
+ resolved in future versions as we slowly get rid of the :pypi:`py`
128
+ dependency (see :issue:`9283` for a longer discussion).
129
+
65
130
  Directly constructing internal classes
66
131
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67
132
 
@@ -208,73 +273,6 @@ an appropriate period of deprecation has passed.
208
273
 
209
274
  Some breaking changes which could not be deprecated are also listed.
210
275
 
211
- .. _node-ctor-fspath-deprecation:
212
-
213
- ``fspath`` argument for Node constructors replaced with ``pathlib.Path``
214
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
215
-
216
- .. deprecated:: 7.0
217
-
218
- In order to support the transition from ``py.path.local`` to :mod:`pathlib`,
219
- the ``fspath`` argument to :class:`~_pytest.nodes.Node` constructors like
220
- :func:`pytest.Function.from_parent()` and :func:`pytest.Class.from_parent()`
221
- is now deprecated.
222
-
223
- Plugins which construct nodes should pass the ``path`` argument, of type
224
- :class:`pathlib.Path`, instead of the ``fspath`` argument.
225
-
226
- Plugins which implement custom items and collectors are encouraged to replace
227
- ``fspath`` parameters (``py.path.local``) with ``path`` parameters
228
- (``pathlib.Path``), and drop any other usage of the ``py`` library if possible.
229
-
230
- If possible, plugins with custom items should use :ref:`cooperative
231
- constructors <uncooperative-constructors-deprecated>` to avoid hardcoding
232
- arguments they only pass on to the superclass.
233
-
234
- .. note::
235
- The name of the :class:`~_pytest.nodes.Node` arguments and attributes (the
236
- new attribute being ``path``) is **the opposite** of the situation for
237
- hooks, :ref:`outlined below <legacy-path-hooks-deprecated>` (the old
238
- argument being ``path``).
239
-
240
- This is an unfortunate artifact due to historical reasons, which should be
241
- resolved in future versions as we slowly get rid of the :pypi:`py`
242
- dependency (see :issue:`9283` for a longer discussion).
243
-
244
- Due to the ongoing migration of methods like :meth:`~pytest.Item.reportinfo`
245
- which still is expected to return a ``py.path.local`` object, nodes still have
246
- both ``fspath`` (``py.path.local``) and ``path`` (``pathlib.Path``) attributes,
247
- no matter what argument was used in the constructor. We expect to deprecate the
248
- ``fspath`` attribute in a future release.
249
-
250
-
251
- ``py.path.local`` arguments for hooks replaced with ``pathlib.Path``
252
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
253
-
254
- .. deprecated:: 7.0
255
- .. versionremoved:: 8.0
256
-
257
- In order to support the transition from ``py.path.local`` to :mod:`pathlib`, the following hooks now receive additional arguments:
258
-
259
- * :hook:`pytest_ignore_collect(collection_path: pathlib.Path) <pytest_ignore_collect>` as equivalent to ``path``
260
- * :hook:`pytest_collect_file(file_path: pathlib.Path) <pytest_collect_file>` as equivalent to ``path``
261
- * :hook:`pytest_pycollect_makemodule(module_path: pathlib.Path) <pytest_pycollect_makemodule>` as equivalent to ``path``
262
- * :hook:`pytest_report_header(start_path: pathlib.Path) <pytest_report_header>` as equivalent to ``startdir``
263
- * :hook:`pytest_report_collectionfinish(start_path: pathlib.Path) <pytest_report_collectionfinish>` as equivalent to ``startdir``
264
-
265
- The accompanying ``py.path.local`` based paths have been deprecated: plugins which manually invoke those hooks should only pass the new ``pathlib.Path`` arguments, and users should change their hook implementations to use the new ``pathlib.Path`` arguments.
266
-
267
- .. note::
268
- The name of the :class:`~_pytest.nodes.Node` arguments and attributes,
269
- :ref:`outlined above <node-ctor-fspath-deprecation>` (the new attribute
270
- being ``path``) is **the opposite** of the situation for hooks (the old
271
- argument being ``path``).
272
-
273
- This is an unfortunate artifact due to historical reasons, which should be
274
- resolved in future versions as we slowly get rid of the :pypi:`py`
275
- dependency (see :issue:`9283` for a longer discussion).
276
-
277
-
278
276
  .. _nose-deprecation:
279
277
 
280
278
  Support for tests written for nose
@@ -162,7 +162,7 @@ objects, they are still using the default pytest representation:
162
162
  rootdir: /home/sweet/project
163
163
  collected 8 items
164
164
 
165
- <Dir parametrize.rst-195>
165
+ <Dir parametrize.rst-197>
166
166
  <Module test_time.py>
167
167
  <Function test_timedistance_v0[a0-b0-expected0]>
168
168
  <Function test_timedistance_v0[a1-b1-expected1]>
@@ -239,7 +239,7 @@ If you just collect tests you'll also nicely see 'advanced' and 'basic' as varia
239
239
  rootdir: /home/sweet/project
240
240
  collected 4 items
241
241
 
242
- <Dir parametrize.rst-195>
242
+ <Dir parametrize.rst-197>
243
243
  <Module test_scenarios.py>
244
244
  <Class TestSampleWithScenarios>
245
245
  <Function test_demo1[basic]>
@@ -318,7 +318,7 @@ Let's first see how it looks like at collection time:
318
318
  rootdir: /home/sweet/project
319
319
  collected 2 items
320
320
 
321
- <Dir parametrize.rst-195>
321
+ <Dir parametrize.rst-197>
322
322
  <Module test_backends.py>
323
323
  <Function test_db_initialized[d1]>
324
324
  <Function test_db_initialized[d2]>
@@ -152,7 +152,7 @@ The test collection would look like this:
152
152
  configfile: pytest.ini
153
153
  collected 2 items
154
154
 
155
- <Dir pythoncollection.rst-196>
155
+ <Dir pythoncollection.rst-198>
156
156
  <Module check_myapp.py>
157
157
  <Class CheckMyApp>
158
158
  <Function simple_check>
@@ -215,7 +215,7 @@ You can always peek at the collection tree without running tests like this:
215
215
  configfile: pytest.ini
216
216
  collected 3 items
217
217
 
218
- <Dir pythoncollection.rst-196>
218
+ <Dir pythoncollection.rst-198>
219
219
  <Dir CWD>
220
220
  <Module pythoncollection.py>
221
221
  <Function test_function>
@@ -52,10 +52,9 @@ Plugins
52
52
 
53
53
  Rerunning any failed tests can mitigate the negative effects of flaky tests by giving them additional chances to pass, so that the overall build does not fail. Several pytest plugins support this:
54
54
 
55
- * `flaky <https://github.com/box/flaky>`_
56
- * `pytest-flakefinder <https://github.com/dropbox/pytest-flakefinder>`_ - `blog post <https://blogs.dropbox.com/tech/2016/03/open-sourcing-pytest-tools/>`_
57
55
  * `pytest-rerunfailures <https://github.com/pytest-dev/pytest-rerunfailures>`_
58
56
  * `pytest-replay <https://github.com/ESSS/pytest-replay>`_: This plugin helps to reproduce locally crashes or flaky tests observed during CI runs.
57
+ * `pytest-flakefinder <https://github.com/dropbox/pytest-flakefinder>`_ - `blog post <https://blogs.dropbox.com/tech/2016/03/open-sourcing-pytest-tools/>`_
59
58
 
60
59
  Plugins to deliberately randomize tests can help expose tests with state problems:
61
60
 
@@ -106,7 +105,7 @@ This is a limited list, please submit an issue or pull request to expand it!
106
105
  * Gao, Zebao, Yalan Liang, Myra B. Cohen, Atif M. Memon, and Zhen Wang. "Making system user interactive tests repeatable: When and what should we control?." In *Software Engineering (ICSE), 2015 IEEE/ACM 37th IEEE International Conference on*, vol. 1, pp. 55-65. IEEE, 2015. `PDF <http://www.cs.umd.edu/~atif/pubs/gao-icse15.pdf>`__
107
106
  * Palomba, Fabio, and Andy Zaidman. "Does refactoring of test smells induce fixing flaky tests?." In *Software Maintenance and Evolution (ICSME), 2017 IEEE International Conference on*, pp. 1-12. IEEE, 2017. `PDF in Google Drive <https://drive.google.com/file/d/10HdcCQiuQVgW3yYUJD-TSTq1NbYEprl0/view>`__
108
107
  * Bell, Jonathan, Owolabi Legunsen, Michael Hilton, Lamyaa Eloussi, Tifany Yung, and Darko Marinov. "DeFlaker: Automatically detecting flaky tests." In *Proceedings of the 2018 International Conference on Software Engineering*. 2018. `PDF <https://www.jonbell.net/icse18-deflaker.pdf>`__
109
-
108
+ * Dutta, Saikat and Shi, August and Choudhary, Rutvik and Zhang, Zhekun and Jain, Aryaman and Misailovic, Sasa. "Detecting flaky tests in probabilistic and machine learning applications." In *Proceedings of the 29th ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA)*, pp. 211-224. ACM, 2020. `PDF <https://www.cs.cornell.edu/~saikatd/papers/flash-issta20.pdf>`__
110
109
 
111
110
  Resources
112
111
  ^^^^^^^^^
@@ -22,7 +22,7 @@ Install ``pytest``
22
22
  .. code-block:: bash
23
23
 
24
24
  $ pytest --version
25
- pytest 8.1.0
25
+ pytest 8.1.2
26
26
 
27
27
  .. _`simpletest`:
28
28
 
@@ -224,6 +224,7 @@ place the objects you want to appear in the doctest namespace:
224
224
  .. code-block:: python
225
225
 
226
226
  # content of conftest.py
227
+ import pytest
227
228
  import numpy
228
229
 
229
230
 
@@ -1418,7 +1418,7 @@ Running the above tests results in the following test IDs being used:
1418
1418
  rootdir: /home/sweet/project
1419
1419
  collected 12 items
1420
1420
 
1421
- <Dir fixtures.rst-214>
1421
+ <Dir fixtures.rst-216>
1422
1422
  <Module test_anothersmtp.py>
1423
1423
  <Function test_showhelo[smtp.gmail.com]>
1424
1424
  <Function test_showhelo[mail.python.org]>
@@ -100,7 +100,7 @@ object, the wrapper may modify that result, but it's probably better to avoid it
100
100
 
101
101
  If the hook implementation failed with an exception, the wrapper can handle that
102
102
  exception using a ``try-catch-finally`` around the ``yield``, by propagating it,
103
- supressing it, or raising a different exception entirely.
103
+ suppressing it, or raising a different exception entirely.
104
104
 
105
105
  For more information, consult the
106
106
  :ref:`pluggy documentation about hook wrappers <pluggy:hookwrappers>`.
@@ -5,7 +5,8 @@
5
5
  - `Professional Testing with Python <https://python-academy.com/courses/python_course_testing.html>`_, via `Python Academy <https://www.python-academy.com/>`_ (3 day in-depth training):
6
6
  * **June 11th to 13th 2024**, Remote
7
7
  * **March 4th to 6th 2025**, Leipzig, Germany / Remote
8
- - `pytest development sprint <https://github.com/pytest-dev/pytest/discussions/11655>`_, June 2024 (`date poll <https://nuudel.digitalcourage.de/2tEsEpRcwMNcAXVO>`_)
8
+ - `pytest development sprint <https://github.com/pytest-dev/pytest/discussions/11655>`_, **June 17th -- 22nd 2024**
9
+ - pytest tips and tricks for a better testsuite, `Europython 2024 <https://ep2024.europython.eu/>`_, **July 8th -- 14th 2024** (3h), Prague
9
10
 
10
11
  Also see :doc:`previous talks and blogposts <talks>`.
11
12
 
@@ -87,7 +88,7 @@ Features
87
88
  Documentation
88
89
  -------------
89
90
 
90
- * :ref:`Get started <get-started>` - install pytest and grasp its basics just twenty minutes
91
+ * :ref:`Get started <get-started>` - install pytest and grasp its basics in just twenty minutes
91
92
  * :ref:`How-to guides <how-to>` - step-by-step guides, covering a vast range of use-cases and needs
92
93
  * :ref:`Reference guides <reference>` - includes the complete pytest API reference, lists of plugins and more
93
94
  * :ref:`Explanation <explanation>` - background, discussion of key topics, answers to higher-level questions
@@ -788,6 +788,8 @@ class ExceptionInfo(Generic[E]):
788
788
  If `None`, will search for a matching exception at any nesting depth.
789
789
  If >= 1, will only match an exception if it's at the specified depth (depth = 1 being
790
790
  the exceptions contained within the topmost exception group).
791
+
792
+ .. versionadded:: 8.0
791
793
  """
792
794
  msg = "Captured exception is not an instance of `BaseExceptionGroup`"
793
795
  assert isinstance(self.value, BaseExceptionGroup), msg
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '8.1.0'
16
- __version_tuple__ = version_tuple = (8, 1, 0)
15
+ __version__ = version = '8.1.2'
16
+ __version_tuple__ = version_tuple = (8, 1, 2)
@@ -1,5 +1,6 @@
1
1
  # mypy: allow-untyped-defs
2
2
  """Python version compatibility code."""
3
+
3
4
  from __future__ import annotations
4
5
 
5
6
  import dataclasses
@@ -16,6 +17,22 @@ from typing import Callable
16
17
  from typing import Final
17
18
  from typing import NoReturn
18
19
 
20
+ import py
21
+
22
+
23
+ #: constant to prepare valuing pylib path replacements/lazy proxies later on
24
+ # intended for removal in pytest 8.0 or 9.0
25
+
26
+ # fmt: off
27
+ # intentional space to create a fake difference for the verification
28
+ LEGACY_PATH = py.path. local
29
+ # fmt: on
30
+
31
+
32
+ def legacy_path(path: str | os.PathLike[str]) -> LEGACY_PATH:
33
+ """Internal wrapper to prepare lazy proxies for legacy_path instances"""
34
+ return LEGACY_PATH(path)
35
+
19
36
 
20
37
  # fmt: off
21
38
  # Singleton type for NOTSET, as described in:
@@ -38,12 +38,14 @@ from typing import TYPE_CHECKING
38
38
  from typing import Union
39
39
  import warnings
40
40
 
41
+ import pluggy
41
42
  from pluggy import HookimplMarker
42
43
  from pluggy import HookimplOpts
43
44
  from pluggy import HookspecMarker
44
45
  from pluggy import HookspecOpts
45
46
  from pluggy import PluginManager
46
47
 
48
+ from .compat import PathAwareHookProxy
47
49
  from .exceptions import PrintHelp as PrintHelp
48
50
  from .exceptions import UsageError as UsageError
49
51
  from .findpaths import determine_setup
@@ -1068,7 +1070,7 @@ class Config:
1068
1070
  self._store = self.stash
1069
1071
 
1070
1072
  self.trace = self.pluginmanager.trace.root.get("config")
1071
- self.hook = self.pluginmanager.hook # type: ignore[assignment]
1073
+ self.hook: pluggy.HookRelay = PathAwareHookProxy(self.pluginmanager.hook) # type: ignore[assignment]
1072
1074
  self._inicache: Dict[str, Any] = {}
1073
1075
  self._override_ini: Sequence[str] = ()
1074
1076
  self._opt2dest: Dict[str, str] = {}
@@ -0,0 +1,85 @@
1
+ from __future__ import annotations
2
+
3
+ import functools
4
+ from pathlib import Path
5
+ from typing import Any
6
+ from typing import Mapping
7
+ import warnings
8
+
9
+ import pluggy
10
+
11
+ from ..compat import LEGACY_PATH
12
+ from ..compat import legacy_path
13
+ from ..deprecated import HOOK_LEGACY_PATH_ARG
14
+
15
+
16
+ # hookname: (Path, LEGACY_PATH)
17
+ imply_paths_hooks: Mapping[str, tuple[str, str]] = {
18
+ "pytest_ignore_collect": ("collection_path", "path"),
19
+ "pytest_collect_file": ("file_path", "path"),
20
+ "pytest_pycollect_makemodule": ("module_path", "path"),
21
+ "pytest_report_header": ("start_path", "startdir"),
22
+ "pytest_report_collectionfinish": ("start_path", "startdir"),
23
+ }
24
+
25
+
26
+ def _check_path(path: Path, fspath: LEGACY_PATH) -> None:
27
+ if Path(fspath) != path:
28
+ raise ValueError(
29
+ f"Path({fspath!r}) != {path!r}\n"
30
+ "if both path and fspath are given they need to be equal"
31
+ )
32
+
33
+
34
+ class PathAwareHookProxy:
35
+ """
36
+ this helper wraps around hook callers
37
+ until pluggy supports fixingcalls, this one will do
38
+
39
+ it currently doesn't return full hook caller proxies for fixed hooks,
40
+ this may have to be changed later depending on bugs
41
+ """
42
+
43
+ def __init__(self, hook_relay: pluggy.HookRelay) -> None:
44
+ self._hook_relay = hook_relay
45
+
46
+ def __dir__(self) -> list[str]:
47
+ return dir(self._hook_relay)
48
+
49
+ def __getattr__(self, key: str) -> pluggy.HookCaller:
50
+ hook: pluggy.HookCaller = getattr(self._hook_relay, key)
51
+ if key not in imply_paths_hooks:
52
+ self.__dict__[key] = hook
53
+ return hook
54
+ else:
55
+ path_var, fspath_var = imply_paths_hooks[key]
56
+
57
+ @functools.wraps(hook)
58
+ def fixed_hook(**kw: Any) -> Any:
59
+ path_value: Path | None = kw.pop(path_var, None)
60
+ fspath_value: LEGACY_PATH | None = kw.pop(fspath_var, None)
61
+ if fspath_value is not None:
62
+ warnings.warn(
63
+ HOOK_LEGACY_PATH_ARG.format(
64
+ pylib_path_arg=fspath_var, pathlib_path_arg=path_var
65
+ ),
66
+ stacklevel=2,
67
+ )
68
+ if path_value is not None:
69
+ if fspath_value is not None:
70
+ _check_path(path_value, fspath_value)
71
+ else:
72
+ fspath_value = legacy_path(path_value)
73
+ else:
74
+ assert fspath_value is not None
75
+ path_value = Path(fspath_value)
76
+
77
+ kw[path_var] = path_value
78
+ kw[fspath_var] = fspath_value
79
+ return hook(**kw)
80
+
81
+ fixed_hook.name = hook.name # type: ignore[attr-defined]
82
+ fixed_hook.spec = hook.spec # type: ignore[attr-defined]
83
+ fixed_hook.__name__ = key
84
+ self.__dict__[key] = fixed_hook
85
+ return fixed_hook # type: ignore[return-value]
@@ -36,6 +36,21 @@ YIELD_FIXTURE = PytestDeprecationWarning(
36
36
  PRIVATE = PytestDeprecationWarning("A private pytest class or function was used.")
37
37
 
38
38
 
39
+ HOOK_LEGACY_PATH_ARG = UnformattedWarning(
40
+ PytestRemovedIn9Warning,
41
+ "The ({pylib_path_arg}: py.path.local) argument is deprecated, please use ({pathlib_path_arg}: pathlib.Path)\n"
42
+ "see https://docs.pytest.org/en/latest/deprecations.html"
43
+ "#py-path-local-arguments-for-hooks-replaced-with-pathlib-path",
44
+ )
45
+
46
+ NODE_CTOR_FSPATH_ARG = UnformattedWarning(
47
+ PytestRemovedIn9Warning,
48
+ "The (fspath: py.path.local) argument to {node_type_name} is deprecated. "
49
+ "Please use the (path: pathlib.Path) argument instead.\n"
50
+ "See https://docs.pytest.org/en/latest/deprecations.html"
51
+ "#fspath-argument-for-node-constructors-replaced-with-pathlib-path",
52
+ )
53
+
39
54
  HOOK_LEGACY_MARKING = UnformattedWarning(
40
55
  PytestDeprecationWarning,
41
56
  "The hook{type} {fullname} uses old-style configuration options (marks or attributes).\n"