summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2022-05-19 15:12:41 +0200
committerFlorian Bruhin <me@the-compiler.org>2022-06-22 17:41:12 +0200
commite3aad763dfe0b8f6c8f29df35977e8ab8de8f6cb (patch)
treea7e6fdb3c2b7e35f16a383da0233edef8699db7e
parentc2d9fe0d73a167b7bb3bd11948610fea73d348b5 (diff)
downloadqutebrowser-e3aad763dfe0b8f6c8f29df35977e8ab8de8f6cb.tar.gz
qutebrowser-e3aad763dfe0b8f6c8f29df35977e8ab8de8f6cb.zip
qt 6: Fix getting importlib PyQtWebEngine versions
Needed for e.g. Windows and PyQt < 6.3.1
-rw-r--r--qutebrowser/utils/version.py14
-rw-r--r--tests/unit/utils/test_version.py46
2 files changed, 46 insertions, 14 deletions
diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py
index 49bb93a94..a45cb2352 100644
--- a/qutebrowser/utils/version.py
+++ b/qutebrowser/utils/version.py
@@ -37,7 +37,7 @@ import dataclasses
from typing import (Mapping, Optional, Sequence, Tuple, ClassVar, Dict, cast,
TYPE_CHECKING)
-
+from qutebrowser.qt import machinery
from qutebrowser.qt.core import PYQT_VERSION_STR
from qutebrowser.qt.network import QSslSocket
from qutebrowser.qt.gui import QOpenGLContext, QOffscreenSurface
@@ -520,11 +520,17 @@ def _get_pyqt_webengine_qt_version() -> Optional[str]:
log.misc.debug("Neither importlib.metadata nor backport available")
return None
- for suffix in ['Qt5', 'Qt']:
+ names = (
+ ['PyQt6-WebEngine-Qt6']
+ if machinery.IS_QT6 else
+ ['PyQtWebEngine-Qt5', 'PyQtWebEngine-Qt']
+ )
+
+ for name in names:
try:
- return importlib_metadata.version(f'PyQtWebEngine-{suffix}')
+ return importlib_metadata.version(name)
except importlib_metadata.PackageNotFoundError:
- log.misc.debug(f"PyQtWebEngine-{suffix} not found")
+ log.misc.debug(f"{name} not found")
return None
diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py
index 9d32c9691..cded29f26 100644
--- a/tests/unit/utils/test_version.py
+++ b/tests/unit/utils/test_version.py
@@ -1116,7 +1116,7 @@ class TestChromiumVersion:
@pytest.fixture
def importlib_patcher(self, monkeypatch):
"""Patch the importlib module."""
- def _patch(*, qt, qt5):
+ def _patch(*, qt, qt5, qt6):
try:
import importlib.metadata as importlib_metadata
except ImportError:
@@ -1127,8 +1127,10 @@ class TestChromiumVersion:
outcome = qt
elif name == 'PyQtWebEngine-Qt5':
outcome = qt5
+ elif name == 'PyQt6-WebEngine-Qt6':
+ outcome = qt6
else:
- raise utils.Unreachable(outcome)
+ raise utils.Unreachable(name)
if outcome is None:
raise importlib_metadata.PackageNotFoundError(name)
@@ -1140,8 +1142,8 @@ class TestChromiumVersion:
@pytest.fixture
def patch_importlib_no_package(self, importlib_patcher):
- """Simulate importlib not finding PyQtWebEngine-Qt[5]."""
- importlib_patcher(qt=None, qt5=None)
+ """Simulate importlib not finding PyQtWebEngine Qt packages."""
+ importlib_patcher(qt=None, qt5=None, qt6=None)
@pytest.mark.parametrize('patches, sources', [
(['no_api'], ['ELF', 'importlib', 'PyQt', 'Qt']),
@@ -1163,17 +1165,41 @@ class TestChromiumVersion:
versions = version.qtwebengine_versions(avoid_init=True)
assert versions.source in sources
- @pytest.mark.parametrize('qt, qt5, expected', [
- (None, '5.15.4', utils.VersionNumber(5, 15, 4)),
- ('5.15.3', None, utils.VersionNumber(5, 15, 3)),
- ('5.15.3', '5.15.4', utils.VersionNumber(5, 15, 4)), # -Qt5 takes precedence
+ @pytest.mark.parametrize('qt, qt5, qt6, expected', [
+ pytest.param(
+ None, None, '6.3.0',
+ utils.VersionNumber(6, 3),
+ marks=pytest.mark.qt6_only,
+ ),
+ pytest.param(
+ '5.15.3', '5.15.4', '6.3.0',
+ utils.VersionNumber(6, 3),
+ marks=pytest.mark.qt6_only,
+ ),
+
+ pytest.param(
+ None, '5.15.4', None,
+ utils.VersionNumber(5, 15, 4),
+ marks=pytest.mark.qt5_only,
+ ),
+ pytest.param(
+ '5.15.3', None, None,
+ utils.VersionNumber(5, 15, 3),
+ marks=pytest.mark.qt5_only,
+ ),
+ # -Qt5 takes precedence
+ pytest.param(
+ '5.15.3', '5.15.4', None,
+ utils.VersionNumber(5, 15, 4),
+ marks=pytest.mark.qt5_only,
+ ),
])
- def test_importlib(self, qt, qt5, expected, patch_elf_fail, patch_no_api, importlib_patcher):
+ def test_importlib(self, qt, qt5, qt6, expected, patch_elf_fail, patch_no_api, importlib_patcher):
"""Test the importlib version logic with different Qt packages.
With PyQtWebEngine 5.15.4, PyQtWebEngine-Qt was renamed to PyQtWebEngine-Qt5.
"""
- importlib_patcher(qt=qt, qt5=qt5)
+ importlib_patcher(qt=qt, qt5=qt5, qt6=qt6)
versions = version.qtwebengine_versions(avoid_init=True)
assert versions.source == 'importlib'
assert versions.webengine == expected