Skip to content

Commit ab63ebb

Browse files
committed
doctest: inline _setup_fixtures, make more similar to Function
There used to be two callers to `_setup_fixtures()`, now there's only one, so inline it and make `DoctestItem` more similar to `Function`. (Eventually we may want to generalize `TopRequest` from taking `Function` directly to some "fixture-supporting item", removing the remaining `type: ignore` here and allowing plugins to do it in a stable manner).
1 parent b3a981d commit ab63ebb

File tree

1 file changed

+15
-17
lines changed

1 file changed

+15
-17
lines changed

src/_pytest/doctest.py

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,14 @@ def __init__(
261261
super().__init__(name, parent)
262262
self.runner = runner
263263
self.dtest = dtest
264+
265+
# Stuff needed for fixture support.
264266
self.obj = None
265-
self.fixture_request: Optional[TopRequest] = None
267+
fm = self.session._fixturemanager
268+
fixtureinfo = fm.getfixtureinfo(node=self, func=None, cls=None)
269+
self._fixtureinfo = fixtureinfo
270+
self.fixturenames = fixtureinfo.names_closure
271+
self._initrequest()
266272

267273
@classmethod
268274
def from_parent( # type: ignore
@@ -277,11 +283,16 @@ def from_parent( # type: ignore
277283
"""The public named constructor."""
278284
return super().from_parent(name=name, parent=parent, runner=runner, dtest=dtest)
279285

286+
def _initrequest(self) -> None:
287+
self.funcargs: Dict[str, object] = {}
288+
self._request = TopRequest(self, _ispytest=True) # type: ignore[arg-type]
289+
280290
def setup(self) -> None:
281291
if self.dtest is not None:
282-
self.fixture_request = _setup_fixtures(self)
283-
globs = dict(getfixture=self.fixture_request.getfixturevalue)
284-
for name, value in self.fixture_request.getfixturevalue(
292+
self._request._fillfixtures()
293+
294+
globs = dict(getfixture=self._request.getfixturevalue)
295+
for name, value in self._request.getfixturevalue(
285296
"doctest_namespace"
286297
).items():
287298
globs[name] = value
@@ -589,19 +600,6 @@ def _from_module(self, module, object):
589600
)
590601

591602

592-
def _setup_fixtures(doctest_item: DoctestItem) -> TopRequest:
593-
"""Used by DoctestTextfile and DoctestItem to setup fixture information."""
594-
595-
doctest_item.funcargs = {} # type: ignore[attr-defined]
596-
fm = doctest_item.session._fixturemanager
597-
fixtureinfo = fm.getfixtureinfo(node=doctest_item, func=None, cls=None)
598-
doctest_item._fixtureinfo = fixtureinfo # type: ignore[attr-defined]
599-
doctest_item.fixturenames = fixtureinfo.names_closure # type: ignore[attr-defined]
600-
fixture_request = TopRequest(doctest_item, _ispytest=True) # type: ignore[arg-type]
601-
fixture_request._fillfixtures()
602-
return fixture_request
603-
604-
605603
def _init_checker_class() -> Type["doctest.OutputChecker"]:
606604
import doctest
607605
import re

0 commit comments

Comments
 (0)