Spaces:
Sleeping
Sleeping
"""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) | |