From 352cb15788ac61a5214a7c07ef753c7e2e48c302 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Sat, 16 Apr 2022 14:57:30 +1200 Subject: Import PyQt modules into qt.py as a wrapper. Import all the PyQt modules that we use into qt.py so that we only have to have a PyQt5/6 conditional in one place. I'm using importlib instead of try/excepts to reduce the amount of duplication and because you can't do `from pyqt import QtCore` when pyqt is a local variable. TODO: * maybe some more conditional imports (for earlyinit stuff like no QSsl support) * adapt places looking for import errors to just importing None now * decide whether being in qt.py is fine or we should move to `qt/__init__.py` --- qutebrowser/qt.py | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/qutebrowser/qt.py b/qutebrowser/qt.py index 5e0f80538..f0ba25cd4 100644 --- a/qutebrowser/qt.py +++ b/qutebrowser/qt.py @@ -19,11 +19,43 @@ """Wrappers around Qt/PyQt code.""" -# pylint: disable=unused-import +# pylint: disable=unused-import,import-error +import importlib + +try: + import PyQt5 as pyqt # noqa: N813 +except ImportError: + import PyQt6 as pyqt # type: ignore[import, no-redef] # noqa: N813 # While upstream recommends using PyQt5.sip ever since PyQt5 5.11, some distributions # still package later versions of PyQt5 with a top-level "sip" rather than "PyQt5.sip". +# pylint: disable=ungrouped-imports try: - from PyQt5 import sip + sip = importlib.import_module(f"{pyqt.__name__}.sip") except ImportError: import sip # type: ignore[import, no-redef] + +QtCore = importlib.import_module(f"{pyqt.__name__}.QtCore") +QtDBus = importlib.import_module(f"{pyqt.__name__}.QtDBus") +QtGui = importlib.import_module(f"{pyqt.__name__}.QtGui") +QtNetwork = importlib.import_module(f"{pyqt.__name__}.QtNetwork") +QtPrintSupport = importlib.import_module(f"{pyqt.__name__}.QtPrintSupport") +QtQml = importlib.import_module(f"{pyqt.__name__}.QtQml") +QtSql = importlib.import_module(f"{pyqt.__name__}.QtSql") +QtWidgets = importlib.import_module(f"{pyqt.__name__}.QtWidgets") + +try: + QtWebEngine = importlib.import_module(f"{pyqt.__name__}.QtWebEngine") + QtWebEngineCore = importlib.import_module(f"{pyqt.__name__}.QtWebEngineCore") + QtWebEngineWidgets = importlib.import_module(f"{pyqt.__name__}.QtWebEngineWidgets") +except ImportError: + QtWebEngine = None + QtWebEngineCore = None + QtWebEngineWidgets = None + +try: + QtWebKit = importlib.import_module(f"{pyqt.__name__}.QtWebKit") + QtWebKitWidgets = importlib.import_module(f"{pyqt.__name__}.QtWebKitWidgets") +except ImportError: + QtWebKit = None + QtWebKitWidgets = None -- cgit v1.2.3-54-g00ecf