-
-
Notifications
You must be signed in to change notification settings - Fork 32.3k
bpo-8538: Add support for boolean actions to argparse #11478
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bpo-8538: Add support for boolean actions to argparse #11478
Conversation
Co-Authored-By: remilapeyre <[email protected]>
Hello, and thanks for your contribution! I'm a bot set up to make sure that the project can legally accept your contribution by verifying you have signed the PSF contributor agreement (CLA). Unfortunately we couldn't find an account corresponding to your GitHub username on bugs.python.org (b.p.o) to verify you have signed the CLA (this might be simply due to a missing "GitHub Name" entry in your b.p.o account settings). This is necessary for legal reasons before we can look at your contribution. Please follow the steps outlined in the CPython devguide to rectify this issue. You can check yourself to see if the CLA has been received. Thanks again for your contribution, we look forward to reviewing it! |
@kenahoo Can you sign the CLA to make @the-knights-who-say-ni happy? |
Thanks @remilapeyre , I've signed it. |
Hi! I was about to write a patch to add the same feature. Good thing that I decided to look if someone was already working on it, thank you :-) I'd like to contribute with the following comments: 1. Register action rather than exposing the classI don't think self.register('action', 'optional_boolean', _BooleanOptionalAction) 2. Be aware of short optionsYour current implementation does not ignore short options when adding the prefix 3. Ordering of parameters namesI think the parser.add_argument('--foo', '--bar', action='optional_boolean', ...) Then, in the help message, 4. DocumentationIn the case of registering the action 'optional_boolean', it would be necessary to update the documentation on the list of supported values for the 5. My custom action classAbout (2) and (3), I have a custom implementation in one project of mine that does that: class BoolAction(argparse.Action):
def __init__(self, option_strings, dest, **kw):
self.original_option_strings = option_strings
kw['nargs'] = 0
option_strings = []
for s in self.original_option_strings:
option_strings.append(s)
if s.startswith('--'):
s = '--no-' + s[2:]
option_strings.append(s)
super(BoolAction, self).__init__(option_strings, dest, **kw)
def __call__(self, parser, namespace, values, option_string):
value = option_string in self.original_option_strings
setattr(namespace, self.dest, value) |
All of @guludo's comments seem reasonable to me. |
Hi @guludo, about 1. this has been discussed on b.p.o (https://bugs.python.org/issue8538#msg105620) and Steven Bethard seems to agree (https://bugs.python.org/issue8538#msg166165) so I think it is better to keep it that way before a core reviewers either confirm this API or asks for a registered action. I think it makes 4. unneeded. Nice catch for 2. and 3. I used something similar than you did for short options. The latest commit fix the ordering too. |
I would like to see the result of Travis... |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for this contribution, I like the feature.
Thank you for your contribution and this feature, really appreciated. |
Thanks @matrixise ! |
@remilapeyre with pleasure. |
python#4144 and python/cpython#11478 (review) resulted in the issue being fixed upstream. A fix in time saves a branch in typeshed :-)
#4144 and python/cpython#11478 (review) resulted in the issue being fixed upstream. Co-authored-by: hauntsaninja <>
python#4144 and python/cpython#11478 (review) resulted in the issue being fixed upstream. Co-authored-by: hauntsaninja <>
https://bugs.python.org/issue8538