Skip to content

Commit 1e3fcec

Browse files
committed
enhance support for precision bit in LEVELNAME_FMT_REGEX regex
1 parent 4b6188b commit 1e3fcec

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

changelog/8548.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Introduce fix to handle precision width in ``log-cli-format`` in turn to fix output coloring for certain formats.

src/_pytest/logging.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class ColoredLevelFormatter(logging.Formatter):
5959
logging.DEBUG: {"purple"},
6060
logging.NOTSET: set(),
6161
}
62-
LEVELNAME_FMT_REGEX = re.compile(r"%\(levelname\)([+-.]?\d*[.]?\d*s)")
62+
LEVELNAME_FMT_REGEX = re.compile(r"%\(levelname\)([+-.]?\d*(?:\.\d+)?s)")
6363

6464
def __init__(self, terminalwriter: TerminalWriter, *args, **kwargs) -> None:
6565
super().__init__(*args, **kwargs)

testing/logging/test_formatter.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,37 @@ class option:
3636
assert output == ("dummypath 10 INFO Test Message")
3737

3838

39+
def test_coloredlogformatter_with_width_precision() -> None:
40+
logfmt = "%(filename)-25s %(lineno)4d %(levelname)-8.2s %(message)s"
41+
42+
record = logging.LogRecord(
43+
name="dummy",
44+
level=logging.INFO,
45+
pathname="dummypath",
46+
lineno=10,
47+
msg="Test Message",
48+
args=(),
49+
exc_info=None,
50+
)
51+
52+
class ColorConfig:
53+
class option:
54+
pass
55+
56+
tw = TerminalWriter()
57+
tw.hasmarkup = True
58+
formatter = ColoredLevelFormatter(tw, logfmt)
59+
output = formatter.format(record)
60+
assert output == (
61+
"dummypath 10 \x1b[32mINFO \x1b[0m Test Message"
62+
)
63+
64+
tw.hasmarkup = False
65+
formatter = ColoredLevelFormatter(tw, logfmt)
66+
output = formatter.format(record)
67+
assert output == ("dummypath 10 INFO Test Message")
68+
69+
3970
def test_multiline_message() -> None:
4071
from _pytest.logging import PercentStyleMultiline
4172

0 commit comments

Comments
 (0)