log.utils: Add Qt warning filter context manager.
This commit is contained in:
parent
2c9b5f24fc
commit
3e5b9a4a4a
@ -29,6 +29,8 @@ from unittest import mock
|
||||
|
||||
from qutebrowser.utils import log
|
||||
|
||||
from PyQt5.QtCore import qWarning
|
||||
|
||||
|
||||
class BaseTest(unittest.TestCase):
|
||||
|
||||
@ -219,5 +221,32 @@ class InitLogTests(BaseTest):
|
||||
log.init_log(self.args)
|
||||
sys.stderr = old_stderr
|
||||
|
||||
|
||||
class HideQtWarningTests(BaseTest):
|
||||
|
||||
"""Tests for hide_qt_warning/QtWarningFilter."""
|
||||
|
||||
def test_unfiltered(self):
|
||||
"""Test a message which is not filtered."""
|
||||
with log.hide_qt_warning("World", logger='qt-tests'):
|
||||
with self.assertLogs('qt-tests', logging.WARNING):
|
||||
qWarning("Hello World")
|
||||
|
||||
def test_filtered_exact(self):
|
||||
"""Test a message which is filtered (exact match)."""
|
||||
with log.hide_qt_warning("Hello", logger='qt-tests'):
|
||||
qWarning("Hello")
|
||||
|
||||
def test_filtered_start(self):
|
||||
"""Test a message which is filtered (match at line start)."""
|
||||
with log.hide_qt_warning("Hello", logger='qt-tests'):
|
||||
qWarning("Hello World")
|
||||
|
||||
def test_filtered_whitespace(self):
|
||||
"""Test a message which is filtered (match with whitespace)."""
|
||||
with log.hide_qt_warning("Hello", logger='qt-tests'):
|
||||
qWarning(" Hello World ")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
@ -308,6 +308,36 @@ def qt_message_handler(msg_type, context, msg):
|
||||
qt.handle(record)
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def hide_qt_warning(pattern, logger='qt'):
|
||||
"""Hide Qt warnings matching the given regex."""
|
||||
log_filter = QtWarningFilter(pattern)
|
||||
logger_obj = logging.getLogger(logger)
|
||||
logger_obj.addFilter(log_filter)
|
||||
yield
|
||||
logger_obj.removeFilter(log_filter)
|
||||
|
||||
|
||||
class QtWarningFilter(logging.Filter):
|
||||
|
||||
"""Filter to filter Qt warnings.
|
||||
|
||||
Attributes:
|
||||
_pattern: The start of the message.
|
||||
"""
|
||||
|
||||
def __init__(self, pattern):
|
||||
super().__init__()
|
||||
self._pattern = pattern
|
||||
|
||||
def filter(self, record):
|
||||
"""Determine if the specified record is to be logged."""
|
||||
if record.msg.strip().startswith(self._pattern):
|
||||
return False # filter
|
||||
else:
|
||||
return True # log
|
||||
|
||||
|
||||
class LogFilter(logging.Filter):
|
||||
|
||||
"""Filter to filter log records based on the commandline argument.
|
||||
|
Loading…
Reference in New Issue
Block a user