@@ -540,6 +540,16 @@ def getfixturevalue(self, argname: str) -> Any:
540
540
)
541
541
return fixturedef .cached_result [0 ]
542
542
543
+ def _iter_chain (self ) -> Iterator ["SubRequest" ]:
544
+ """Yield all SubRequests in the chain, from self up.
545
+
546
+ Note: does *not* yield the TopRequest.
547
+ """
548
+ current = self
549
+ while isinstance (current , SubRequest ):
550
+ yield current
551
+ current = current ._parent_request
552
+
543
553
def _get_active_fixturedef (
544
554
self , argname : str
545
555
) -> Union ["FixtureDef[object]" , PseudoFixtureDef [object ]]:
@@ -557,11 +567,7 @@ def _get_active_fixturedef(
557
567
return fixturedef
558
568
559
569
def _get_fixturestack (self ) -> List ["FixtureDef[Any]" ]:
560
- current = self
561
- values : List [FixtureDef [Any ]] = []
562
- while isinstance (current , SubRequest ):
563
- values .append (current ._fixturedef ) # type: ignore[has-type]
564
- current = current ._parent_request
570
+ values = [request ._fixturedef for request in self ._iter_chain ()]
565
571
values .reverse ()
566
572
return values
567
573
@@ -705,7 +711,7 @@ def __init__(
705
711
)
706
712
self ._parent_request : Final [FixtureRequest ] = request
707
713
self ._scope_field : Final = scope
708
- self ._fixturedef : Final = fixturedef
714
+ self ._fixturedef : Final [ FixtureDef [ object ]] = fixturedef
709
715
if param is not NOTSET :
710
716
self .param = param
711
717
self .param_index : Final = param_index
0 commit comments