GH-139946: Colorize error and warning messages in argparse (#140695)

Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
This commit is contained in:
Savannah Ostrowski 2025-11-04 08:31:35 -08:00 committed by GitHub
parent 1326d2a808
commit 40096da95a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 73 additions and 5 deletions

View file

@ -2749,6 +2749,14 @@ def _print_message(self, message, file=None):
except (AttributeError, OSError):
pass
def _get_theme(self, file=None):
from _colorize import can_colorize, get_theme
if self.color and can_colorize(file=file):
return get_theme(force_color=True).argparse
else:
return get_theme(force_no_color=True).argparse
# ===============
# Exiting methods
# ===============
@ -2768,13 +2776,21 @@ def error(self, message):
should either exit or raise an exception.
"""
self.print_usage(_sys.stderr)
theme = self._get_theme(file=_sys.stderr)
fmt = _('%(prog)s: error: %(message)s\n')
fmt = fmt.replace('error: %(message)s',
f'{theme.error}error:{theme.reset} {theme.message}%(message)s{theme.reset}')
args = {'prog': self.prog, 'message': message}
self.exit(2, _('%(prog)s: error: %(message)s\n') % args)
self.exit(2, fmt % args)
def _warning(self, message):
theme = self._get_theme(file=_sys.stderr)
fmt = _('%(prog)s: warning: %(message)s\n')
fmt = fmt.replace('warning: %(message)s',
f'{theme.warning}warning:{theme.reset} {theme.message}%(message)s{theme.reset}')
args = {'prog': self.prog, 'message': message}
self._print_message(_('%(prog)s: warning: %(message)s\n') % args, _sys.stderr)
self._print_message(fmt % args, _sys.stderr)
def __getattr__(name):
if name == "__version__":