summaryrefslogtreecommitdiff
path: root/lib/spack/external/_pytest/helpconfig.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/spack/external/_pytest/helpconfig.py')
-rw-r--r--lib/spack/external/_pytest/helpconfig.py82
1 files changed, 61 insertions, 21 deletions
diff --git a/lib/spack/external/_pytest/helpconfig.py b/lib/spack/external/_pytest/helpconfig.py
index 6e66b11c48..e744637f86 100644
--- a/lib/spack/external/_pytest/helpconfig.py
+++ b/lib/spack/external/_pytest/helpconfig.py
@@ -1,25 +1,61 @@
""" version info, help messages, tracing configuration. """
+from __future__ import absolute_import, division, print_function
+
import py
import pytest
-import os, sys
+from _pytest.config import PrintHelp
+import os
+import sys
+from argparse import Action
+
+
+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.
+ 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
+ implemented by raising SystemExit.
+ """
+
+ def __init__(self,
+ option_strings,
+ dest=None,
+ default=False,
+ help=None):
+ super(HelpAction, self).__init__(
+ option_strings=option_strings,
+ dest=dest,
+ const=True,
+ default=default,
+ nargs=0,
+ help=help)
+
+ 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
+ if getattr(parser._parser, 'after_preparse', False):
+ raise PrintHelp
+
def pytest_addoption(parser):
group = parser.getgroup('debugconfig')
group.addoption('--version', action="store_true",
- help="display pytest lib version and import information.")
- group._addoption("-h", "--help", action="store_true", dest="help",
- help="show help message and configuration info")
- group._addoption('-p', action="append", dest="plugins", default = [],
- metavar="name",
- help="early-load given plugin (multi-allowed). "
- "To avoid loading of plugins, use the `no:` prefix, e.g. "
- "`no:doctest`.")
+ help="display pytest lib version and import information.")
+ group._addoption("-h", "--help", action=HelpAction, dest="help",
+ help="show help message and configuration info")
+ group._addoption('-p', action="append", dest="plugins", default=[],
+ metavar="name",
+ help="early-load given plugin (multi-allowed). "
+ "To avoid loading of plugins, use the `no:` prefix, e.g. "
+ "`no:doctest`.")
group.addoption('--traceconfig', '--trace-config',
- action="store_true", default=False,
- help="trace considerations of conftest.py files."),
+ action="store_true", default=False,
+ help="trace considerations of conftest.py files."),
group.addoption('--debug',
- action="store_true", dest="debug", default=False,
- help="store internal tracing debug information in 'pytestdebug.log'.")
+ action="store_true", dest="debug", default=False,
+ help="store internal tracing debug information in 'pytestdebug.log'.")
group._addoption(
'-o', '--override-ini', nargs='*', dest="override_ini",
action="append",
@@ -34,10 +70,10 @@ def pytest_cmdline_parse():
path = os.path.abspath("pytestdebug.log")
debugfile = open(path, 'w')
debugfile.write("versions pytest-%s, py-%s, "
- "python-%s\ncwd=%s\nargs=%s\n\n" %(
- pytest.__version__, py.__version__,
- ".".join(map(str, sys.version_info)),
- os.getcwd(), config._origargs))
+ "python-%s\ncwd=%s\nargs=%s\n\n" % (
+ pytest.__version__, py.__version__,
+ ".".join(map(str, sys.version_info)),
+ os.getcwd(), config._origargs))
config.trace.root.setwriter(debugfile.write)
undo_tracing = config.pluginmanager.enable_tracing()
sys.stderr.write("writing pytestdebug information to %s\n" % path)
@@ -51,11 +87,12 @@ def pytest_cmdline_parse():
config.add_cleanup(unset_tracing)
+
def pytest_cmdline_main(config):
if config.option.version:
p = py.path.local(pytest.__file__)
sys.stderr.write("This is pytest version %s, imported from %s\n" %
- (pytest.__version__, p))
+ (pytest.__version__, p))
plugininfo = getpluginversioninfo(config)
if plugininfo:
for line in plugininfo:
@@ -67,6 +104,7 @@ def pytest_cmdline_main(config):
config._ensure_unconfigure()
return 0
+
def showhelp(config):
reporter = config.pluginmanager.get_plugin('terminalreporter')
tw = reporter._tw
@@ -82,7 +120,7 @@ def showhelp(config):
if type is None:
type = "string"
spec = "%s (%s)" % (name, type)
- line = " %-24s %s" %(spec, help)
+ line = " %-24s %s" % (spec, help)
tw.line(line[:tw.fullwidth])
tw.line()
@@ -111,6 +149,7 @@ conftest_options = [
('pytest_plugins', 'list of plugin names to load'),
]
+
def getpluginversioninfo(config):
lines = []
plugininfo = config.pluginmanager.list_plugin_distinfo()
@@ -122,11 +161,12 @@ def getpluginversioninfo(config):
lines.append(" " + content)
return lines
+
def pytest_report_header(config):
lines = []
if config.option.debug or config.option.traceconfig:
lines.append("using: pytest-%s pylib-%s" %
- (pytest.__version__,py.__version__))
+ (pytest.__version__, py.__version__))
verinfo = getpluginversioninfo(config)
if verinfo:
@@ -140,5 +180,5 @@ def pytest_report_header(config):
r = plugin.__file__
else:
r = repr(plugin)
- lines.append(" %-20s: %s" %(name, r))
+ lines.append(" %-20s: %s" % (name, r))
return lines