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