Export `FixtureDef`

FixtureDef is used in the `pytest_fixture_setup` hook so needs to be
public. However since its current internals are quite dubious (and not
all marked with `_` prefix) I've added an explicit note that only
documented fields/methods are considered public.

Refs #7469.
This commit is contained in:
Ran Benita 2023-07-14 10:59:00 +03:00
parent 9d0ddb4625
commit fb55615d5e
4 changed files with 14 additions and 2 deletions

View File

@ -0,0 +1 @@
:class:`~pytest.FixtureDef` is now exported as ``pytest.FixtureDef`` for typing purposes.

View File

@ -910,7 +910,7 @@ ExitCode
FixtureDef FixtureDef
~~~~~~~~~~ ~~~~~~~~~~
.. autoclass:: _pytest.fixtures.FixtureDef() .. autoclass:: pytest.FixtureDef()
:members: :members:
:show-inheritance: :show-inheritance:

View File

@ -216,6 +216,7 @@ def add_funcarg_pseudo_fixture_def(
params=valuelist, params=valuelist,
unittest=False, unittest=False,
ids=None, ids=None,
_ispytest=True,
) )
arg2fixturedefs[argname] = [fixturedef] arg2fixturedefs[argname] = [fixturedef]
if name2pseudofixturedef is not None: if name2pseudofixturedef is not None:
@ -974,7 +975,11 @@ def _eval_scope_callable(
@final @final
class FixtureDef(Generic[FixtureValue]): 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__( def __init__(
self, self,
@ -988,7 +993,10 @@ class FixtureDef(Generic[FixtureValue]):
ids: Optional[ ids: Optional[
Union[Tuple[Optional[object], ...], Callable[[Any], Optional[object]]] Union[Tuple[Optional[object], ...], Callable[[Any], Optional[object]]]
] = None, ] = None,
*,
_ispytest: bool = False,
) -> None: ) -> None:
check_ispytest(_ispytest)
self._fixturemanager = fixturemanager self._fixturemanager = fixturemanager
# The "base" node ID for the fixture. # The "base" node ID for the fixture.
# #
@ -1708,6 +1716,7 @@ class FixtureManager:
params=marker.params, params=marker.params,
unittest=unittest, unittest=unittest,
ids=marker.ids, ids=marker.ids,
_ispytest=True,
) )
faclist = self._arg2fixturedefs.setdefault(name, []) faclist = self._arg2fixturedefs.setdefault(name, [])

View File

@ -20,6 +20,7 @@ from _pytest.config.argparsing import Parser
from _pytest.debugging import pytestPDB as __pytestPDB from _pytest.debugging import pytestPDB as __pytestPDB
from _pytest.doctest import DoctestItem from _pytest.doctest import DoctestItem
from _pytest.fixtures import fixture from _pytest.fixtures import fixture
from _pytest.fixtures import FixtureDef
from _pytest.fixtures import FixtureLookupError from _pytest.fixtures import FixtureLookupError
from _pytest.fixtures import FixtureRequest from _pytest.fixtures import FixtureRequest
from _pytest.fixtures import yield_fixture from _pytest.fixtures import yield_fixture
@ -102,6 +103,7 @@ __all__ = [
"fail", "fail",
"File", "File",
"fixture", "fixture",
"FixtureDef",
"FixtureLookupError", "FixtureLookupError",
"FixtureRequest", "FixtureRequest",
"freeze_includes", "freeze_includes",