summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <git@the-compiler.org>2015-03-06 16:32:26 +0100
committerFlorian Bruhin <git@the-compiler.org>2015-03-19 06:21:08 +0100
commit05f5083c9c5b1c6727e76e9880daa2cabc01f570 (patch)
tree059b3b26f47f0aeb7d3b9342739d2a3637c36374
parent1251c28509198b3d6f24e1daad978c9ac655145a (diff)
downloadqutebrowser-05f5083c9c5b1c6727e76e9880daa2cabc01f570.tar.gz
qutebrowser-05f5083c9c5b1c6727e76e9880daa2cabc01f570.zip
log.utils: Add Qt warning filter context manager.
-rw-r--r--qutebrowser/test/utils/test_log.py29
-rw-r--r--qutebrowser/utils/log.py30
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.