diff --git a/changelog/7469.feature.rst b/changelog/7469.feature.rst new file mode 100644 index 00000000000..8e9df72697c --- /dev/null +++ b/changelog/7469.feature.rst @@ -0,0 +1 @@ +:class:`~pytest.FixtureDef` is now exported as ``pytest.FixtureDef`` for typing purposes. diff --git a/doc/en/reference/reference.rst b/doc/en/reference/reference.rst index cf83ae05f21..ea008110e4a 100644 --- a/doc/en/reference/reference.rst +++ b/doc/en/reference/reference.rst @@ -910,7 +910,7 @@ ExitCode FixtureDef ~~~~~~~~~~ -.. autoclass:: _pytest.fixtures.FixtureDef() +.. autoclass:: pytest.FixtureDef() :members: :show-inheritance: diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 6a263866984..13efca2adb0 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -216,6 +216,7 @@ def add_funcarg_pseudo_fixture_def( params=valuelist, unittest=False, ids=None, + _ispytest=True, ) arg2fixturedefs[argname] = [fixturedef] if name2pseudofixturedef is not None: @@ -974,7 +975,11 @@ def _eval_scope_callable( @final class FixtureDef(Generic[FixtureValue]): - """A container for a fixture definition.""" + """A container for a fixture definition. + + Note: At this time, only explicitly documented fields and methods are + considered public stable API. + """ def __init__( self, @@ -988,7 +993,10 @@ def __init__( ids: Optional[ Union[Tuple[Optional[object], ...], Callable[[Any], Optional[object]]] ] = None, + *, + _ispytest: bool = False, ) -> None: + check_ispytest(_ispytest) self._fixturemanager = fixturemanager # The "base" node ID for the fixture. # @@ -1708,6 +1716,7 @@ def parsefactories( # noqa: F811 params=marker.params, unittest=unittest, ids=marker.ids, + _ispytest=True, ) faclist = self._arg2fixturedefs.setdefault(name, []) diff --git a/src/pytest/__init__.py b/src/pytest/__init__.py index 58ddb3288eb..831ede1fa1f 100644 --- a/src/pytest/__init__.py +++ b/src/pytest/__init__.py @@ -20,6 +20,7 @@ from _pytest.debugging import pytestPDB as __pytestPDB from _pytest.doctest import DoctestItem from _pytest.fixtures import fixture +from _pytest.fixtures import FixtureDef from _pytest.fixtures import FixtureLookupError from _pytest.fixtures import FixtureRequest from _pytest.fixtures import yield_fixture @@ -102,6 +103,7 @@ "fail", "File", "fixture", + "FixtureDef", "FixtureLookupError", "FixtureRequest", "freeze_includes",