Skip to content

Commit 0d507c4

Browse files
RonnyPfannschmidtCursor AIclaude
committed
refactor(doctest): move fixture resolution from DoctestItem.__init__ to from_parent
DoctestItem.__init__ now only stores runner, dtest, and obj. The fixture resolution (getfixtureinfo) and _initrequest() are moved to from_parent, which is the only production entry point for creating DoctestItem instances. Co-authored-by: Cursor AI <ai@cursor.sh> Co-authored-by: Anthropic Claude <claude@anthropic.com>
1 parent 06f2ce4 commit 0d507c4

1 file changed

Lines changed: 11 additions & 8 deletions

File tree

src/_pytest/doctest.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from _pytest.config import Config
3232
from _pytest.config.argparsing import Parser
3333
from _pytest.fixtures import fixture
34+
from _pytest.fixtures import FuncFixtureInfo
3435
from _pytest.fixtures import TopRequest
3536
from _pytest.nodes import Collector
3637
from _pytest.nodes import Item
@@ -249,6 +250,9 @@ def _get_runner(
249250

250251

251252
class DoctestItem(Item):
253+
_fixtureinfo: FuncFixtureInfo
254+
fixturenames: list[str]
255+
252256
def __init__(
253257
self,
254258
name: str,
@@ -259,14 +263,7 @@ def __init__(
259263
super().__init__(name, parent)
260264
self.runner = runner
261265
self.dtest = dtest
262-
263-
# Stuff needed for fixture support.
264266
self.obj = None
265-
fm = self.session._fixturemanager
266-
fixtureinfo = fm.getfixtureinfo(node=self, func=None, cls=None)
267-
self._fixtureinfo = fixtureinfo
268-
self.fixturenames = fixtureinfo.names_closure
269-
self._initrequest()
270267

271268
@classmethod
272269
def from_parent( # type: ignore[override]
@@ -279,7 +276,13 @@ def from_parent( # type: ignore[override]
279276
) -> Self:
280277
# incompatible signature due to imposed limits on subclass
281278
"""The public named constructor."""
282-
return super().from_parent(name=name, parent=parent, runner=runner, dtest=dtest)
279+
item = super().from_parent(name=name, parent=parent, runner=runner, dtest=dtest)
280+
fm = item.session._fixturemanager
281+
fixtureinfo = fm.getfixtureinfo(node=item, func=None, cls=None)
282+
item._fixtureinfo = fixtureinfo
283+
item.fixturenames = fixtureinfo.names_closure
284+
item._initrequest()
285+
return item
283286

284287
def _initrequest(self) -> None:
285288
self.funcargs: dict[str, object] = {}

0 commit comments

Comments
 (0)