From 3445eae737e5d5110674ad5aff1f87263c1be089 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Tue, 11 Dec 2018 04:54:54 +0100 Subject: [PATCH] argparsing: Parser: allow to forward prog to argparse Ref: https://github.com/pytest-dev/pytest-xdist/pull/388. --- src/_pytest/config/argparsing.py | 7 +++++-- testing/test_parseopt.py | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index 5b8306dda..51f708335 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -18,6 +18,8 @@ class Parser(object): there's an error processing the command line arguments. """ + prog = None + def __init__(self, usage=None, processopt=None): self._anonymous = OptionGroup("custom options", parser=self) self._groups = [] @@ -82,7 +84,7 @@ class Parser(object): def _getparser(self): from _pytest._argcomplete import filescompleter - optparser = MyOptionParser(self, self.extra_info) + optparser = MyOptionParser(self, self.extra_info, prog=self.prog) groups = self._groups + [self._anonymous] for group in groups: if group.options: @@ -319,12 +321,13 @@ class OptionGroup(object): class MyOptionParser(argparse.ArgumentParser): - def __init__(self, parser, extra_info=None): + def __init__(self, parser, extra_info=None, prog=None): if not extra_info: extra_info = {} self._parser = parser argparse.ArgumentParser.__init__( self, + prog=prog, usage=parser._usage, add_help=False, formatter_class=DropShorterLongHelpFormatter, diff --git a/testing/test_parseopt.py b/testing/test_parseopt.py index 3048c96bd..c3b4ee698 100644 --- a/testing/test_parseopt.py +++ b/testing/test_parseopt.py @@ -24,6 +24,12 @@ class TestParser(object): out, err = capsys.readouterr() assert err.find("error: unrecognized arguments") != -1 + def test_custom_prog(self, parser): + """Custom prog can be set for `argparse.ArgumentParser`.""" + assert parser._getparser().prog == os.path.basename(sys.argv[0]) + parser.prog = "custom-prog" + assert parser._getparser().prog == "custom-prog" + def test_argument(self): with pytest.raises(parseopt.ArgumentError): # need a short or long option