Skip to content

Commit e73fbba

Browse files
gh-141679: Add colour to defaults in argparse help (#141680)
Co-authored-by: Savannah Ostrowski <savannah@python.org>
1 parent 227b9d3 commit e73fbba

File tree

4 files changed

+20
-8
lines changed

4 files changed

+20
-8
lines changed

Lib/_colorize.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@ class Argparse(ThemeSection):
168168
short_option: str = ANSIColors.BOLD_GREEN
169169
label: str = ANSIColors.BOLD_YELLOW
170170
action: str = ANSIColors.BOLD_GREEN
171+
default: str = ANSIColors.GREY
172+
default_value: str = ANSIColors.YELLOW
171173
reset: str = ANSIColors.RESET
172174
error: str = ANSIColors.BOLD_MAGENTA
173175
warning: str = ANSIColors.BOLD_YELLOW

Lib/argparse.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -748,7 +748,14 @@ def _get_help_string(self, action):
748748
if action.default is not SUPPRESS:
749749
defaulting_nargs = [OPTIONAL, ZERO_OR_MORE]
750750
if action.option_strings or action.nargs in defaulting_nargs:
751-
help += _(' (default: %(default)s)')
751+
t = self._theme
752+
default_str = _(" (default: %(default)s)")
753+
prefix, suffix = default_str.split("%(default)s")
754+
help += (
755+
f" {t.default}{prefix.lstrip()}"
756+
f"{t.default_value}%(default)s"
757+
f"{t.default}{suffix}{t.reset}"
758+
)
752759
return help
753760

754761

Lib/test/test_argparse.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7288,6 +7288,8 @@ def test_argparse_color(self):
72887288
short_b = self.theme.short_option
72897289
label_b = self.theme.label
72907290
pos_b = self.theme.action
7291+
default = self.theme.default
7292+
default_value = self.theme.default_value
72917293
reset = self.theme.reset
72927294

72937295
# Act
@@ -7314,17 +7316,17 @@ def test_argparse_color(self):
73147316
73157317
{heading}options:{reset}
73167318
{short_b}-h{reset}, {long_b}--help{reset} show this help message and exit
7317-
{short_b}-v{reset}, {long_b}--verbose{reset} more spam (default: False)
7318-
{short_b}-q{reset}, {long_b}--quiet{reset} less spam (default: False)
7319+
{short_b}-v{reset}, {long_b}--verbose{reset} more spam {default}(default: {default_value}False{default}){reset}
7320+
{short_b}-q{reset}, {long_b}--quiet{reset} less spam {default}(default: {default_value}False{default}){reset}
73197321
{short_b}-o{reset}, {long_b}--optional1{reset}
73207322
{long_b}--optional2{reset} {label_b}OPTIONAL2{reset}
7321-
pick one (default: None)
7323+
pick one {default}(default: {default_value}None{default}){reset}
73227324
{long_b}--optional3{reset} {label_b}{{X,Y,Z}}{reset}
7323-
{long_b}--optional4{reset} {label_b}{{X,Y,Z}}{reset} pick one (default: None)
7324-
{long_b}--optional5{reset} {label_b}{{X,Y,Z}}{reset} pick one (default: None)
7325-
{long_b}--optional6{reset} {label_b}{{X,Y,Z}}{reset} pick one (default: None)
7325+
{long_b}--optional4{reset} {label_b}{{X,Y,Z}}{reset} pick one {default}(default: {default_value}None{default}){reset}
7326+
{long_b}--optional5{reset} {label_b}{{X,Y,Z}}{reset} pick one {default}(default: {default_value}None{default}){reset}
7327+
{long_b}--optional6{reset} {label_b}{{X,Y,Z}}{reset} pick one {default}(default: {default_value}None{default}){reset}
73267328
{short_b}-p{reset}, {long_b}--optional7{reset} {label_b}{{Aaaaa,Bbbbb,Ccccc,Ddddd}}{reset}
7327-
pick one (default: None)
7329+
pick one {default}(default: {default_value}None{default}){reset}
73287330
{short_b}+f{reset} {label_b}F{reset}
73297331
{long_b}++bar{reset} {label_b}BAR{reset}
73307332
{long_b}-+baz{reset} {label_b}BAZ{reset}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add colour to defaults in :mod:`argparse` help. Patch by Hugo van Kemenade.

0 commit comments

Comments
 (0)