From e2b00c349c07e315260314d5ad8d9a0b2f29a625 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Sun, 17 Apr 2022 17:00:47 +1200 Subject: Adjust backend conditional imports for new wrapper Partially corrects "Manual fixups for ImportErrors lost in rewrite" Instead of looking for import errors looks for attributes being None. have conditional defaults. In qlocalsocket_mock I had to move the original attribute gathering to even earlier otherwise we were just picking up mocks. --- qutebrowser/config/qtargs.py | 7 ++----- qutebrowser/utils/qtutils.py | 8 +++++--- qutebrowser/utils/version.py | 8 +++++--- tests/helpers/fixtures.py | 5 ++--- tests/unit/misc/test_ipc.py | 17 +++++++++++++---- tests/unit/utils/test_standarddir.py | 5 ++++- tests/unit/utils/test_version.py | 4 ++-- 7 files changed, 33 insertions(+), 21 deletions(-) diff --git a/qutebrowser/config/qtargs.py b/qutebrowser/config/qtargs.py index 540f334df..01a5c1d97 100644 --- a/qutebrowser/config/qtargs.py +++ b/qutebrowser/config/qtargs.py @@ -28,7 +28,7 @@ from typing import Any, Dict, Iterator, List, Optional, Sequence, Tuple from qutebrowser.config import config from qutebrowser.misc import objects from qutebrowser.utils import usertypes, qtutils, utils, log, version -from qutebrowser.qt import QtCore +from qutebrowser.qt import QtCore, QtWebEngine _ENABLE_FEATURES = '--enable-features=' @@ -60,10 +60,7 @@ def qt_args(namespace: argparse.Namespace) -> List[str]: assert objects.backend == usertypes.Backend.QtWebKit, objects.backend return argv - try: - # pylint: disable=unused-import - from qutebrowser.browser.webengine import webenginesettings - except ImportError: + if not QtWebEngine: # This code runs before a QApplication is available, so before # backendproblem.py is run to actually inform the user of the missing # backend. Thus, we could end up in a situation where we're here, but diff --git a/qutebrowser/utils/qtutils.py b/qutebrowser/utils/qtutils.py index bf109095e..9b0186b55 100644 --- a/qutebrowser/utils/qtutils.py +++ b/qutebrowser/utils/qtutils.py @@ -34,7 +34,9 @@ import contextlib from typing import (Any, AnyStr, TYPE_CHECKING, BinaryIO, IO, Iterator, Optional, Union, Tuple, cast) from qutebrowser.qt import QtWebKit, QtGui -if not QtWebKit: +if QtWebKit: + qWebKitVersion = QtWebKit.qWebKitVersion # noqa: N816 +else: qWebKitVersion = None # type: ignore[assignment] # noqa: N816 if TYPE_CHECKING: from qutebrowser.qt import QWebHistory @@ -111,8 +113,8 @@ MAX_WORLD_ID = 256 def is_new_qtwebkit() -> bool: """Check if the given version is a new QtWebKit.""" - assert QtWebKit.qWebKitVersion is not None - return (utils.VersionNumber.parse(QtWebKit.qWebKitVersion()) > + assert qWebKitVersion is not None + return (utils.VersionNumber.parse(qWebKitVersion()) > utils.VersionNumber.parse('538.1')) diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py index 18a6d7e27..7e819e9ab 100644 --- a/qutebrowser/utils/version.py +++ b/qutebrowser/utils/version.py @@ -38,8 +38,10 @@ from typing import (Mapping, Optional, Sequence, Tuple, ClassVar, Dict, cast, TYPE_CHECKING) from qutebrowser.qt import QtWidgets, QtWebKit, QtWebEngine, QtNetwork -if not QtWebKit: - qWebKitVersion = None +if QtWebKit: + qWebKitVersion = QtWebKit.qWebKitVersion # noqa: N816 +else: + qWebKitVersion = None # noqa: N816 if QtWebEngine: PYQT_WEBENGINE_VERSION_STR = QtWebEngine.PYQT_WEBENGINE_VERSION_STR else: @@ -765,7 +767,7 @@ def qtwebengine_versions(*, avoid_init: bool = False) -> WebEngineVersions: def _backend() -> str: """Get the backend line with relevant information.""" if objects.backend == usertypes.Backend.QtWebKit: - return 'new QtWebKit (WebKit {})'.format(QtWebKit.qWebKitVersion()) + return 'new QtWebKit (WebKit {})'.format(qWebKitVersion()) elif objects.backend == usertypes.Backend.QtWebEngine: return str(qtwebengine_versions( avoid_init='avoid-chromium-init' in objects.debug_flags)) diff --git a/tests/helpers/fixtures.py b/tests/helpers/fixtures.py index d825ea7fc..ebd9dcde2 100644 --- a/tests/helpers/fixtures.py +++ b/tests/helpers/fixtures.py @@ -173,15 +173,14 @@ def greasemonkey_manager(monkeypatch, data_tmpdir, config_tmpdir): @pytest.fixture(scope='session') def testdata_scheme(qapp): - try: + from qutebrowser.qt import QtWebEngine + if QtWebEngine: global _qute_scheme_handler from qutebrowser.browser.webengine import webenginequtescheme webenginequtescheme.init() _qute_scheme_handler = webenginequtescheme.QuteSchemeHandler( parent=qapp) _qute_scheme_handler.install(QtWebEngineWidgets.QWebEngineProfile.defaultProfile()) - except ImportError: - pass @qutescheme.add_handler('testdata') def handler(url): diff --git a/tests/unit/misc/test_ipc.py b/tests/unit/misc/test_ipc.py index 7e0ffb98b..fdd543d2a 100644 --- a/tests/unit/misc/test_ipc.py +++ b/tests/unit/misc/test_ipc.py @@ -661,12 +661,21 @@ class TestSendOrListen: @pytest.fixture def qlocalsocket_mock(self, mocker): + original_errors = { + name: getattr(QtNetwork.QLocalSocket, name) + for name in + [ + 'UnknownSocketError', + 'UnconnectedState', + 'ConnectionRefusedError', + 'ServerNotFoundError', + 'PeerClosedError' + ] + } m = mocker.patch('qutebrowser.misc.ipc.QtNetwork.QLocalSocket', autospec=True) m().errorString.return_value = "Error string" - for name in ['UnknownSocketError', 'UnconnectedState', - 'ConnectionRefusedError', 'ServerNotFoundError', - 'PeerClosedError']: - setattr(m, name, getattr(QtNetwork.QLocalSocket, name)) + for name, error in original_errors.items(): + setattr(m, name, error) return m @pytest.mark.linux(reason="Flaky on Windows and macOS") diff --git a/tests/unit/utils/test_standarddir.py b/tests/unit/utils/test_standarddir.py index e1c0a3f6d..e601f1213 100644 --- a/tests/unit/utils/test_standarddir.py +++ b/tests/unit/utils/test_standarddir.py @@ -471,7 +471,10 @@ def test_no_qapplication(qapp, tmpdir, monkeypatch): sys.path = sys.argv[1:] # make sure we have the same python path - from PyQt5.QtWidgets import QApplication + try: + from PyQt5.QtWidgets import QApplication + except ImportError: + from PyQt6.QtWidgets import QApplication from qutebrowser.utils import standarddir assert QApplication.instance() is None diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py index 929d69d99..3ffb4cdea 100644 --- a/tests/unit/utils/test_version.py +++ b/tests/unit/utils/test_version.py @@ -42,9 +42,9 @@ from qutebrowser.misc import pastebin, objects, elf from qutebrowser.browser import pdfjs from helpers import testutils -try: +if QtWebEngine: from qutebrowser.browser.webengine import webenginesettings -except ImportError: +else: webenginesettings = None -- cgit v1.2.3-54-g00ecf