summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2021-03-29 10:54:25 +0200
committerFlorian Bruhin <me@the-compiler.org>2021-03-29 23:43:31 +0200
commit25374d6743d3ad62843f86dc8b4f07e666601327 (patch)
tree6de21731611ff806b505a0ea3748e4c023783983
parent143db4f9d3cb4bd4f6952c89f921ce6d277c9533 (diff)
downloadqutebrowser-25374d6743d3ad62843f86dc8b4f07e666601327.tar.gz
qutebrowser-25374d6743d3ad62843f86dc8b4f07e666601327.zip
Split QtWebEngine version handling into different methods
Preparation for #6337 (cherry picked from commit 028e7b65692acd6269dfffcdf6632d5368efbfa9)
-rw-r--r--qutebrowser/utils/version.py48
1 files changed, 34 insertions, 14 deletions
diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py
index a1b8e6c72..0aa344190 100644
--- a/qutebrowser/utils/version.py
+++ b/qutebrowser/utils/version.py
@@ -639,29 +639,51 @@ class WebEngineVersions:
return cls._CHROMIUM_VERSIONS.get(minor_version)
@classmethod
- def from_pyqt(
- cls,
- pyqt_webengine_version: str,
- source: str = 'PyQt',
- ) -> 'WebEngineVersions':
+ def from_importlib(cls, pyqt_webengine_qt_version: str) -> 'WebEngineVersions':
+ """Get the versions based on the PyQtWebEngine version.
+
+ This is called if we don't want to fully initialize QtWebEngine (so
+ from_ua isn't possible), we're not on Linux (or ELF parsing failed), but we have
+ a PyQtWebEngine-Qt{,5} package from PyPI, so we could query its exact version.
+ """
+ parsed = utils.VersionNumber.parse(pyqt_webengine_qt_version)
+ return cls(
+ webengine=parsed,
+ chromium=cls._infer_chromium_version(parsed),
+ source='importlib',
+ )
+
+ @classmethod
+ def from_pyqt(cls, pyqt_webengine_version: str) -> 'WebEngineVersions':
"""Get the versions based on the PyQtWebEngine version.
This is the "last resort" if we don't want to fully initialize QtWebEngine (so
- from_ua isn't possible) and we're not on Linux (or ELF parsing failed).
+ from_ua isn't possible), we're not on Linux (or ELF parsing failed), and
+ PyQtWebEngine-Qt{5,} isn't available from PyPI.
Here, we assume that the PyQtWebEngine version is the same as the QtWebEngine
version, and infer the Chromium version from that. This assumption isn't
generally true, but good enough for some scenarios, especially the prebuilt
Windows/macOS releases.
-
- Note that we only can get the PyQtWebEngine version with PyQt 5.13 or newer.
- With Qt 5.12, we instead rely on qVersion().
"""
parsed = utils.VersionNumber.parse(pyqt_webengine_version)
return cls(
webengine=parsed,
chromium=cls._infer_chromium_version(parsed),
- source=source,
+ source='PyQt',
+ )
+
+ @classmethod
+ def from_qt(cls, qt_version: str) -> 'WebEngineVersions':
+ """Get the versions based on the Qt version.
+
+ This is called if we don't have PYQT_WEBENGINE_VERSION, i.e. with PyQt 5.12.
+ """
+ parsed = utils.VersionNumber.parse(qt_version)
+ return cls(
+ webengine=parsed,
+ chromium=cls._infer_chromium_version(parsed),
+ source='Qt',
)
@@ -698,14 +720,12 @@ def qtwebengine_versions(avoid_init: bool = False) -> WebEngineVersions:
pyqt_webengine_qt_version = _get_pyqt_webengine_qt_version()
if pyqt_webengine_qt_version is not None:
- return WebEngineVersions.from_pyqt(
- pyqt_webengine_qt_version, source='importlib')
+ return WebEngineVersions.from_importlib(pyqt_webengine_qt_version)
if PYQT_WEBENGINE_VERSION_STR is not None:
return WebEngineVersions.from_pyqt(PYQT_WEBENGINE_VERSION_STR)
- return WebEngineVersions.from_pyqt( # type: ignore[unreachable]
- qVersion(), source='Qt')
+ return WebEngineVersions.from_qt(qVersion()) # type: ignore[unreachable]
def _backend() -> str: