diff options
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | brain/py2pytest.py | 50 |
2 files changed, 52 insertions, 0 deletions
@@ -16,6 +16,8 @@ Change log for the astroid package (used to be astng) * Various speed improvements. Patch by Alex Munroe. + * Add pytest brain plugin. Patch by Robbie Coomber. + 2014-08-24 -- 1.2.1 * Fix a crash occurred when inferring decorator call chain. diff --git a/brain/py2pytest.py b/brain/py2pytest.py new file mode 100644 index 00000000..b5537c09 --- /dev/null +++ b/brain/py2pytest.py @@ -0,0 +1,50 @@ +"""Astroid hooks for pytest."""
+
+from astroid import MANAGER
+from astroid import nodes
+from astroid.builder import AstroidBuilder
+
+
+MODULE_TRANSFORMS = {}
+
+
+def transform(module):
+ try:
+ tr = MODULE_TRANSFORMS[module.name]
+ except KeyError:
+ pass
+ else:
+ tr(module)
+
+
+def pytest_transform(module):
+ fake = AstroidBuilder(MANAGER).string_build('''
+
+try:
+ import _pytest.mark
+ import _pytest.recwarn
+ import _pytest.runner
+ import _pytest.python
+except ImportError:
+ pass
+else:
+ deprecated_call = _pytest.recwarn.deprecated_call
+ exit = _pytest.runner.exit
+ fail = _pytest.runner.fail
+ fixture = _pytest.python.fixture
+ importorskip = _pytest.runner.importorskip
+ mark = _pytest.mark.MarkGenerator()
+ raises = _pytest.python.raises
+ skip = _pytest.runner.skip
+ yield_fixture = _pytest.python.yield_fixture
+
+''')
+
+ for item_name, item in fake.locals.items():
+ module.locals[item_name] = item
+
+
+MODULE_TRANSFORMS['pytest'] = pytest_transform
+MODULE_TRANSFORMS['py.test'] = pytest_transform
+
+MANAGER.register_transform(nodes.Module, transform)
|