GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | |||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | |||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing github.com — bpo-29298: Fix crash with required subparsers without dest by asottile · Pull Request #3680 · python/cpython Conversation
|
|
@merwok this is a followup from #3027 (comment) |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| elif argument.dest not in (None, SUPPRESS): | ||
| return argument.dest | ||
| elif argument.choices: | ||
| return '{' + ','.join(argument.choices) + '}' |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
The test doesn’t really help me understand what this change does (i.e. what a human would see in an error case).
I’m also not sure if some of the changes in the various patches for bpo-9253 (especially in tests) could be useful here.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
I'll check those out. I had a difficult time demonstrating (by assertion) the actual output (didn't find any examples) -- I'll bang against that and hopefully I'll make something more expressive :)
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
@merwok looks like they had the same idea I had (but a different implementation) -- I took inspiration from one of their tests for additional coverage and updated the tests to hopefully be more expressive (and have a better failure mode)
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Code for this is already in _metavar_formatter:
elif action.choices is not None: choice_strs = [str(choice) for choice in action.choices] result = '{%s}' % ','.join(choice_strs)
The metavar formatter can be called, if the parser is known (as self), using:
default = self._get_default_metavar_for_positional(action) metavar, = self._metavar_formatter(action, default)(1)
Perhaps _get_action_name should be made into a method, or take the parser as an optional argument?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Thanks a lot! Left comments about the error message UI.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated. Once you have made the requested changes, please leave a comment on this pull request containing the phrase |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@merwok care to take another look at this? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I didn't expect the Spanish Inquisition! |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Nobody expects the Spanish Inquisition! @merwok: please review the changes made to this pull request. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I haven’t had the time to double-check the error messages, maybe this week-end. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Good evening, |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| parser.parse_args(()) | ||
| self.assertRegex( | ||
| excinfo.exception.stderr, | ||
| 'error: the following arguments are required: {foo,bar}\n$' |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Add a space after comma. Why braces are used?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
I think this is a notation for alternatives: it means one of foo or bar is required.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This is consistent with the rendering of choices:
import argparse parser = argparse.ArgumentParser() parser.add_argument('--foo', choices=('baz', 'womp')) parser.parse_args()
$ python test.py --help
usage: test.py [-h] [--foo {baz,womp}]
optional arguments:
-h, --help show this help message and exit
--foo {baz,womp}
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| parser.parse_args(('baz',)) | ||
| self.assertRegex( | ||
| excinfo.exception.stderr, | ||
| r"error: argument {foo,bar}: invalid choice: 'baz' \(choose from 'foo', 'bar'\)\n$" |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
"foo, bar" is duplicated. And this error message looks confusing to me. What it means?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
yeah I didn't really know what to do for this, it's essentially an anonymous positional choices argument. Personally I'd love a default dest='command' but I imagine that could cause some incompatibility?
Then this would read something like error: argument command: invalid choice ...
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I have requested reviews of this, but it also looks like @asottile may need to address some questions as well. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
I believe I've addressed everything currently open, unless I'm missing something 🤔 |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I'll trivial-rebase to get a fresh set of builders |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
276e844 to
6a09976
Compare
|
Thanks @asottile for the PR 🌮🎉.. I'm working now to backport this PR to: 3.10, 3.9. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
GH-27303 is a backport of this pull request to the 3.10 branch. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
GH-27304 is a backport of this pull request to the 3.9 branch. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
…3680) Automerge-Triggered-By: GH:encukou (cherry picked from commit 17575f7) Co-authored-by: Anthony Sottile <[email protected]>
…3680) Automerge-Triggered-By: GH:encukou (cherry picked from commit 17575f7) Co-authored-by: Anthony Sottile <[email protected]>
…H-27303) (cherry picked from commit 17575f7) Co-authored-by: Anthony Sottile <[email protected]>
…H-27304) (cherry picked from commit 17575f7) Co-authored-by: Anthony Sottile <[email protected]>
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.