Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
2c1108b
Add colour to doctest output and create _colorize module
hugovk Apr 6, 2024
d27c0a8
Use _colorize in traceback module
hugovk Apr 6, 2024
bb591b6
Fix whitespace
hugovk Apr 6, 2024
42079be
Use f-strings
hugovk Apr 6, 2024
0088579
Remove underscores from members of an underscored module
hugovk Apr 6, 2024
d3034fa
Add blurb
hugovk Apr 6, 2024
39780cb
Remove underscores from members of an underscored module
hugovk Apr 6, 2024
c5aec15
Revert "Fix whitespace"
hugovk Apr 6, 2024
7e40133
Move _colorize to stdlib block, colour->color
hugovk Apr 6, 2024
e484465
Move imports together
hugovk Apr 6, 2024
1c7b025
Move imports together
hugovk Apr 6, 2024
ab2c94c
Move imports together
hugovk Apr 6, 2024
1aaeab8
Revert notests -> no_tests
hugovk Apr 6, 2024
cd02e4a
Revert "Use f-strings"
hugovk Apr 6, 2024
06543ff
Fix local tests
hugovk Apr 6, 2024
31c6647
Use red divider for failed test
hugovk Apr 7, 2024
9be3d81
Fix local tests
hugovk Apr 7, 2024
e4ff3e3
Less red
hugovk Apr 7, 2024
b62500a
Revert unnecessary changes
hugovk Apr 7, 2024
eb4f8dc
Move colour tests to test__colorize.py
hugovk Apr 7, 2024
976bfb4
Refactor asserts
hugovk Apr 7, 2024
ad7a946
Add missing captured_output to test.support's __all__ to fix IDE warning
hugovk Apr 7, 2024
796e9f2
Only move test_colorized_detection_checks_for_environment_variables f…
hugovk Apr 7, 2024
99d4d0c
Apply suggestions from code review
hugovk Apr 7, 2024
95b9831
Use unittest's enterContext
hugovk Apr 7, 2024
d5417b4
Merge remote-tracking branch 'upstream/main' into doctest-tidy-output…
hugovk Apr 16, 2024
ece3ce0
Keep colorize functionality in traceback module for now
hugovk Apr 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Remove underscores from members of an underscored module
  • Loading branch information
hugovk committed Apr 6, 2024
commit 39780cb079fabc629d5afd69f2e3159983d01574
2 changes: 1 addition & 1 deletion Lib/_colorize.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def can_colorize():
return True
if "NO_COLOR" in os.environ:
return False
if not _COLORIZE:
if not COLORIZE:
return False
if "FORCE_COLOR" in os.environ:
return True
Expand Down
22 changes: 11 additions & 11 deletions Lib/doctest.py
Original file line number Diff line number Diff line change
Expand Up @@ -1193,8 +1193,8 @@ class DocTestRunner:
The `run` method is used to process a single DocTest case. It
returns a TestResults instance.

>>> save_colorize = _colorize._COLORIZE
>>> _colorize._COLORIZE = False
>>> save_colorize = _colorize.COLORIZE
>>> _colorize.COLORIZE = False

>>> tests = DocTestFinder().find(_TestClass)
>>> runner = DocTestRunner(verbose=False)
Expand Down Expand Up @@ -1247,7 +1247,7 @@ class DocTestRunner:
overriding the methods `report_start`, `report_success`,
`report_unexpected_exception`, and `report_failure`.

>>> _colorize._COLORIZE = save_colorize
>>> _colorize.COLORIZE = save_colorize
"""
# This divider string is used to separate failure messages, and to
# separate sections of the summary.
Expand Down Expand Up @@ -1593,7 +1593,7 @@ def summarize(self, verbose=None):
summary is. If the verbosity is not specified, then the
DocTestRunner's verbosity is used.
"""
from _colorize import _ANSIColors, _can_colorize
from _colorize import ANSIColors, can_colorize
Comment thread
AlexWaygood marked this conversation as resolved.
Outdated

if verbose is None:
verbose = self._verbose
Expand All @@ -1614,13 +1614,13 @@ def summarize(self, verbose=None):
else:
failed.append((name, (failures, tries, skips)))

if _can_colorize():
bold_green = _ANSIColors.BOLD_GREEN
bold_red = _ANSIColors.BOLD_RED
green = _ANSIColors.GREEN
red = _ANSIColors.RED
reset = _ANSIColors.RESET
yellow = _ANSIColors.YELLOW
if can_colorize():
bold_green = ANSIColors.BOLD_GREEN
bold_red = ANSIColors.BOLD_RED
green = ANSIColors.GREEN
red = ANSIColors.RED
reset = ANSIColors.RESET
yellow = ANSIColors.YELLOW
else:
bold_green = ""
bold_red = ""
Expand Down
6 changes: 3 additions & 3 deletions Lib/test/test_doctest/test_doctest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2657,8 +2657,8 @@ def test_testfile(): r"""

We don't want colour or `-v` in sys.argv for these tests.
Comment thread
AlexWaygood marked this conversation as resolved.
Outdated

>>> save_colorize = _colorize._COLORIZE
>>> _colorize._COLORIZE = False
>>> save_colorize = _colorize.COLORIZE
>>> _colorize.COLORIZE = False
>>> save_argv = sys.argv
>>> if '-v' in sys.argv:
... sys.argv = [arg for arg in save_argv if arg != '-v']
Expand Down Expand Up @@ -2825,7 +2825,7 @@ def test_testfile(): r"""
TestResults(failed=0, attempted=2)
>>> doctest.master = None # Reset master.
>>> sys.argv = save_argv
>>> _colorize._COLORIZE = save_colorize
>>> _colorize.COLORIZE = save_colorize
"""


Expand Down
6 changes: 3 additions & 3 deletions Lib/test/test_doctest/test_doctest2.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,12 @@ def clsm(cls, val):
class Test(unittest.TestCase):
def setUp(self):
super().setUp()
self.colorize = _colorize._COLORIZE
_colorize._COLORIZE = False
self.colorize = _colorize.COLORIZE
_colorize.COLORIZE = False

def tearDown(self):
super().tearDown()
_colorize._COLORIZE = self.colorize
_colorize.COLORIZE = self.colorize

def test_testmod(self):
import doctest
Expand Down
52 changes: 26 additions & 26 deletions Lib/test/test_traceback.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@ class TracebackCases(unittest.TestCase):
# formatting of SyntaxErrors works based on changes for 2.1.
def setUp(self):
super().setUp()
self.colorize = _colorize._COLORIZE
_colorize._COLORIZE = False
self.colorize = _colorize.COLORIZE
_colorize.COLORIZE = False

def tearDown(self):
super().tearDown()
_colorize._COLORIZE = self.colorize
_colorize.COLORIZE = self.colorize

def get_exception_format(self, func, exc):
try:
Expand Down Expand Up @@ -4293,9 +4293,9 @@ def bar():
e, capture_locals=True
)
lines = "".join(exc.format(colorize=True))
red = _colorize._ANSIColors.RED
boldr = _colorize._ANSIColors.BOLD_RED
reset = _colorize._ANSIColors.RESET
red = _colorize.ANSIColors.RED
boldr = _colorize.ANSIColors.BOLD_RED
reset = _colorize.ANSIColors.RESET
self.assertIn("y = " + red + "x['a']['b']" + reset + boldr + "['c']" + reset, lines)
self.assertIn("return " + red + "foo" + reset + boldr + "(1,2,3,4)" + reset, lines)
self.assertIn("return " + red + "baz" + reset + boldr + "(1," + reset, lines)
Expand All @@ -4311,11 +4311,11 @@ def test_colorized_syntax_error(self):
e, capture_locals=True
)
actual = "".join(exc.format(colorize=True))
red = _colorize._ANSIColors.RED
magenta = _colorize._ANSIColors.MAGENTA
boldm = _colorize._ANSIColors.BOLD_MAGENTA
boldr = _colorize._ANSIColors.BOLD_RED
reset = _colorize._ANSIColors.RESET
red = _colorize.ANSIColors.RED
magenta = _colorize.ANSIColors.MAGENTA
boldm = _colorize.ANSIColors.BOLD_MAGENTA
boldr = _colorize.ANSIColors.BOLD_RED
reset = _colorize.ANSIColors.RESET
expected = "".join([
f' File {magenta}"<string>"{reset}, line {magenta}1{reset}\n',
f' a {boldr}${reset} b\n',
Expand All @@ -4334,15 +4334,15 @@ def foo():
self.fail("No exception thrown.")
except Exception as e:
with captured_output("stderr") as tbstderr:
with unittest.mock.patch('_colorize._can_colorize', return_value=True):
with unittest.mock.patch('_colorize.can_colorize', return_value=True):
exception_print(e)
actual = tbstderr.getvalue().splitlines()

red = _colorize._ANSIColors.RED
boldr = _colorize._ANSIColors.BOLD_RED
magenta = _colorize._ANSIColors.MAGENTA
boldm = _colorize._ANSIColors.BOLD_MAGENTA
reset = _colorize._ANSIColors.RESET
red = _colorize.ANSIColors.RED
boldr = _colorize.ANSIColors.BOLD_RED
magenta = _colorize.ANSIColors.MAGENTA
boldm = _colorize.ANSIColors.BOLD_MAGENTA
reset = _colorize.ANSIColors.RESET
lno_foo = foo.__code__.co_firstlineno
expected = ['Traceback (most recent call last):',
f' File {magenta}"{__file__}"{reset}, '
Expand All @@ -4365,23 +4365,23 @@ def test_colorized_detection_checks_for_environment_variables(self):
with unittest.mock.patch("os.isatty") as isatty_mock:
isatty_mock.return_value = True
with unittest.mock.patch("os.environ", {'TERM': 'dumb'}):
self.assertEqual(_colorize._can_colorize(), False)
self.assertEqual(_colorize.can_colorize(), False)
Comment thread
AlexWaygood marked this conversation as resolved.
Outdated
with unittest.mock.patch("os.environ", {'PYTHON_COLORS': '1'}):
self.assertEqual(_colorize._can_colorize(), True)
self.assertEqual(_colorize.can_colorize(), True)
with unittest.mock.patch("os.environ", {'PYTHON_COLORS': '0'}):
self.assertEqual(_colorize._can_colorize(), False)
self.assertEqual(_colorize.can_colorize(), False)
with unittest.mock.patch("os.environ", {'NO_COLOR': '1'}):
self.assertEqual(_colorize._can_colorize(), False)
self.assertEqual(_colorize.can_colorize(), False)
with unittest.mock.patch("os.environ", {'NO_COLOR': '1', "PYTHON_COLORS": '1'}):
self.assertEqual(_colorize._can_colorize(), True)
self.assertEqual(_colorize.can_colorize(), True)
with unittest.mock.patch("os.environ", {'FORCE_COLOR': '1'}):
self.assertEqual(_colorize._can_colorize(), True)
self.assertEqual(_colorize.can_colorize(), True)
with unittest.mock.patch("os.environ", {'FORCE_COLOR': '1', 'NO_COLOR': '1'}):
self.assertEqual(_colorize._can_colorize(), False)
self.assertEqual(_colorize.can_colorize(), False)
with unittest.mock.patch("os.environ", {'FORCE_COLOR': '1', "PYTHON_COLORS": '0'}):
self.assertEqual(_colorize._can_colorize(), False)
self.assertEqual(_colorize.can_colorize(), False)
isatty_mock.return_value = False
self.assertEqual(_colorize._can_colorize(), False)
self.assertEqual(_colorize.can_colorize(), False)


if __name__ == "__main__":
Expand Down
52 changes: 26 additions & 26 deletions Lib/traceback.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import warnings
from contextlib import suppress

from _colorize import _ANSIColors
from _colorize import ANSIColors

__all__ = ['extract_stack', 'extract_tb', 'format_exception',
'format_exception_only', 'format_list', 'format_stack',
Expand Down Expand Up @@ -134,10 +134,10 @@ def print_exception(exc, /, value=_sentinel, tb=_sentinel, limit=None, \


def _print_exception_bltin(exc, /):
from _colorize import _can_colorize
from _colorize import can_colorize
Comment thread
AlexWaygood marked this conversation as resolved.
Outdated

file = sys.stderr if sys.stderr is not None else sys.__stderr__
colorize = _can_colorize()
colorize = can_colorize()
return print_exception(exc, limit=BUILTIN_EXCEPTION_LIMIT, file=file, colorize=colorize)


Expand Down Expand Up @@ -184,9 +184,9 @@ def _format_final_exc_line(etype, value, *, insert_final_newline=True, colorize=
end_char = "\n" if insert_final_newline else ""
if colorize:
if value is None or not valuestr:
line = f"{_ANSIColors.BOLD_MAGENTA}{etype}{_ANSIColors.RESET}{end_char}"
line = f"{ANSIColors.BOLD_MAGENTA}{etype}{ANSIColors.RESET}{end_char}"
else:
line = f"{_ANSIColors.BOLD_MAGENTA}{etype}{_ANSIColors.RESET}: {_ANSIColors.MAGENTA}{valuestr}{_ANSIColors.RESET}{end_char}"
line = f"{ANSIColors.BOLD_MAGENTA}{etype}{ANSIColors.RESET}: {ANSIColors.MAGENTA}{valuestr}{ANSIColors.RESET}{end_char}"
else:
if value is None or not valuestr:
line = f"{etype}{end_char}"
Expand Down Expand Up @@ -523,15 +523,15 @@ def format_frame_summary(self, frame_summary, **kwargs):
filename = "<stdin>"
if colorize:
row.append(' File {}"{}"{}, line {}{}{}, in {}{}{}\n'.format(
_ANSIColors.MAGENTA,
ANSIColors.MAGENTA,
filename,
_ANSIColors.RESET,
_ANSIColors.MAGENTA,
ANSIColors.RESET,
ANSIColors.MAGENTA,
frame_summary.lineno,
_ANSIColors.RESET,
_ANSIColors.MAGENTA,
ANSIColors.RESET,
ANSIColors.MAGENTA,
frame_summary.name,
_ANSIColors.RESET,
ANSIColors.RESET,
)
)
else:
Expand Down Expand Up @@ -658,11 +658,11 @@ def output_line(lineno):
for color, group in itertools.groupby(itertools.zip_longest(line, carets, fillvalue=""), key=lambda x: x[1]):
caret_group = list(group)
if color == "^":
colorized_line_parts.append(_ANSIColors.BOLD_RED + "".join(char for char, _ in caret_group) + _ANSIColors.RESET)
colorized_carets_parts.append(_ANSIColors.BOLD_RED + "".join(caret for _, caret in caret_group) + _ANSIColors.RESET)
colorized_line_parts.append(ANSIColors.BOLD_RED + "".join(char for char, _ in caret_group) + ANSIColors.RESET)
colorized_carets_parts.append(ANSIColors.BOLD_RED + "".join(caret for _, caret in caret_group) + ANSIColors.RESET)
elif color == "~":
colorized_line_parts.append(_ANSIColors.RED + "".join(char for char, _ in caret_group) + _ANSIColors.RESET)
colorized_carets_parts.append(_ANSIColors.RED + "".join(caret for _, caret in caret_group) + _ANSIColors.RESET)
colorized_line_parts.append(ANSIColors.RED + "".join(char for char, _ in caret_group) + ANSIColors.RESET)
colorized_carets_parts.append(ANSIColors.RED + "".join(caret for _, caret in caret_group) + ANSIColors.RESET)
else:
colorized_line_parts.append("".join(char for char, _ in caret_group))
colorized_carets_parts.append("".join(caret for _, caret in caret_group))
Expand Down Expand Up @@ -1238,12 +1238,12 @@ def _format_syntax_error(self, stype, **kwargs):
if self.lineno is not None:
if colorize:
yield ' File {}"{}"{}, line {}{}{}\n'.format(
_ANSIColors.MAGENTA,
ANSIColors.MAGENTA,
self.filename or "<string>",
_ANSIColors.RESET,
_ANSIColors.MAGENTA,
ANSIColors.RESET,
ANSIColors.MAGENTA,
self.lineno,
_ANSIColors.RESET,
ANSIColors.RESET,
)
else:
yield ' File "{}", line {}\n'.format(
Expand Down Expand Up @@ -1283,11 +1283,11 @@ def _format_syntax_error(self, stype, **kwargs):
# colorize from colno to end_colno
ltext = (
ltext[:colno] +
_ANSIColors.BOLD_RED + ltext[colno:end_colno] + _ANSIColors.RESET +
ANSIColors.BOLD_RED + ltext[colno:end_colno] + ANSIColors.RESET +
ltext[end_colno:]
)
start_color = _ANSIColors.BOLD_RED
end_color = _ANSIColors.RESET
start_color = ANSIColors.BOLD_RED
end_color = ANSIColors.RESET
yield ' {}\n'.format(ltext)
yield ' {}{}{}{}\n'.format(
"".join(caretspace),
Expand All @@ -1300,12 +1300,12 @@ def _format_syntax_error(self, stype, **kwargs):
msg = self.msg or "<no detail available>"
if colorize:
yield "{}{}{}: {}{}{}{}\n".format(
_ANSIColors.BOLD_MAGENTA,
ANSIColors.BOLD_MAGENTA,
stype,
_ANSIColors.RESET,
_ANSIColors.MAGENTA,
ANSIColors.RESET,
ANSIColors.MAGENTA,
msg,
_ANSIColors.RESET,
ANSIColors.RESET,
filename_suffix)
else:
yield "{}: {}{}\n".format(stype, msg, filename_suffix)
Expand Down