brain_pytest.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. # Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
  2. # For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE
  3. # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt
  4. """Astroid hooks for pytest."""
  5. from astroid import nodes
  6. from astroid.brain.helpers import register_module_extender
  7. from astroid.builder import AstroidBuilder
  8. from astroid.manager import AstroidManager
  9. def pytest_transform() -> nodes.Module:
  10. return AstroidBuilder(AstroidManager()).string_build(
  11. """
  12. try:
  13. import _pytest.mark
  14. import _pytest.recwarn
  15. import _pytest.runner
  16. import _pytest.python
  17. import _pytest.skipping
  18. import _pytest.assertion
  19. except ImportError:
  20. pass
  21. else:
  22. deprecated_call = _pytest.recwarn.deprecated_call
  23. warns = _pytest.recwarn.warns
  24. exit = _pytest.runner.exit
  25. fail = _pytest.runner.fail
  26. skip = _pytest.runner.skip
  27. importorskip = _pytest.runner.importorskip
  28. xfail = _pytest.skipping.xfail
  29. mark = _pytest.mark.MarkGenerator()
  30. raises = _pytest.python.raises
  31. # New in pytest 3.0
  32. try:
  33. approx = _pytest.python.approx
  34. register_assert_rewrite = _pytest.assertion.register_assert_rewrite
  35. except AttributeError:
  36. pass
  37. # Moved in pytest 3.0
  38. try:
  39. import _pytest.freeze_support
  40. freeze_includes = _pytest.freeze_support.freeze_includes
  41. except ImportError:
  42. try:
  43. import _pytest.genscript
  44. freeze_includes = _pytest.genscript.freeze_includes
  45. except ImportError:
  46. pass
  47. try:
  48. import _pytest.debugging
  49. set_trace = _pytest.debugging.pytestPDB().set_trace
  50. except ImportError:
  51. try:
  52. import _pytest.pdb
  53. set_trace = _pytest.pdb.pytestPDB().set_trace
  54. except ImportError:
  55. pass
  56. try:
  57. import _pytest.fixtures
  58. fixture = _pytest.fixtures.fixture
  59. yield_fixture = _pytest.fixtures.yield_fixture
  60. except ImportError:
  61. try:
  62. import _pytest.python
  63. fixture = _pytest.python.fixture
  64. yield_fixture = _pytest.python.yield_fixture
  65. except ImportError:
  66. pass
  67. """
  68. )
  69. def register(manager: AstroidManager) -> None:
  70. register_module_extender(manager, "pytest", pytest_transform)
  71. register_module_extender(manager, "py.test", pytest_transform)