Skip to content

Commit cccffd4

Browse files
committed
Customize displayed records with qt-log-format command line option
1 parent aa2ee36 commit cccffd4

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

pytestqt/_tests/test_logging.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import datetime
12
import pytest
23

34
from pytestqt.qt_compat import qDebug, qWarning, qCritical, QtDebugMsg, \
@@ -83,4 +84,27 @@ def test_types(qtlog):
8384
"""
8485
)
8586
res = testdir.runpytest('--no-qt-log')
86-
res.stdout.fnmatch_lines('*1 passed*')
87+
res.stdout.fnmatch_lines('*1 passed*')
88+
89+
90+
def test_logging_formatting(testdir):
91+
"""
92+
Test custom formatting for logging messages.
93+
94+
:type testdir: _pytest.pytester.TmpTestdir
95+
"""
96+
testdir.makepyfile(
97+
"""
98+
from pytestqt.qt_compat import qWarning
99+
def test_types():
100+
qWarning('this is a WARNING message')
101+
assert 0
102+
"""
103+
)
104+
f = '{rec.type_name} {rec.log_type_name} {rec.when:%Y-%m-%d}: {rec.message}'
105+
res = testdir.runpytest('--qt-log-format={}'.format(f))
106+
today = '{0:%Y-%m-%d}'.format(datetime.datetime.now())
107+
res.stdout.fnmatch_lines([
108+
'*-- Captured Qt messages --*',
109+
'QtWarningMsg WARNING {0}: this is a WARNING message*'.format(today),
110+
])

pytestqt/plugin.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import sys
55
import traceback
66
import weakref
7+
import datetime
78

89
import pytest
910

@@ -418,6 +419,8 @@ def pytest_addoption(parser):
418419

419420
parser.addoption('--no-qt-log', dest='qt_log', action='store_false',
420421
default=True)
422+
parser.addoption('--qt-log-format', dest='qt_log_format',
423+
default='{rec.type_name}: {rec.message}')
421424

422425

423426
def pytest_configure(config):
@@ -470,8 +473,9 @@ def pytest_runtest_makereport(self, item, call):
470473
long_repr = getattr(report, 'longrepr', None)
471474
if hasattr(long_repr, 'addsection'):
472475
lines = []
473-
for r in item.qt_log_capture.records:
474-
lines.append('{r.type_name}: {r.message}'.format(r=r))
476+
for rec in item.qt_log_capture.records:
477+
log_format = self.config.getoption('qt_log_format')
478+
lines.append(log_format.format(rec=rec))
475479
if lines:
476480
long_repr.addsection('Captured Qt messages',
477481
'\n'.join(lines))
@@ -519,13 +523,15 @@ class Record(object):
519523
:attr str log_type_name:
520524
type name similar to the logging package, for example ``DEBUG``,
521525
``WARNING``, etc.
526+
:attr datetime.datetime when: when the message was sent
522527
"""
523528

524529
def __init__(self, msg_type, message):
525530
self._type = msg_type
526531
self._message = message
527532
self._type_name = self._get_msg_type_name(msg_type)
528533
self._log_type_name = self._get_log_type_name(msg_type)
534+
self._when = datetime.datetime.now()
529535

530536
@property
531537
def message(self):
@@ -543,6 +549,10 @@ def type_name(self):
543549
def log_type_name(self):
544550
return self._log_type_name
545551

552+
@property
553+
def when(self):
554+
return self._when
555+
546556
@classmethod
547557
def _get_msg_type_name(cls, msg_type):
548558
"""

0 commit comments

Comments
 (0)