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
5"""Astroid hooks for pytest."""
6from astroid.brain.helpers import register_module_extender
7from astroid.builder import AstroidBuilder
8from astroid.manager import AstroidManager
9
10
11def pytest_transform():
12 return AstroidBuilder(AstroidManager()).string_build(
13 """
14
15try:
16 import _pytest.mark
17 import _pytest.recwarn
18 import _pytest.runner
19 import _pytest.python
20 import _pytest.skipping
21 import _pytest.assertion
22except ImportError:
23 pass
24else:
25 deprecated_call = _pytest.recwarn.deprecated_call
26 warns = _pytest.recwarn.warns
27
28 exit = _pytest.runner.exit
29 fail = _pytest.runner.fail
30 skip = _pytest.runner.skip
31 importorskip = _pytest.runner.importorskip
32
33 xfail = _pytest.skipping.xfail
34 mark = _pytest.mark.MarkGenerator()
35 raises = _pytest.python.raises
36
37 # New in pytest 3.0
38 try:
39 approx = _pytest.python.approx
40 register_assert_rewrite = _pytest.assertion.register_assert_rewrite
41 except AttributeError:
42 pass
43
44
45# Moved in pytest 3.0
46
47try:
48 import _pytest.freeze_support
49 freeze_includes = _pytest.freeze_support.freeze_includes
50except ImportError:
51 try:
52 import _pytest.genscript
53 freeze_includes = _pytest.genscript.freeze_includes
54 except ImportError:
55 pass
56
57try:
58 import _pytest.debugging
59 set_trace = _pytest.debugging.pytestPDB().set_trace
60except ImportError:
61 try:
62 import _pytest.pdb
63 set_trace = _pytest.pdb.pytestPDB().set_trace
64 except ImportError:
65 pass
66
67try:
68 import _pytest.fixtures
69 fixture = _pytest.fixtures.fixture
70 yield_fixture = _pytest.fixtures.yield_fixture
71except ImportError:
72 try:
73 import _pytest.python
74 fixture = _pytest.python.fixture
75 yield_fixture = _pytest.python.yield_fixture
76 except ImportError:
77 pass
78"""
79 )
80
81
82def register(manager: AstroidManager) -> None:
83 register_module_extender(manager, "pytest", pytest_transform)
84 register_module_extender(manager, "py.test", pytest_transform)