diff options
author | Florian Bruhin <me@the-compiler.org> | 2022-05-19 15:12:41 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2022-06-22 17:41:12 +0200 |
commit | e3aad763dfe0b8f6c8f29df35977e8ab8de8f6cb (patch) | |
tree | a7e6fdb3c2b7e35f16a383da0233edef8699db7e | |
parent | c2d9fe0d73a167b7bb3bd11948610fea73d348b5 (diff) | |
download | qutebrowser-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.py | 14 | ||||
-rw-r--r-- | tests/unit/utils/test_version.py | 46 |
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 |