1111
1212import pytest
1313from _pytest .main import Session
14- from _pytest .pathlib import fnmatch_ex , import_path
14+ from _pytest .pathlib import fnmatch_ex
1515from _pytest .python import Package
16- from pytest import Collector , Config , FixtureRequest , Parser
16+ from pytest import Collector , Config , Parser
1717
1818if sys .version_info >= (3 , 9 , 0 ):
1919 from ast import unparse as ast_unparse
2020else :
2121 from .ast_future import unparse as ast_unparse
2222
23+ if pytest .version_tuple >= (8 , 0 , 0 ):
24+ # fixture API changed in pytest 8
25+ # https://github.com/pytest-dev/pytest/issues/11218
26+ from _pytest .fixtures import TopRequest # noqa: I001
27+
28+ # consider_namespace_packages is added as a required argument in pytest 8
29+ # https://github.com/pytest-dev/pytest/issues/11475
30+ from _pytest .pathlib import import_path as _import_path # noqa: I001
31+
32+ def import_path (* args , ** kwargs ):
33+ return _import_path (* args , ** kwargs , consider_namespace_packages = False )
34+
35+ else :
36+ from pytest import FixtureRequest # noqa: I001
37+ from _pytest .pathlib import import_path # noqa: I001
2338
2439# Alternatively, invoke pytest with -p inline)
2540# pytest_plugins = ["inline"]
@@ -1136,8 +1151,32 @@ def __init__(
11361151 self .runner = runner
11371152 self .dtest = dtest
11381153 self .obj = None
1139- self .fixture_request : Optional [FixtureRequest ] = None
1140- self .add_marker (pytest .mark .inline )
1154+ self ._init_fixtureinfo_request ()
1155+
1156+ # fixture API changed in pytest 8
1157+ # https://github.com/pytest-dev/pytest/issues/11218
1158+ if pytest .version_tuple >= (8 , 0 , 0 ):
1159+
1160+ def _init_fixtureinfo_request (self ) -> None :
1161+ self .funcargs : Dict [str , object ] = {}
1162+ fm = self .session ._fixturemanager
1163+ fixtureinfo = fm .getfixtureinfo (node = self , func = None , cls = None )
1164+ self ._fixtureinfo = fixtureinfo
1165+ self .fixturenames = fixtureinfo .names_closure
1166+ self ._request = TopRequest (self , _ispytest = True ) # type: ignore[arg-type]
1167+
1168+ else :
1169+
1170+ def _init_fixtureinfo_request (self ) -> None :
1171+ def func () -> None :
1172+ pass
1173+
1174+ self .funcargs : Dict [str , object ] = {}
1175+ fm = self .session ._fixturemanager
1176+ self ._fixtureinfo = fm .getfixtureinfo ( # type: ignore[attr-defined]
1177+ node = self , func = func , cls = None , funcargs = False
1178+ )
1179+ self ._request = FixtureRequest (self , _ispytest = True ) # type: ignore[arg-type]
11411180
11421181 @classmethod
11431182 def from_parent (
@@ -1154,9 +1193,9 @@ def from_parent(
11541193
11551194 def setup (self ) -> None :
11561195 if self .dtest is not None :
1157- self .fixture_request = _setup_fixtures ( self )
1158- globs = dict (getfixture = self .fixture_request .getfixturevalue )
1159- for name , value in self .fixture_request .getfixturevalue ("inlinetest_namespace" ).items ():
1196+ self ._request . _fillfixtures ( )
1197+ globs = dict (getfixture = self ._request .getfixturevalue )
1198+ for name , value in self ._request .getfixturevalue ("inlinetest_namespace" ).items ():
11601199 globs [name ] = value
11611200 self .dtest .globs .update (globs )
11621201
@@ -1241,22 +1280,6 @@ def collect(self) -> Iterable[InlinetestItem]:
12411280 )
12421281
12431282
1244- def _setup_fixtures (inlinetest_item : InlinetestItem ) -> FixtureRequest :
1245- """Used by InlinetestItem to setup fixture information."""
1246-
1247- def func () -> None :
1248- pass
1249-
1250- inlinetest_item .funcargs = {} # type: ignore[attr-defined]
1251- fm = inlinetest_item .session ._fixturemanager
1252- inlinetest_item ._fixtureinfo = fm .getfixtureinfo ( # type: ignore[attr-defined]
1253- node = inlinetest_item , func = func , cls = None , funcargs = False
1254- )
1255- fixture_request = FixtureRequest (inlinetest_item , _ispytest = True )
1256- fixture_request ._fillfixtures ()
1257- return fixture_request
1258-
1259-
12601283######################################################################################
12611284# Timeout #
12621285# Logic #
0 commit comments