Skip to content

Commit 6cb9fa1

Browse files
committed
fix most errors in pytest 8
- upgrade import_path, FixtureRequest to use the newer API
1 parent 44c2344 commit 6cb9fa1

File tree

1 file changed

+46
-23
lines changed

1 file changed

+46
-23
lines changed

src/inline/plugin.py

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,30 @@
1111

1212
import pytest
1313
from _pytest.main import Session
14-
from _pytest.pathlib import fnmatch_ex, import_path
14+
from _pytest.pathlib import fnmatch_ex
1515
from _pytest.python import Package
16-
from pytest import Collector, Config, FixtureRequest, Parser
16+
from pytest import Collector, Config, Parser
1717

1818
if sys.version_info >= (3, 9, 0):
1919
from ast import unparse as ast_unparse
2020
else:
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

Comments
 (0)