gh-141679: Add colour to defaults in argparse help (#141680)

Co-authored-by: Savannah Ostrowski <savannah@python.org>
This commit is contained in:
Hugo van Kemenade 2025-11-23 02:26:50 +02:00 committed by GitHub
parent 227b9d326e
commit e73fbbacbb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 20 additions and 8 deletions

View file

@ -168,6 +168,8 @@ class Argparse(ThemeSection):
short_option: str = ANSIColors.BOLD_GREEN short_option: str = ANSIColors.BOLD_GREEN
label: str = ANSIColors.BOLD_YELLOW label: str = ANSIColors.BOLD_YELLOW
action: str = ANSIColors.BOLD_GREEN action: str = ANSIColors.BOLD_GREEN
default: str = ANSIColors.GREY
default_value: str = ANSIColors.YELLOW
reset: str = ANSIColors.RESET reset: str = ANSIColors.RESET
error: str = ANSIColors.BOLD_MAGENTA error: str = ANSIColors.BOLD_MAGENTA
warning: str = ANSIColors.BOLD_YELLOW warning: str = ANSIColors.BOLD_YELLOW

View file

@ -748,7 +748,14 @@ def _get_help_string(self, action):
if action.default is not SUPPRESS: if action.default is not SUPPRESS:
defaulting_nargs = [OPTIONAL, ZERO_OR_MORE] defaulting_nargs = [OPTIONAL, ZERO_OR_MORE]
if action.option_strings or action.nargs in defaulting_nargs: if action.option_strings or action.nargs in defaulting_nargs:
help += _(' (default: %(default)s)') t = self._theme
default_str = _(" (default: %(default)s)")
prefix, suffix = default_str.split("%(default)s")
help += (
f" {t.default}{prefix.lstrip()}"
f"{t.default_value}%(default)s"
f"{t.default}{suffix}{t.reset}"
)
return help return help

View file

@ -7288,6 +7288,8 @@ def test_argparse_color(self):
short_b = self.theme.short_option short_b = self.theme.short_option
label_b = self.theme.label label_b = self.theme.label
pos_b = self.theme.action pos_b = self.theme.action
default = self.theme.default
default_value = self.theme.default_value
reset = self.theme.reset reset = self.theme.reset
# Act # Act
@ -7314,17 +7316,17 @@ def test_argparse_color(self):
{heading}options:{reset} {heading}options:{reset}
{short_b}-h{reset}, {long_b}--help{reset} show this help message and exit {short_b}-h{reset}, {long_b}--help{reset} show this help message and exit
{short_b}-v{reset}, {long_b}--verbose{reset} more spam (default: False) {short_b}-v{reset}, {long_b}--verbose{reset} more spam {default}(default: {default_value}False{default}){reset}
{short_b}-q{reset}, {long_b}--quiet{reset} less spam (default: False) {short_b}-q{reset}, {long_b}--quiet{reset} less spam {default}(default: {default_value}False{default}){reset}
{short_b}-o{reset}, {long_b}--optional1{reset} {short_b}-o{reset}, {long_b}--optional1{reset}
{long_b}--optional2{reset} {label_b}OPTIONAL2{reset} {long_b}--optional2{reset} {label_b}OPTIONAL2{reset}
pick one (default: None) pick one {default}(default: {default_value}None{default}){reset}
{long_b}--optional3{reset} {label_b}{{X,Y,Z}}{reset} {long_b}--optional3{reset} {label_b}{{X,Y,Z}}{reset}
{long_b}--optional4{reset} {label_b}{{X,Y,Z}}{reset} pick one (default: None) {long_b}--optional4{reset} {label_b}{{X,Y,Z}}{reset} pick one {default}(default: {default_value}None{default}){reset}
{long_b}--optional5{reset} {label_b}{{X,Y,Z}}{reset} pick one (default: None) {long_b}--optional5{reset} {label_b}{{X,Y,Z}}{reset} pick one {default}(default: {default_value}None{default}){reset}
{long_b}--optional6{reset} {label_b}{{X,Y,Z}}{reset} pick one (default: None) {long_b}--optional6{reset} {label_b}{{X,Y,Z}}{reset} pick one {default}(default: {default_value}None{default}){reset}
{short_b}-p{reset}, {long_b}--optional7{reset} {label_b}{{Aaaaa,Bbbbb,Ccccc,Ddddd}}{reset} {short_b}-p{reset}, {long_b}--optional7{reset} {label_b}{{Aaaaa,Bbbbb,Ccccc,Ddddd}}{reset}
pick one (default: None) pick one {default}(default: {default_value}None{default}){reset}
{short_b}+f{reset} {label_b}F{reset} {short_b}+f{reset} {label_b}F{reset}
{long_b}++bar{reset} {label_b}BAR{reset} {long_b}++bar{reset} {label_b}BAR{reset}
{long_b}-+baz{reset} {label_b}BAZ{reset} {long_b}-+baz{reset} {label_b}BAZ{reset}

View file

@ -0,0 +1 @@
Add colour to defaults in :mod:`argparse` help. Patch by Hugo van Kemenade.