diff options
author | Florian Bruhin <git@the-compiler.org> | 2015-03-06 16:32:26 +0100 |
---|---|---|
committer | Florian Bruhin <git@the-compiler.org> | 2015-03-19 06:21:08 +0100 |
commit | 05f5083c9c5b1c6727e76e9880daa2cabc01f570 (patch) | |
tree | 059b3b26f47f0aeb7d3b9342739d2a3637c36374 | |
parent | 1251c28509198b3d6f24e1daad978c9ac655145a (diff) | |
download | qutebrowser-05f5083c9c5b1c6727e76e9880daa2cabc01f570.tar.gz qutebrowser-05f5083c9c5b1c6727e76e9880daa2cabc01f570.zip |
log.utils: Add Qt warning filter context manager.
-rw-r--r-- | qutebrowser/test/utils/test_log.py | 29 | ||||
-rw-r--r-- | qutebrowser/utils/log.py | 30 |
2 files changed, 59 insertions, 0 deletions
diff --git a/qutebrowser/test/utils/test_log.py b/qutebrowser/test/utils/test_log.py index b5a81e2e3..8b984bb1f 100644 --- a/qutebrowser/test/utils/test_log.py +++ b/qutebrowser/test/utils/test_log.py @@ -28,6 +28,8 @@ import sys from qutebrowser.utils import log +from PyQt5.QtCore import qWarning + class BaseTest(unittest.TestCase): @@ -208,5 +210,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() diff --git a/qutebrowser/utils/log.py b/qutebrowser/utils/log.py index 0d50575fb..5abe8e548 100644 --- a/qutebrowser/utils/log.py +++ b/qutebrowser/utils/log.py @@ -298,6 +298,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. |