From d217d68cde0c34d619862f15c773ecc02ecdaabe Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Thu, 14 Mar 2024 20:29:33 +0200 Subject: [PATCH] fixtures: inline `_compute_fixture_value` --- src/_pytest/fixtures.py | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 17d6ddc7fe5..81fbf504f20 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -582,26 +582,7 @@ def _get_active_fixturedef( return PseudoFixtureDef(cached_result, Scope.Function) raise - self._compute_fixture_value(fixturedef) - - self._fixture_defs[argname] = fixturedef - return fixturedef - - def _get_fixturestack(self) -> List["FixtureDef[Any]"]: - values = [request._fixturedef for request in self._iter_chain()] - values.reverse() - return values - - def _compute_fixture_value(self, fixturedef: "FixtureDef[object]") -> None: - """Create a SubRequest based on "self" and call the execute method - of the given FixtureDef object. - - If the FixtureDef has cached the result it will do nothing, otherwise it will - setup and run the fixture, cache the value, and schedule a finalizer for it. - """ - # prepare a subrequest object before calling fixture function - # (latter managed by fixturedef) - argname = fixturedef.argname + # Prepare a SubRequest object for calling the fixture. funcitem = self._pyfuncitem try: callspec = funcitem.callspec @@ -627,7 +608,7 @@ def _compute_fixture_value(self, fixturedef: "FixtureDef[object]") -> None: ) fail(msg, pytrace=False) if has_params: - frame = inspect.stack()[3] + frame = inspect.stack()[2] frameinfo = inspect.getframeinfo(frame[0]) source_path = absolutepath(frameinfo.filename) source_lineno = frameinfo.lineno @@ -658,6 +639,14 @@ def _compute_fixture_value(self, fixturedef: "FixtureDef[object]") -> None: # Make sure the fixture value is cached, running it if it isn't fixturedef.execute(request=subrequest) + self._fixture_defs[argname] = fixturedef + return fixturedef + + def _get_fixturestack(self) -> List["FixtureDef[Any]"]: + values = [request._fixturedef for request in self._iter_chain()] + values.reverse() + return values + @final class TopRequest(FixtureRequest):