From e490823280181f661d8c25092d52b4142299e340 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Thu, 4 Feb 2021 11:52:13 +0200 Subject: [PATCH] config/argparsing: use proper deprecations instead of ad-hoc DeprecationWarning Proper for removing this in the next major pytest release. --- src/_pytest/config/argparsing.py | 22 ++++++---------------- src/_pytest/deprecated.py | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index 5a09ea781e6..cf738cc2b8e 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -18,6 +18,9 @@ import _pytest._io from _pytest.compat import final from _pytest.config.exceptions import UsageError +from _pytest.deprecated import ARGUMENT_PERCENT_DEFAULT +from _pytest.deprecated import ARGUMENT_TYPE_STR +from _pytest.deprecated import ARGUMENT_TYPE_STR_CHOICE if TYPE_CHECKING: from typing import NoReturn @@ -212,12 +215,7 @@ def __init__(self, *names: str, **attrs: Any) -> None: self._short_opts: List[str] = [] self._long_opts: List[str] = [] if "%default" in (attrs.get("help") or ""): - warnings.warn( - 'pytest now uses argparse. "%default" should be' - ' changed to "%(default)s" ', - DeprecationWarning, - stacklevel=3, - ) + warnings.warn(ARGUMENT_PERCENT_DEFAULT, stacklevel=3) try: typ = attrs["type"] except KeyError: @@ -227,11 +225,7 @@ def __init__(self, *names: str, **attrs: Any) -> None: if isinstance(typ, str): if typ == "choice": warnings.warn( - "`type` argument to addoption() is the string %r." - " For choices this is optional and can be omitted, " - " but when supplied should be a type (for example `str` or `int`)." - " (options: %s)" % (typ, names), - DeprecationWarning, + ARGUMENT_TYPE_STR_CHOICE.format(typ=typ, names=names), stacklevel=4, ) # argparse expects a type here take it from @@ -239,11 +233,7 @@ def __init__(self, *names: str, **attrs: Any) -> None: attrs["type"] = type(attrs["choices"][0]) else: warnings.warn( - "`type` argument to addoption() is the string %r, " - " but when supplied should be a type (for example `str` or `int`)." - " (options: %s)" % (typ, names), - DeprecationWarning, - stacklevel=4, + ARGUMENT_TYPE_STR.format(typ=typ, names=names), stacklevel=4 ) attrs["type"] = Argument._typ_map[typ] # Used in test_parseopt -> test_parse_defaultgetter. diff --git a/src/_pytest/deprecated.py b/src/_pytest/deprecated.py index fa91f909769..5efc004ac94 100644 --- a/src/_pytest/deprecated.py +++ b/src/_pytest/deprecated.py @@ -69,6 +69,25 @@ "Use pytest.skip() instead." ) +ARGUMENT_PERCENT_DEFAULT = PytestDeprecationWarning( + 'pytest now uses argparse. "%default" should be changed to "%(default)s"', +) + +ARGUMENT_TYPE_STR_CHOICE = UnformattedWarning( + PytestDeprecationWarning, + "`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( + PytestDeprecationWarning, + "`type` argument to addoption() is the string {typ!r}, " + " but when supplied should be a type (for example `str` or `int`)." + " (options: {names})", +) + # You want to make some `__init__` or function "private". #