mirror of
https://github.com/django/django.git
synced 2026-02-09 02:49:25 +08:00
Fixed #36376 -- Fixed --no-color for command help in Python 3.14+.
https://github.com/python/cpython/pull/136809 made `color` default to True in ArgumentParser.
This commit is contained in:
@@ -58,8 +58,11 @@ class CommandParser(ArgumentParser):
|
||||
):
|
||||
self.missing_args_message = missing_args_message
|
||||
self.called_from_command_line = called_from_command_line
|
||||
if PY314 and not PY315:
|
||||
kwargs.setdefault("suggest_on_error", True)
|
||||
if PY314:
|
||||
if not PY315:
|
||||
kwargs.setdefault("suggest_on_error", True)
|
||||
if os.environ.get("DJANGO_COLORS") == "nocolor" or "--no-color" in sys.argv:
|
||||
kwargs.setdefault("color", False)
|
||||
super().__init__(**kwargs)
|
||||
|
||||
def parse_args(self, args=None, namespace=None):
|
||||
|
||||
@@ -9,4 +9,6 @@ Django 5.2.10 fixes several bugs in 5.2.9.
|
||||
Bugfixes
|
||||
========
|
||||
|
||||
* ...
|
||||
* Fixed a bug where management command colorized help (introduced in
|
||||
Python 3.14) ignored the :option:`--no-color` option and the
|
||||
:envvar:`DJANGO_COLORS` setting (:ticket:`36376`).
|
||||
|
||||
@@ -16,3 +16,7 @@ Bugfixes
|
||||
* Fixed a regression in Django 6.0 that prevented changing the name of a
|
||||
:class:`~django.db.models.ManyToManyField` from taking effect when applying
|
||||
migrations (:ticket:`36800`).
|
||||
|
||||
* Fixed a bug where management command colorized help (introduced in
|
||||
Python 3.14) ignored the :option:`--no-color` option and the
|
||||
:envvar:`DJANGO_COLORS` setting (:ticket:`36376`).
|
||||
|
||||
@@ -470,6 +470,34 @@ class CommandTests(SimpleTestCase):
|
||||
)
|
||||
self.assertFalse(parser.suggest_on_error)
|
||||
|
||||
@unittest.skipUnless(PY314, "Only relevant for Python 3.14+")
|
||||
def test_color_enabled_by_default(self):
|
||||
with mock.patch.dict(os.environ, {}, clear=True):
|
||||
command = BaseCommand()
|
||||
parser = command.create_parser("prog_name", "subcommand")
|
||||
self.assertTrue(parser.color)
|
||||
|
||||
@unittest.skipUnless(PY314, "Only relevant for Python 3.14+")
|
||||
def test_color_disabled_with_django_colors_nocolor(self):
|
||||
with mock.patch.dict(os.environ, {"DJANGO_COLORS": "nocolor"}):
|
||||
command = BaseCommand()
|
||||
parser = command.create_parser("prog_name", "subcommand")
|
||||
self.assertFalse(parser.color)
|
||||
|
||||
@unittest.skipUnless(PY314, "Only relevant for Python 3.14+")
|
||||
def test_force_color_does_not_affect_argparse_color(self):
|
||||
with mock.patch.dict(os.environ, {}, clear=True):
|
||||
command = BaseCommand(force_color=True)
|
||||
parser = command.create_parser("prog_name", "subcommand")
|
||||
self.assertTrue(parser.color)
|
||||
|
||||
@unittest.skipUnless(PY314, "Only relevant for Python 3.14+")
|
||||
def test_no_color_flag_disables_color(self):
|
||||
with mock.patch.object(sys, "argv", ["manage.py", "mycommand", "--no-color"]):
|
||||
command = BaseCommand()
|
||||
parser = command.create_parser("manage.py", "mycommand")
|
||||
self.assertFalse(parser.color)
|
||||
|
||||
|
||||
class CommandRunTests(AdminScriptTestCase):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user