From 16e5fbe3714b0e1b0ab0d27bf3938bf2218c90cd Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Fri, 1 Oct 2021 14:50:57 +0300 Subject: [PATCH] config: optimize PytestPluginManager._getconftestmodules Now that it's no longer using `@lru_cache`, use another check to avoid re-computation. Although `@lru_cache` is faster than the full function call + checks, this approach also has the advantage that the caching works for more than 128 entries. --- src/_pytest/config/__init__.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index b4fce09a8..de5b80e30 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -533,12 +533,19 @@ class PytestPluginManager(PluginManager): else: directory = path + # Optimization: avoid repeated searches in the same directory. + # Assumes always called with same importmode and rootpath. + existing_clist = self._dirpath2confmods.get(directory) + if existing_clist: + return existing_clist + # XXX these days we may rather want to use config.rootpath # and allow users to opt into looking into the rootdir parent # directories instead of requiring to specify confcutdir. clist = [] + confcutdir_parents = self._confcutdir.parents if self._confcutdir else [] for parent in reversed((directory, *directory.parents)): - if self._confcutdir and parent in self._confcutdir.parents: + if parent in confcutdir_parents: continue conftestpath = parent / "conftest.py" if conftestpath.is_file():