[Python-checkins] cpython: Issue #16854: Fix regrtest.usage() regression introduced in 6e2e5adc0400.
chris.jerdonek
python-checkins at python.org
Tue Jan 8 02:10:40 CET 2013
http://hg.python.org/cpython/rev/ce99559efa46
changeset: 81314:ce99559efa46
user: Chris Jerdonek <chris.jerdonek at gmail.com>
date: Mon Jan 07 17:07:32 2013 -0800
summary:
Issue #16854: Fix regrtest.usage() regression introduced in 6e2e5adc0400.
This fixes a regression introduced in the commit for issue #15302, which
switched regrtest from getopt to argparse.
files:
Lib/test/regrtest.py | 52 ++++++++++++++------------
Lib/test/test_regrtest.py | 8 +++-
2 files changed, 34 insertions(+), 26 deletions(-)
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -202,16 +202,20 @@
TEMPDIR = os.path.abspath(tempfile.gettempdir())
+class _ArgParser(argparse.ArgumentParser):
+
+ def error(self, message):
+ super().error(message + "\nPass -h or --help for complete help.")
+
def _create_parser():
# Set prog to prevent the uninformative "__main__.py" from displaying in
# error messages when using "python -m test ...".
- parser = argparse.ArgumentParser(prog='regrtest.py',
- usage=USAGE,
- description=DESCRIPTION,
- epilog=EPILOG,
- add_help=False,
- formatter_class=
- argparse.RawDescriptionHelpFormatter)
+ parser = _ArgParser(prog='regrtest.py',
+ usage=USAGE,
+ description=DESCRIPTION,
+ epilog=EPILOG,
+ add_help=False,
+ formatter_class=argparse.RawDescriptionHelpFormatter)
# Arguments with this clause added to its help are described further in
# the epilog's "Additional option details" section.
@@ -301,8 +305,18 @@
return parser
+# TODO: remove this function as described in issue #16799, for example.
+# We use this function since regrtest.main() was originally written to use
+# getopt for parsing.
def _convert_namespace_to_getopt(ns):
- """Convert an argparse.Namespace object to a getopt-style (opts, args)."""
+ """Convert an argparse.Namespace object to a getopt-style opts list.
+
+ The return value of this function mimics the first element of
+ getopt.getopt()'s (opts, args) return value. In addition, the (option,
+ value) pairs in the opts list are sorted by option and use the long
+ option string. The args part of (opts, args) can be mimicked by the
+ args attribute of the Namespace object we are using in regrtest.
+ """
opts = []
args_dict = vars(ns)
for key in sorted(args_dict.keys()):
@@ -319,21 +333,7 @@
# includes these with value '' in the opts list.
val = ''
opts.append(('--' + key, val))
- return opts, ns.args
-
-# This function has a getopt-style return value because regrtest.main()
-# was originally written using getopt.
-# TODO: switch this to return an argparse.Namespace instance.
-def _parse_args(args=None):
- """Parse arguments, and return a getopt-style (opts, args).
-
- This method mimics the return value of getopt.getopt(). In addition,
- the (option, value) pairs in opts are sorted by option and use the long
- option string.
- """
- parser = _create_parser()
- ns = parser.parse_args(args=args)
- return _convert_namespace_to_getopt(ns)
+ return opts
def main(tests=None, testdir=None, verbose=0, quiet=False,
@@ -381,7 +381,11 @@
support.record_original_stdout(sys.stdout)
- opts, args = _parse_args()
+ parser = _create_parser()
+ ns = parser.parse_args()
+ opts = _convert_namespace_to_getopt(ns)
+ args = ns.args
+ usage = parser.error
# Defaults
if random_seed is None:
diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
--- a/Lib/test/test_regrtest.py
+++ b/Lib/test/test_regrtest.py
@@ -23,10 +23,14 @@
class ParseArgsTestCase(unittest.TestCase):
- """Test that regrtest._parse_args() matches the prior getopt behavior."""
+ """Test that regrtest's parsing code matches the prior getopt behavior."""
def _parse_args(self, args):
- return regrtest._parse_args(args=args)
+ # This is the same logic as that used in regrtest.main()
+ parser = regrtest._create_parser()
+ ns = parser.parse_args(args=args)
+ opts = regrtest._convert_namespace_to_getopt(ns)
+ return opts, ns.args
def _check_args(self, args, expected=None):
"""
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list