diff options
author | Yilei Yang <yileiyang@google.com> | 2021-07-19 11:26:09 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2021-07-19 11:26:29 -0700 |
commit | 9a555e920f53af7e00d68f4e0706303329699cea (patch) | |
tree | 92bda1674509bcb1da5699121c42bfb1798f8003 /absl | |
parent | 4c066f82472f5b4020eabbfd601b4c9aa58763f0 (diff) | |
download | absl-py-9a555e920f53af7e00d68f4e0706303329699cea.tar.gz |
Fix #171: add an ignored `default=` argument to our custom actions.
This is a required argument for custom argparse.Action classes, and is used when the `ArgumentParse` is created with a `argument_default=`.
PiperOrigin-RevId: 385601086
Change-Id: I01ef4870aa4f0e92f7e8f9be0125c9a0dba16c6f
Diffstat (limited to 'absl')
-rw-r--r-- | absl/CHANGELOG.md | 5 | ||||
-rw-r--r-- | absl/flags/argparse_flags.py | 27 | ||||
-rw-r--r-- | absl/flags/tests/argparse_flags_test.py | 10 |
3 files changed, 37 insertions, 5 deletions
diff --git a/absl/CHANGELOG.md b/absl/CHANGELOG.md index aff590d..253628f 100644 --- a/absl/CHANGELOG.md +++ b/absl/CHANGELOG.md @@ -6,7 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com). ## Unreleased -Nothing notable unreleased. +### Fixed + +* #171: Creating `argparse_flags.ArgumentParser` with `argument_default=` no + longer raises an exception when other `absl.flags` flags are defined. ## 0.13.0 (2021-06-14) diff --git a/absl/flags/argparse_flags.py b/absl/flags/argparse_flags.py index ea4cdfa..4f78f50 100644 --- a/absl/flags/argparse_flags.py +++ b/absl/flags/argparse_flags.py @@ -148,7 +148,8 @@ class ArgumentParser(argparse.ArgumentParser): default=argparse.SUPPRESS, help='show full help message and exit') if self._inherited_absl_flags: - self.add_argument('--undefok', help=argparse.SUPPRESS) + self.add_argument( + '--undefok', default=argparse.SUPPRESS, help=argparse.SUPPRESS) self._define_absl_flags(self._inherited_absl_flags) def parse_known_args(self, args=None, namespace=None): @@ -237,7 +238,14 @@ class ArgumentParser(argparse.ArgumentParser): class _FlagAction(argparse.Action): """Action class for Abseil non-boolean flags.""" - def __init__(self, option_strings, dest, help, metavar, flag_instance): # pylint: disable=redefined-builtin + def __init__( + self, + option_strings, + dest, + help, # pylint: disable=redefined-builtin + metavar, + flag_instance, + default=argparse.SUPPRESS): """Initializes _FlagAction. Args: @@ -246,6 +254,8 @@ class _FlagAction(argparse.Action): help: See argparse.Action. metavar: See argparse.Action. flag_instance: absl.flags.Flag, the absl flag instance. + default: Ignored. The flag always uses dest=argparse.SUPPRESS so it + doesn't affect the parsing result. """ del dest self._flag_instance = flag_instance @@ -264,7 +274,14 @@ class _FlagAction(argparse.Action): class _BooleanFlagAction(argparse.Action): """Action class for Abseil boolean flags.""" - def __init__(self, option_strings, dest, help, metavar, flag_instance): # pylint: disable=redefined-builtin + def __init__( + self, + option_strings, + dest, + help, # pylint: disable=redefined-builtin + metavar, + flag_instance, + default=argparse.SUPPRESS): """Initializes _BooleanFlagAction. Args: @@ -273,8 +290,10 @@ class _BooleanFlagAction(argparse.Action): help: See argparse.Action. metavar: See argparse.Action. flag_instance: absl.flags.Flag, the absl flag instance. + default: Ignored. The flag always uses dest=argparse.SUPPRESS so it + doesn't affect the parsing result. """ - del dest + del dest, default self._flag_instance = flag_instance flag_names = [self._flag_instance.name] if self._flag_instance.short_name: diff --git a/absl/flags/tests/argparse_flags_test.py b/absl/flags/tests/argparse_flags_test.py index ddd62a9..a2bcbe5 100644 --- a/absl/flags/tests/argparse_flags_test.py +++ b/absl/flags/tests/argparse_flags_test.py @@ -36,6 +36,7 @@ import six class ArgparseFlagsTest(parameterized.TestCase): def setUp(self): + super().setUp() self._absl_flags = flags.FlagValues() flags.DEFINE_bool( 'absl_bool', None, 'help for --absl_bool.', @@ -393,6 +394,15 @@ class ArgparseFlagsTest(parameterized.TestCase): with self.assertRaises(SystemExit): parser.parse_args(cmd_args) + def test_argument_default(self): + # Regression test for https://github.com/abseil/abseil-py/issues/171. + parser = argparse_flags.ArgumentParser( + inherited_absl_flags=self._absl_flags, argument_default=23) + parser.add_argument( + '--magic_number', type=int, help='The magic number to use.') + args = parser.parse_args([]) + self.assertEqual(args.magic_number, 23) + class ArgparseWithAppRunTest(parameterized.TestCase): |