123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- """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 warnings import warn
- from _pytest.warning_types import PytestDeprecationWarning
- from _pytest.warning_types import PytestRemovedIn8Warning
- 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",
- }
- NOSE_SUPPORT = UnformattedWarning(
- PytestRemovedIn8Warning,
- "Support for nose tests is deprecated and will be removed in a future release.\n"
- "{nodeid} is using nose method: `{method}` ({stage})\n"
- "See docs: https://docs.pytest.org/en/stable/deprecations.html#support-for-tests-written-for-nose",
- )
- NOSE_SUPPORT_METHOD = UnformattedWarning(
- PytestRemovedIn8Warning,
- "Support for nose tests is deprecated and will be removed in a future release.\n"
- "{nodeid} is using nose-specific method: `{method}(self)`\n"
- "To remove this warning, rename it to `{method}_method(self)`\n"
- "See docs: https://docs.pytest.org/en/stable/deprecations.html#support-for-tests-written-for-nose",
- )
- # 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."
- )
- WARNING_CMDLINE_PREPARSE_HOOK = PytestRemovedIn8Warning(
- "The pytest_cmdline_preparse hook is deprecated and will be removed in a future release. \n"
- "Please use pytest_load_initial_conftests hook instead."
- )
- FSCOLLECTOR_GETHOOKPROXY_ISINITPATH = PytestRemovedIn8Warning(
- "The gethookproxy() and isinitpath() methods of FSCollector and Package are deprecated; "
- "use self.session.gethookproxy() and self.session.isinitpath() instead. "
- )
- STRICT_OPTION = PytestRemovedIn8Warning(
- "The --strict option is deprecated, use --strict-markers instead."
- )
- # This deprecation is never really meant to be removed.
- PRIVATE = PytestDeprecationWarning("A private pytest class or function was used.")
- ARGUMENT_PERCENT_DEFAULT = PytestRemovedIn8Warning(
- 'pytest now uses argparse. "%default" should be changed to "%(default)s"',
- )
- ARGUMENT_TYPE_STR_CHOICE = UnformattedWarning(
- PytestRemovedIn8Warning,
- "`type` argument to addoption() is the string {typ!r}."
- " For choices this is optional and can be omitted, "
- " but when supplied should be a type (for example `str` or `int`)."
- " (options: {names})",
- )
- ARGUMENT_TYPE_STR = UnformattedWarning(
- PytestRemovedIn8Warning,
- "`type` argument to addoption() is the string {typ!r}, "
- " but when supplied should be a type (for example `str` or `int`)."
- " (options: {names})",
- )
- HOOK_LEGACY_PATH_ARG = UnformattedWarning(
- PytestRemovedIn8Warning,
- "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(
- PytestRemovedIn8Warning,
- "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",
- )
- WARNS_NONE_ARG = PytestRemovedIn8Warning(
- "Passing None has been deprecated.\n"
- "See https://docs.pytest.org/en/latest/how-to/capture-warnings.html"
- "#additional-use-cases-of-warnings-in-tests"
- " for alternatives in common use cases."
- )
- KEYWORD_MSG_ARG = UnformattedWarning(
- PytestRemovedIn8Warning,
- "pytest.{func}(msg=...) is now deprecated, use pytest.{func}(reason=...) instead",
- )
- INSTANCE_COLLECTOR = PytestRemovedIn8Warning(
- "The pytest.Instance collector type is deprecated and is no longer used. "
- "See https://docs.pytest.org/en/latest/deprecations.html#the-pytest-instance-collector",
- )
- 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",
- )
- # 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)
|