From 30570a5cad1a3e7f648f066b4a1df8158d6b1189 Mon Sep 17 00:00:00 2001 From: Philipp Albrecht Date: Mon, 10 Jul 2023 09:07:10 +0200 Subject: Move disable_qt_msghandler() to qtlog --- qutebrowser/browser/network/pac.py | 4 ++-- .../browser/webkit/network/networkmanager.py | 4 ++-- qutebrowser/misc/httpclient.py | 4 ++-- qutebrowser/utils/log.py | 26 +-------------------- qutebrowser/utils/qtlog.py | 27 +++++++++++++++++++++- 5 files changed, 33 insertions(+), 32 deletions(-) diff --git a/qutebrowser/browser/network/pac.py b/qutebrowser/browser/network/pac.py index 54c1195af..162e1c5d0 100644 --- a/qutebrowser/browser/network/pac.py +++ b/qutebrowser/browser/network/pac.py @@ -28,7 +28,7 @@ from qutebrowser.qt.network import (QNetworkProxy, QNetworkRequest, QHostInfo, QHostAddress) from qutebrowser.qt.qml import QJSEngine, QJSValue -from qutebrowser.utils import log, utils, qtutils, resources, urlutils +from qutebrowser.utils import log, qtlog, utils, qtutils, resources, urlutils class ParseProxyError(Exception): @@ -258,7 +258,7 @@ class PACFetcher(QObject): url.setScheme(url.scheme()[len(pac_prefix):]) self._pac_url = url - with log.disable_qt_msghandler(): + with qtlog.disable_qt_msghandler(): # WORKAROUND for a hang when messages are printed, see our # NetworkAccessManager subclass for details. self._manager: Optional[QNetworkAccessManager] = QNetworkAccessManager() diff --git a/qutebrowser/browser/webkit/network/networkmanager.py b/qutebrowser/browser/webkit/network/networkmanager.py index 91e609456..4c1c767ec 100644 --- a/qutebrowser/browser/webkit/network/networkmanager.py +++ b/qutebrowser/browser/webkit/network/networkmanager.py @@ -28,7 +28,7 @@ from qutebrowser.qt.network import (QNetworkAccessManager, QNetworkReply, QSslCo from qutebrowser.config import config from qutebrowser.utils import (message, log, usertypes, utils, objreg, - urlutils, debug) + urlutils, debug, qtlog) from qutebrowser.browser import shared from qutebrowser.browser.network import proxy as proxymod from qutebrowser.extensions import interceptors @@ -156,7 +156,7 @@ class NetworkManager(QNetworkAccessManager): def __init__(self, *, win_id, tab_id, private, parent=None): log.init.debug("Initializing NetworkManager") - with log.disable_qt_msghandler(): + with qtlog.disable_qt_msghandler(): # WORKAROUND for a hang when a message is printed - See: # https://www.riverbankcomputing.com/pipermail/pyqt/2014-November/035045.html # diff --git a/qutebrowser/misc/httpclient.py b/qutebrowser/misc/httpclient.py index 2bb152b03..45d491996 100644 --- a/qutebrowser/misc/httpclient.py +++ b/qutebrowser/misc/httpclient.py @@ -25,7 +25,7 @@ from qutebrowser.qt.core import pyqtSignal, QObject, QTimer from qutebrowser.qt.network import (QNetworkAccessManager, QNetworkRequest, QNetworkReply) -from qutebrowser.utils import log +from qutebrowser.utils import qtlog class HTTPRequest(QNetworkRequest): @@ -59,7 +59,7 @@ class HTTPClient(QObject): def __init__(self, parent=None): super().__init__(parent) - with log.disable_qt_msghandler(): + with qtlog.disable_qt_msghandler(): # WORKAROUND for a hang when messages are printed, see our # NetworkAccessManager subclass for details. self._nam = QNetworkAccessManager(self) diff --git a/qutebrowser/utils/log.py b/qutebrowser/utils/log.py index e5894dda8..de6cbb328 100644 --- a/qutebrowser/utils/log.py +++ b/qutebrowser/utils/log.py @@ -31,10 +31,9 @@ import json import inspect import argparse from typing import (TYPE_CHECKING, Any, Iterator, Mapping, MutableSequence, - Optional, Set, Tuple, Union, TextIO, Literal, cast, Callable) + Optional, Set, Tuple, Union, TextIO, Literal, cast) from qutebrowser.qt import core as qtcore -from qutebrowser.qt import machinery # Optional imports try: import colorama @@ -226,29 +225,6 @@ def _init_py_warnings() -> None: r"is deprecated.*") -@contextlib.contextmanager -def disable_qt_msghandler() -> Iterator[None]: - """Contextmanager which temporarily disables the Qt message handler.""" - old_handler = qtcore.qInstallMessageHandler(None) - if machinery.IS_QT6: - # cast str to Optional[str] to be compatible with PyQt6 type hints for - # qInstallMessageHandler - old_handler = cast( - Optional[ - Callable[ - [qtcore.QtMsgType, qtcore.QMessageLogContext, Optional[str]], - None - ] - ], - old_handler, - ) - - try: - yield - finally: - qtcore.qInstallMessageHandler(old_handler) - - @contextlib.contextmanager def py_warning_filter( action: diff --git a/qutebrowser/utils/qtlog.py b/qutebrowser/utils/qtlog.py index 2bf10f07b..8a8b7511c 100644 --- a/qutebrowser/utils/qtlog.py +++ b/qutebrowser/utils/qtlog.py @@ -17,10 +17,35 @@ """Loggers and utilities related to Qt logging.""" +import contextlib +from typing import Iterator, Optional, Callable, cast -from qutebrowser.qt import core as qtcore +from qutebrowser.qt import core as qtcore, machinery @qtcore.pyqtSlot() def shutdown_log() -> None: qtcore.qInstallMessageHandler(None) + + +@contextlib.contextmanager +def disable_qt_msghandler() -> Iterator[None]: + """Contextmanager which temporarily disables the Qt message handler.""" + old_handler = qtcore.qInstallMessageHandler(None) + if machinery.IS_QT6: + # cast str to Optional[str] to be compatible with PyQt6 type hints for + # qInstallMessageHandler + old_handler = cast( + Optional[ + Callable[ + [qtcore.QtMsgType, qtcore.QMessageLogContext, Optional[str]], + None + ] + ], + old_handler, + ) + + try: + yield + finally: + qtcore.qInstallMessageHandler(old_handler) -- cgit v1.2.3-54-g00ecf