pre-commit-hooks/.venv/lib/python3.10/site-packages/_pytest/deprecated.py
2024-04-13 00:00:20 +00:00

90 lines
3.1 KiB
Python

"""Deprecation messages and bits of code used elsewhere in the codebase that
is planned to be removed in the next pytest release.
Keeping it in a central location makes it easy to track what is deprecated and should
be removed when the time comes.
All constants defined in this module should be either instances of
:class:`PytestWarning`, or :class:`UnformattedWarning`
in case of warnings which need to format their messages.
"""
from __future__ import annotations
from warnings import warn
from _pytest.warning_types import PytestDeprecationWarning
from _pytest.warning_types import PytestRemovedIn9Warning
from _pytest.warning_types import UnformattedWarning
# set of plugins which have been integrated into the core; we use this list to ignore
# them during registration to avoid conflicts
DEPRECATED_EXTERNAL_PLUGINS = {
'pytest_catchlog',
'pytest_capturelog',
'pytest_faulthandler',
}
# This can be* removed pytest 8, but it's harmless and common, so no rush to remove.
# * If you're in the future: "could have been".
YIELD_FIXTURE = PytestDeprecationWarning(
'@pytest.yield_fixture is deprecated.\n'
'Use @pytest.fixture instead; they are the same.',
)
# This deprecation is never really meant to be removed.
PRIVATE = PytestDeprecationWarning('A private pytest class or function was used.')
HOOK_LEGACY_PATH_ARG = UnformattedWarning(
PytestRemovedIn9Warning,
'The ({pylib_path_arg}: py.path.local) argument is deprecated, please use ({pathlib_path_arg}: pathlib.Path)\n'
'see https://docs.pytest.org/en/latest/deprecations.html'
'#py-path-local-arguments-for-hooks-replaced-with-pathlib-path',
)
NODE_CTOR_FSPATH_ARG = UnformattedWarning(
PytestRemovedIn9Warning,
'The (fspath: py.path.local) argument to {node_type_name} is deprecated. '
'Please use the (path: pathlib.Path) argument instead.\n'
'See https://docs.pytest.org/en/latest/deprecations.html'
'#fspath-argument-for-node-constructors-replaced-with-pathlib-path',
)
HOOK_LEGACY_MARKING = UnformattedWarning(
PytestDeprecationWarning,
'The hook{type} {fullname} uses old-style configuration options (marks or attributes).\n'
'Please use the pytest.hook{type}({hook_opts}) decorator instead\n'
' to configure the hooks.\n'
' See https://docs.pytest.org/en/latest/deprecations.html'
'#configuring-hook-specs-impls-using-markers',
)
MARKED_FIXTURE = PytestRemovedIn9Warning(
'Marks applied to fixtures have no effect\n'
'See docs: https://docs.pytest.org/en/stable/deprecations.html#applying-a-mark-to-a-fixture-function',
)
# You want to make some `__init__` or function "private".
#
# def my_private_function(some, args):
# ...
#
# Do this:
#
# def my_private_function(some, args, *, _ispytest: bool = False):
# check_ispytest(_ispytest)
# ...
#
# Change all internal/allowed calls to
#
# my_private_function(some, args, _ispytest=True)
#
# All other calls will get the default _ispytest=False and trigger
# the warning (possibly error in the future).
def check_ispytest(ispytest: bool) -> None:
if not ispytest:
warn(PRIVATE, stacklevel=3)