address #8361 - introduce hook caller wrappers that enable backward compat
This commit is contained in:
parent
35df3e68d5
commit
30f1b81eb2
|
@ -917,8 +917,10 @@ class Config:
|
||||||
:type: PytestPluginManager
|
:type: PytestPluginManager
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from .compat import PathAwareHookProxy
|
||||||
|
|
||||||
self.trace = self.pluginmanager.trace.root.get("config")
|
self.trace = self.pluginmanager.trace.root.get("config")
|
||||||
self.hook = self.pluginmanager.hook
|
self.hook = PathAwareHookProxy(self.pluginmanager.hook)
|
||||||
self._inicache: Dict[str, Any] = {}
|
self._inicache: Dict[str, Any] = {}
|
||||||
self._override_ini: Sequence[str] = ()
|
self._override_ini: Sequence[str] = ()
|
||||||
self._opt2dest: Dict[str, str] = {}
|
self._opt2dest: Dict[str, str] = {}
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
from _pytest.nodes import _imply_path
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from ..compat import LEGACY_PATH
|
||||||
|
|
||||||
|
|
||||||
|
import functools
|
||||||
|
|
||||||
|
# hookname: (Path, LEGACY_PATH)
|
||||||
|
imply_paths_hooks = {
|
||||||
|
"pytest_ignore_collect": ("fspath", "path"),
|
||||||
|
"pytest_collect_file": ("fspath", "path"),
|
||||||
|
"pytest_pycollect_makemodule": ("fspath", "path"),
|
||||||
|
"pytest_report_header": ("startpath", "startdir"),
|
||||||
|
"pytest_report_collectionfinish": ("startpath", "startdir"),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class PathAwareHookProxy:
|
||||||
|
def __init__(self, hook_caller):
|
||||||
|
self.__hook_caller = hook_caller
|
||||||
|
|
||||||
|
def __getattr__(self, key):
|
||||||
|
if key not in imply_paths_hooks:
|
||||||
|
return getattr(self.__hook_caller, key)
|
||||||
|
else:
|
||||||
|
hook = getattr(self.__hook_caller, key)
|
||||||
|
path_var, fspath_var = imply_paths_hooks[key]
|
||||||
|
|
||||||
|
@functools.wraps(hook)
|
||||||
|
def fixed_hook(**kw):
|
||||||
|
path_value = kw.pop(path_var, None)
|
||||||
|
fspath_value: "LEGACY_PATH" = kw.pop(fspath_var, None)
|
||||||
|
path_value, fspath_value = _imply_path(path_value, fspath_value)
|
||||||
|
kw[path_var] = path_value
|
||||||
|
kw[fspath_var] = fspath_value
|
||||||
|
return hook(**kw)
|
||||||
|
|
||||||
|
return fixed_hook
|
|
@ -551,7 +551,9 @@ class Session(nodes.FSCollector):
|
||||||
remove_mods = pm._conftest_plugins.difference(my_conftestmodules)
|
remove_mods = pm._conftest_plugins.difference(my_conftestmodules)
|
||||||
if remove_mods:
|
if remove_mods:
|
||||||
# One or more conftests are not in use at this fspath.
|
# One or more conftests are not in use at this fspath.
|
||||||
proxy = FSHookProxy(pm, remove_mods)
|
from .config.compat import PathAwareHookProxy
|
||||||
|
|
||||||
|
proxy = PathAwareHookProxy(FSHookProxy(pm, remove_mods))
|
||||||
else:
|
else:
|
||||||
# All plugins are active for this fspath.
|
# All plugins are active for this fspath.
|
||||||
proxy = self.config.hook
|
proxy = self.config.hook
|
||||||
|
|
Loading…
Reference in New Issue