From b2a3647be73c953273b1850beb4665abd98194f6 Mon Sep 17 00:00:00 2001 From: Dmitri Bogomolov <4glitch@gmail.com> Date: Mon, 11 Feb 2019 18:48:57 +0200 Subject: [PATCH] PyQt5 based qtpy fallback --- src/bitmessageqt/networkstatus.py | 4 ---- src/bitmessageqt/support.py | 2 +- src/depends.py | 12 +++++++++--- src/fallback/__init__.py | 27 +++++++++++++++++++++++++++ src/tr.py | 1 + 5 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/bitmessageqt/networkstatus.py b/src/bitmessageqt/networkstatus.py index 671d6381..6748ae77 100644 --- a/src/bitmessageqt/networkstatus.py +++ b/src/bitmessageqt/networkstatus.py @@ -35,10 +35,6 @@ class NetworkStatus(QtWidgets.QWidget, RetranslateMixin): header.setSortIndicator(0, QtCore.Qt.AscendingOrder) self.startup = time.localtime() - self.labelStartupTime.setText(_translate( - "networkstatus", "Since startup on {0}").format( - l10n.formatTimestamp(self.startup)) - ) self.UISignalThread = UISignaler.get() self.UISignalThread.updateNumberOfMessagesProcessed.connect( diff --git a/src/bitmessageqt/support.py b/src/bitmessageqt/support.py index ca8695dd..56c4d479 100644 --- a/src/bitmessageqt/support.py +++ b/src/bitmessageqt/support.py @@ -126,7 +126,7 @@ def createSupportMessage(myapp): opensslversion = "%s (Python internal), %s (external for PyElliptic)" % (ssl.OPENSSL_VERSION, OpenSSL._version) - qtapi = os.environ['QT_API'] + qtapi = os.environ.get('QT_API', 'fallback') frozen = "N/A" if paths.frozen: diff --git a/src/depends.py b/src/depends.py index 92c102b9..7af8ec1f 100755 --- a/src/depends.py +++ b/src/depends.py @@ -3,6 +3,8 @@ Utility functions to check the availability of dependencies and suggest how it may be installed """ +# flake8: noqa:E402 + import sys # Only really old versions of Python don't have sys.hexversion. We don't @@ -363,9 +365,13 @@ def check_pyqt(): PyQt 4.8 or later. """ # pylint: disable=no-member - qtpy = try_import( - 'qtpy', - 'PyBitmessage requires qtpy, PyQt 4.8 or later and Qt 4.7 or later.') + try: + from fallback import qtpy + except ImportError: + logger.error( + 'PyBitmessage requires qtpy, PyQt 4.8 or later and Qt 4.7 or later.' + ) + qtpy = None if not qtpy: return False diff --git a/src/fallback/__init__.py b/src/fallback/__init__.py index 9a8d646f..8e48d76c 100644 --- a/src/fallback/__init__.py +++ b/src/fallback/__init__.py @@ -30,3 +30,30 @@ else: if data: hasher.update(data) return hasher + +try: + import qtpy +except ImportError: + try: + from PyQt5 import QtCore, QtGui, QtWidgets, QtNetwork, uic + except ImportError: + qtpy = None + else: + import sys + import types + + QtCore.Signal = QtCore.pyqtSignal + context = { + 'API': 'pyqt5', # for tr + 'PYQT_VERSION': QtCore.PYQT_VERSION_STR, + 'QT_VERSION': QtCore.QT_VERSION_STR, + 'QtCore': QtCore, + 'QtGui': QtGui, + 'QtWidgets': QtWidgets, + 'QtNetwork': QtNetwork, + 'uic': uic + } + qtpy = types.ModuleType( + 'qtpy', 'PyQt5 based dynamic fallback for qtpy') + qtpy.__dict__.update(context) + sys.modules['qtpy'] = qtpy diff --git a/src/tr.py b/src/tr.py index ddb06ec0..19ca4ff8 100644 --- a/src/tr.py +++ b/src/tr.py @@ -12,6 +12,7 @@ def _tr_dummy(context, text, disambiguation=None, n=None): if state.enableGUI and not state.curses: try: + from fallback import qtpy # noqa:F401 from qtpy import QtWidgets, QtCore, API except ImportError: _translate = _tr_dummy