From 3c2fd833caf9dc69a9eb65248fc3c4d7b83d09c5 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Wed, 17 Jun 2015 18:57:45 -0300 Subject: [PATCH] Reintroduce get_plugin_manager() for backward-compatibility PyCharm pytest runner depends on this function existing (see #787). Added reference to get_plugin_manager() and PluginManager/PytestPluginManager to docs --- _pytest/config.py | 24 ++++++++++++++++++++++++ doc/en/writing_plugins.txt | 10 ++++++++++ testing/acceptance_test.py | 6 ++++++ 3 files changed, 40 insertions(+) diff --git a/_pytest/config.py b/_pytest/config.py index b358cfd4c..a717c5f0a 100644 --- a/_pytest/config.py +++ b/_pytest/config.py @@ -82,6 +82,17 @@ def get_config(): pluginmanager.import_plugin(spec) return config +def get_plugin_manager(): + """ + Obtain a new instance of the + :py:class:`_pytest.config.PytestPluginManager`, with default plugins + already loaded. + + This function can be used by integration with other tools, like hooking + into pytest to run tests into an IDE. + """ + return get_config().pluginmanager + def _prepareconfig(args=None, plugins=None): if args is None: args = sys.argv[1:] @@ -111,6 +122,14 @@ def exclude_pytest_names(name): class PytestPluginManager(PluginManager): + """ + Overwrites :py:class:`pluggy.PluginManager` to add pytest-specific + functionality: + + * loading plugins from the command line, ``PYTEST_PLUGIN`` env variable and + ``pytest_plugins`` global variables found in plugins being loaded; + * ``conftest.py`` loading during start-up; + """ def __init__(self): super(PytestPluginManager, self).__init__("pytest", implprefix="pytest_") self._warnings = [] @@ -135,6 +154,11 @@ class PytestPluginManager(PluginManager): self.enable_tracing() def addhooks(self, module_or_class): + """ + .. deprecated:: 2.8 + + Use :py:meth:`pluggy.PluginManager.add_hookspecs` instead. + """ warning = dict(code="I2", fslocation=py.code.getfslineno(sys._getframe(1)), message="use pluginmanager.add_hookspecs instead of " diff --git a/doc/en/writing_plugins.txt b/doc/en/writing_plugins.txt index 9f201931f..928cc193e 100644 --- a/doc/en/writing_plugins.txt +++ b/doc/en/writing_plugins.txt @@ -531,6 +531,16 @@ Reference of objects involved in hooks .. autoclass:: _pytest.core.CallOutcome() :members: +.. autofunction:: _pytest.config.get_plugin_manager() + +.. autoclass:: _pytest.config.PytestPluginManager() + :members: + :undoc-members: + :show-inheritance: + +.. autoclass:: pluggy.PluginManager() + :members: + .. currentmodule:: _pytest.pytester .. autoclass:: Testdir() diff --git a/testing/acceptance_test.py b/testing/acceptance_test.py index 09f98a269..346e57dd2 100644 --- a/testing/acceptance_test.py +++ b/testing/acceptance_test.py @@ -564,6 +564,12 @@ class TestInvocationVariants: "*1 failed*", ]) + def test_core_backward_compatibility(self): + """Test backward compatibility for get_plugin_manager function. See #787.""" + import _pytest.config + assert type(_pytest.config.get_plugin_manager()) is _pytest.config.PytestPluginManager + + class TestDurations: source = """ import time