mirror of
https://github.com/python/cpython.git
synced 2025-11-24 20:30:18 +00:00
[3.14] GH-139809: Fix argparse subcommand prog not respecting color environment variables (GH-139818) (#139866)
GH-139809: Fix argparse subcommand prog not respecting color environment variables (GH-139818)
(cherry picked from commit 9fc4366f09)
Co-authored-by: Savannah Ostrowski <savannah@python.org>
This commit is contained in:
parent
2cc13ff304
commit
af1cb1cdb8
3 changed files with 18 additions and 2 deletions
|
|
@ -1960,7 +1960,9 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
|
|||
# prog defaults to the usage message of this parser, skipping
|
||||
# optional arguments and with no "usage:" prefix
|
||||
if kwargs.get('prog') is None:
|
||||
formatter = self._get_formatter()
|
||||
# Create formatter without color to avoid storing ANSI codes in prog
|
||||
formatter = self.formatter_class(prog=self.prog)
|
||||
formatter._set_color(False)
|
||||
positionals = self._get_positional_actions()
|
||||
groups = self._mutually_exclusive_groups
|
||||
formatter.add_usage(None, positionals, groups, '')
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ from test.support import (
|
|||
captured_stderr,
|
||||
force_not_colorized,
|
||||
force_not_colorized_test_class,
|
||||
swap_attr,
|
||||
)
|
||||
from test.support import import_helper
|
||||
from test.support import os_helper
|
||||
|
|
@ -7128,7 +7129,8 @@ class TestColorized(TestCase):
|
|||
def setUp(self):
|
||||
super().setUp()
|
||||
# Ensure color even if ran with NO_COLOR=1
|
||||
_colorize.can_colorize = lambda *args, **kwargs: True
|
||||
self.enterContext(swap_attr(_colorize, 'can_colorize',
|
||||
lambda *args, **kwargs: True))
|
||||
self.theme = _colorize.get_theme(force_color=True).argparse
|
||||
|
||||
def test_argparse_color(self):
|
||||
|
|
@ -7355,6 +7357,17 @@ class TestColorized(TestCase):
|
|||
{short_b}+f{reset}, {long_b}++foo{reset} {label_b}FOO{reset} foo help
|
||||
'''))
|
||||
|
||||
def test_subparser_prog_is_stored_without_color(self):
|
||||
parser = argparse.ArgumentParser(prog='complex', color=True)
|
||||
sub = parser.add_subparsers(dest='command')
|
||||
demo_parser = sub.add_parser('demo')
|
||||
|
||||
self.assertNotIn('\x1b[', demo_parser.prog)
|
||||
|
||||
demo_parser.color = False
|
||||
help_text = demo_parser.format_help()
|
||||
self.assertNotIn('\x1b[', help_text)
|
||||
|
||||
|
||||
def tearDownModule():
|
||||
# Remove global references to avoid looking like we have refleaks.
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
Prevent premature colorization of subparser ``prog`` in :meth:`argparse.ArgumentParser.add_subparsers` to respect color environment variable changes after parser creation.
|
||||
Loading…
Add table
Add a link
Reference in a new issue