summaryrefslogtreecommitdiff
path: root/src/_pytest/nodes.py
diff options
context:
space:
mode:
authorRan Benita <ran@unusedvar.com>2020-08-15 11:35:54 +0300
committerRan Benita <ran@unusedvar.com>2020-08-15 13:40:16 +0300
commiteddd993cf469df33268097f4bdaf60ccb8f50d3b (patch)
tree1d8b3a7d37ec8b77432e2443c79d95bc703232ab /src/_pytest/nodes.py
parentd426a79a90351dff0492fbd40404b1256b24f91f (diff)
downloadpytest-eddd993cf469df33268097f4bdaf60ccb8f50d3b.tar.gz
Only define gethookproxy, isinitpath on Session
This fixes an issue where pylint complains about missing implementations of abstract methods in subclasses of `File` which only override `collect()` (as they should). It is also cleaner and makes sense, these methods really don't need to be overridden. The previous methods defined directly on `FSCollector` and `Package` are deprecated, to be removed in pytest 7. See commits e2934c3f8c03c83469f4c6670c207773a6e02df4 and f10ab021e21a44e2f0fa2be66660c4a6d4b7a61a for reference.
Diffstat (limited to 'src/_pytest/nodes.py')
-rw-r--r--src/_pytest/nodes.py47
1 files changed, 11 insertions, 36 deletions
diff --git a/src/_pytest/nodes.py b/src/_pytest/nodes.py
index 9d2365c4d..79e091443 100644
--- a/src/_pytest/nodes.py
+++ b/src/_pytest/nodes.py
@@ -25,7 +25,7 @@ from _pytest.compat import overload
from _pytest.compat import TYPE_CHECKING
from _pytest.config import Config
from _pytest.config import ConftestImportFailure
-from _pytest.config import PytestPluginManager
+from _pytest.deprecated import FSCOLLECTOR_GETHOOKPROXY_ISINITPATH
from _pytest.deprecated import NODE_USE_FROM_PARENT
from _pytest.fixtures import FixtureDef
from _pytest.fixtures import FixtureLookupError
@@ -495,17 +495,6 @@ def _check_initialpaths_for_relpath(session, fspath):
return fspath.relto(initial_path)
-class FSHookProxy:
- def __init__(self, pm: PytestPluginManager, remove_mods) -> None:
- self.pm = pm
- self.remove_mods = remove_mods
-
- def __getattr__(self, name: str):
- x = self.pm.subset_hook_caller(name, remove_plugins=self.remove_mods)
- self.__dict__[name] = x
- return x
-
-
class FSCollector(Collector):
def __init__(
self,
@@ -542,42 +531,28 @@ class FSCollector(Collector):
"""The public constructor."""
return super().from_parent(parent=parent, fspath=fspath, **kw)
- def _gethookproxy(self, fspath: py.path.local):
- # Check if we have the common case of running
- # hooks with all conftest.py files.
- pm = self.config.pluginmanager
- my_conftestmodules = pm._getconftestmodules(
- fspath, self.config.getoption("importmode")
- )
- remove_mods = pm._conftest_plugins.difference(my_conftestmodules)
- if remove_mods:
- # One or more conftests are not in use at this fspath.
- proxy = FSHookProxy(pm, remove_mods)
- else:
- # All plugins are active for this fspath.
- proxy = self.config.hook
- return proxy
-
def gethookproxy(self, fspath: py.path.local):
- raise NotImplementedError()
+ warnings.warn(FSCOLLECTOR_GETHOOKPROXY_ISINITPATH, stacklevel=2)
+ return self.session.gethookproxy(fspath)
+
+ def isinitpath(self, path: py.path.local) -> bool:
+ warnings.warn(FSCOLLECTOR_GETHOOKPROXY_ISINITPATH, stacklevel=2)
+ return self.session.isinitpath(path)
def _recurse(self, direntry: "os.DirEntry[str]") -> bool:
if direntry.name == "__pycache__":
return False
path = py.path.local(direntry.path)
- ihook = self._gethookproxy(path.dirpath())
+ ihook = self.session.gethookproxy(path.dirpath())
if ihook.pytest_ignore_collect(path=path, config=self.config):
return False
for pat in self._norecursepatterns:
if path.check(fnmatch=pat):
return False
- ihook = self._gethookproxy(path)
+ ihook = self.session.gethookproxy(path)
ihook.pytest_collect_directory(path=path, parent=self)
return True
- def isinitpath(self, path: py.path.local) -> bool:
- raise NotImplementedError()
-
def _collectfile(
self, path: py.path.local, handle_dupes: bool = True
) -> Sequence[Collector]:
@@ -586,8 +561,8 @@ class FSCollector(Collector):
), "{!r} is not a file (isdir={!r}, exists={!r}, islink={!r})".format(
path, path.isdir(), path.exists(), path.islink()
)
- ihook = self.gethookproxy(path)
- if not self.isinitpath(path):
+ ihook = self.session.gethookproxy(path)
+ if not self.session.isinitpath(path):
if ihook.pytest_ignore_collect(path=path, config=self.config):
return ()