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 qutebrowser.utils import log
|
||||||
|
|
||||||
|
from PyQt5.QtCore import qWarning
|
||||||
|
|
||||||
|
|
||||||
class BaseTest(unittest.TestCase):
|
class BaseTest(unittest.TestCase):
|
||||||
|
|
||||||
@ -219,5 +221,32 @@ class InitLogTests(BaseTest):
|
|||||||
log.init_log(self.args)
|
log.init_log(self.args)
|
||||||
sys.stderr = old_stderr
|
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__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
@ -308,6 +308,36 @@ def qt_message_handler(msg_type, context, msg):
|
|||||||
qt.handle(record)
|
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):
|
class LogFilter(logging.Filter):
|
||||||
|
|
||||||
"""Filter to filter log records based on the commandline argument.
|
"""Filter to filter log records based on the commandline argument.
|
||||||
|
Loading…
Reference in New Issue
Block a user