aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/pytest/py3/_pytest/helpconfig.py
diff options
context:
space:
mode:
authorarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-02-09 12:00:52 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 15:58:17 +0300
commit8e1413fed79d1e8036e65228af6c93399ccf5502 (patch)
tree502c9df7b2614d20541c7a2d39d390e9a51877cc /contrib/python/pytest/py3/_pytest/helpconfig.py
parent6b813c17d56d1d05f92c61ddc347d0e4d358fe85 (diff)
downloadydb-8e1413fed79d1e8036e65228af6c93399ccf5502.tar.gz
intermediate changes
ref:614ed510ddd3cdf86a8c5dbf19afd113397e0172
Diffstat (limited to 'contrib/python/pytest/py3/_pytest/helpconfig.py')
-rw-r--r--contrib/python/pytest/py3/_pytest/helpconfig.py83
1 files changed, 49 insertions, 34 deletions
diff --git a/contrib/python/pytest/py3/_pytest/helpconfig.py b/contrib/python/pytest/py3/_pytest/helpconfig.py
index ae37fdea45..4384d07b26 100644
--- a/contrib/python/pytest/py3/_pytest/helpconfig.py
+++ b/contrib/python/pytest/py3/_pytest/helpconfig.py
@@ -1,17 +1,24 @@
-""" version info, help messages, tracing configuration. """
+"""Version info, help messages, tracing configuration."""
import os
import sys
from argparse import Action
+from typing import List
+from typing import Optional
+from typing import Union
import py
import pytest
+from _pytest.config import Config
+from _pytest.config import ExitCode
from _pytest.config import PrintHelp
+from _pytest.config.argparsing import Parser
class HelpAction(Action):
- """This is an argparse Action that will raise an exception in
- order to skip the rest of the argument parsing when --help is passed.
+ """An argparse Action that will raise an exception in order to skip the
+ rest of the argument parsing when --help is passed.
+
This prevents argparse from quitting due to missing required arguments
when any are defined, for example by ``pytest_addoption``.
This is similar to the way that the builtin argparse --help option is
@@ -31,18 +38,21 @@ class HelpAction(Action):
def __call__(self, parser, namespace, values, option_string=None):
setattr(namespace, self.dest, self.const)
- # We should only skip the rest of the parsing after preparse is done
+ # We should only skip the rest of the parsing after preparse is done.
if getattr(parser._parser, "after_preparse", False):
raise PrintHelp
-def pytest_addoption(parser):
+def pytest_addoption(parser: Parser) -> None:
group = parser.getgroup("debugconfig")
group.addoption(
"--version",
"-V",
- action="store_true",
- help="display pytest version and information about plugins.",
+ action="count",
+ default=0,
+ dest="version",
+ help="display pytest version and information about plugins."
+ "When given twice, also display information about plugins.",
)
group._addoption(
"-h",
@@ -57,7 +67,7 @@ def pytest_addoption(parser):
dest="plugins",
default=[],
metavar="name",
- help="early-load given plugin module name or entry point (multi-allowed). "
+ help="early-load given plugin module name or entry point (multi-allowed).\n"
"To avoid loading of plugins, use the `no:` prefix, e.g. "
"`no:doctest`.",
)
@@ -87,7 +97,7 @@ def pytest_addoption(parser):
@pytest.hookimpl(hookwrapper=True)
def pytest_cmdline_parse():
outcome = yield
- config = outcome.get_result()
+ config: Config = outcome.get_result()
if config.option.debug:
path = os.path.abspath("pytestdebug.log")
debugfile = open(path, "w")
@@ -106,7 +116,7 @@ def pytest_cmdline_parse():
undo_tracing = config.pluginmanager.enable_tracing()
sys.stderr.write("writing pytestdebug information to %s\n" % path)
- def unset_tracing():
+ def unset_tracing() -> None:
debugfile.close()
sys.stderr.write("wrote pytestdebug information to %s\n" % debugfile.name)
config.trace.root.setwriter(None)
@@ -115,20 +125,23 @@ def pytest_cmdline_parse():
config.add_cleanup(unset_tracing)
-def showversion(config):
- sys.stderr.write(
- "This is pytest version {}, imported from {}\n".format(
- pytest.__version__, pytest.__file__
+def showversion(config: Config) -> None:
+ if config.option.version > 1:
+ sys.stderr.write(
+ "This is pytest version {}, imported from {}\n".format(
+ pytest.__version__, pytest.__file__
+ )
)
- )
- plugininfo = getpluginversioninfo(config)
- if plugininfo:
- for line in plugininfo:
- sys.stderr.write(line + "\n")
+ plugininfo = getpluginversioninfo(config)
+ if plugininfo:
+ for line in plugininfo:
+ sys.stderr.write(line + "\n")
+ else:
+ sys.stderr.write(f"pytest {pytest.__version__}\n")
-def pytest_cmdline_main(config):
- if config.option.version:
+def pytest_cmdline_main(config: Config) -> Optional[Union[int, ExitCode]]:
+ if config.option.version > 0:
showversion(config)
return 0
elif config.option.help:
@@ -136,9 +149,10 @@ def pytest_cmdline_main(config):
showhelp(config)
config._ensure_unconfigure()
return 0
+ return None
-def showhelp(config):
+def showhelp(config: Config) -> None:
import textwrap
reporter = config.pluginmanager.get_plugin("terminalreporter")
@@ -157,7 +171,9 @@ def showhelp(config):
help, type, default = config._parser._inidict[name]
if type is None:
type = "string"
- spec = "{} ({}):".format(name, type)
+ if help is None:
+ raise TypeError(f"help argument cannot be None for {name}")
+ spec = f"{name} ({type}):"
tw.write(" %s" % spec)
spec_len = len(spec)
if spec_len > (indent_len - 3):
@@ -178,9 +194,10 @@ def showhelp(config):
tw.write(" " * (indent_len - spec_len - 2))
wrapped = textwrap.wrap(help, columns - indent_len, break_on_hyphens=False)
- tw.line(wrapped[0])
- for line in wrapped[1:]:
- tw.line(indent + line)
+ if wrapped:
+ tw.line(wrapped[0])
+ for line in wrapped[1:]:
+ tw.line(indent + line)
tw.line()
tw.line("environment variables:")
@@ -191,7 +208,7 @@ def showhelp(config):
("PYTEST_DEBUG", "set to enable debug tracing of pytest's internals"),
]
for name, help in vars:
- tw.line(" {:<24} {}".format(name, help))
+ tw.line(f" {name:<24} {help}")
tw.line()
tw.line()
@@ -211,24 +228,22 @@ def showhelp(config):
conftest_options = [("pytest_plugins", "list of plugin names to load")]
-def getpluginversioninfo(config):
+def getpluginversioninfo(config: Config) -> List[str]:
lines = []
plugininfo = config.pluginmanager.list_plugin_distinfo()
if plugininfo:
lines.append("setuptools registered plugins:")
for plugin, dist in plugininfo:
loc = getattr(plugin, "__file__", repr(plugin))
- content = "{}-{} at {}".format(dist.project_name, dist.version, loc)
+ content = f"{dist.project_name}-{dist.version} at {loc}"
lines.append(" " + content)
return lines
-def pytest_report_header(config):
+def pytest_report_header(config: Config) -> List[str]:
lines = []
if config.option.debug or config.option.traceconfig:
- lines.append(
- "using: pytest-{} pylib-{}".format(pytest.__version__, py.__version__)
- )
+ lines.append(f"using: pytest-{pytest.__version__} pylib-{py.__version__}")
verinfo = getpluginversioninfo(config)
if verinfo:
@@ -242,5 +257,5 @@ def pytest_report_header(config):
r = plugin.__file__
else:
r = repr(plugin)
- lines.append(" {:<20}: {}".format(name, r))
+ lines.append(f" {name:<20}: {r}")
return lines