Refactor handling of non-top-level pytest_plugins handling
Decided to move the 'if' logic together with the error message, as this leaves the _importconftest method cleaner.
This commit is contained in:
parent
9e1e7fcabe
commit
c26f389c09
|
@ -286,19 +286,6 @@ def _prepareconfig(
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def _fail_on_non_top_pytest_plugins(conftestpath, confcutdir):
|
|
||||||
msg = (
|
|
||||||
"Defining 'pytest_plugins' in a non-top-level conftest is no longer supported:\n"
|
|
||||||
"It affects the entire test suite instead of just below the conftest as expected.\n"
|
|
||||||
" {}\n"
|
|
||||||
"Please move it to a top level conftest file at the rootdir:\n"
|
|
||||||
" {}\n"
|
|
||||||
"For more information, visit:\n"
|
|
||||||
" https://docs.pytest.org/en/latest/deprecations.html#pytest-plugins-in-non-top-level-conftest-files"
|
|
||||||
)
|
|
||||||
fail(msg.format(conftestpath, confcutdir), pytrace=False)
|
|
||||||
|
|
||||||
|
|
||||||
class PytestPluginManager(PluginManager):
|
class PytestPluginManager(PluginManager):
|
||||||
"""
|
"""
|
||||||
Overwrites :py:class:`pluggy.PluginManager <pluggy.PluginManager>` to add pytest-specific
|
Overwrites :py:class:`pluggy.PluginManager <pluggy.PluginManager>` to add pytest-specific
|
||||||
|
@ -527,15 +514,11 @@ class PytestPluginManager(PluginManager):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
mod = conftestpath.pyimport()
|
mod = conftestpath.pyimport()
|
||||||
if (
|
|
||||||
hasattr(mod, "pytest_plugins")
|
|
||||||
and self._configured
|
|
||||||
and not self._using_pyargs
|
|
||||||
):
|
|
||||||
_fail_on_non_top_pytest_plugins(conftestpath, self._confcutdir)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise ConftestImportFailure(conftestpath, sys.exc_info()) from e
|
raise ConftestImportFailure(conftestpath, sys.exc_info()) from e
|
||||||
|
|
||||||
|
self._check_non_top_pytest_plugins(mod, conftestpath)
|
||||||
|
|
||||||
self._conftest_plugins.add(mod)
|
self._conftest_plugins.add(mod)
|
||||||
self._conftestpath2mod[key] = mod
|
self._conftestpath2mod[key] = mod
|
||||||
dirpath = conftestpath.dirpath()
|
dirpath = conftestpath.dirpath()
|
||||||
|
@ -548,6 +531,23 @@ class PytestPluginManager(PluginManager):
|
||||||
self.consider_conftest(mod)
|
self.consider_conftest(mod)
|
||||||
return mod
|
return mod
|
||||||
|
|
||||||
|
def _check_non_top_pytest_plugins(self, mod, conftestpath):
|
||||||
|
if (
|
||||||
|
hasattr(mod, "pytest_plugins")
|
||||||
|
and self._configured
|
||||||
|
and not self._using_pyargs
|
||||||
|
):
|
||||||
|
msg = (
|
||||||
|
"Defining 'pytest_plugins' in a non-top-level conftest is no longer supported:\n"
|
||||||
|
"It affects the entire test suite instead of just below the conftest as expected.\n"
|
||||||
|
" {}\n"
|
||||||
|
"Please move it to a top level conftest file at the rootdir:\n"
|
||||||
|
" {}\n"
|
||||||
|
"For more information, visit:\n"
|
||||||
|
" https://docs.pytest.org/en/latest/deprecations.html#pytest-plugins-in-non-top-level-conftest-files"
|
||||||
|
)
|
||||||
|
fail(msg.format(conftestpath, self._confcutdir), pytrace=False)
|
||||||
|
|
||||||
#
|
#
|
||||||
# API for bootstrapping plugin loading
|
# API for bootstrapping plugin loading
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue