From 419fc6e1c1500069f13915574ef4cb68415540a3 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 11 Apr 2022 16:53:25 +0200 Subject: [PATCH] gui init: raise GuiImportError instead of sys.exit if dep is missing --- electrum/__init__.py | 4 ++++ electrum/daemon.py | 6 +++++- electrum/gui/kivy/__init__.py | 9 ++++++--- electrum/gui/qt/__init__.py | 7 +++++-- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/electrum/__init__.py b/electrum/__init__.py index 8bafda636..cea6ac59b 100644 --- a/electrum/__init__.py +++ b/electrum/__init__.py @@ -11,6 +11,10 @@ if is_local and os.name == 'nt': os.add_dll_directory(os.path.dirname(__file__)) +class GuiImportError(ImportError): + pass + + from .version import ELECTRUM_VERSION from .util import format_satoshis from .wallet import Wallet diff --git a/electrum/daemon.py b/electrum/daemon.py index 6c26d6b7e..8bb8fc6b9 100644 --- a/electrum/daemon.py +++ b/electrum/daemon.py @@ -51,6 +51,7 @@ from .commands import known_commands, Commands from .simple_config import SimpleConfig from .exchange_rate import FxThread from .logging import get_logger, Logger +from . import GuiImportError if TYPE_CHECKING: from electrum import gui @@ -622,7 +623,10 @@ class Daemon(Logger): gui_name = 'qt' self.logger.info(f'launching GUI: {gui_name}') try: - gui = __import__('electrum.gui.' + gui_name, fromlist=['electrum']) + try: + gui = __import__('electrum.gui.' + gui_name, fromlist=['electrum']) + except GuiImportError as e: + sys.exit(str(e)) self.gui_object = gui.ElectrumGui(config=config, daemon=self, plugins=plugins) if not self._stop_entered: self.gui_object.main() diff --git a/electrum/gui/kivy/__init__.py b/electrum/gui/kivy/__init__.py index ab722d4c9..553037673 100644 --- a/electrum/gui/kivy/__init__.py +++ b/electrum/gui/kivy/__init__.py @@ -29,16 +29,19 @@ import sys import os from typing import TYPE_CHECKING +from electrum import GuiImportError + KIVY_GUI_PATH = os.path.abspath(os.path.dirname(__file__)) os.environ['KIVY_DATA_DIR'] = os.path.join(KIVY_GUI_PATH, 'data') try: sys.argv = [''] import kivy -except ImportError: +except ImportError as e: # This error ideally shouldn't be raised with pre-built packages - sys.exit("Error: Could not import kivy. Please install it using the " - "instructions mentioned here `https://kivy.org/#download` .") + raise GuiImportError( + "Error: Could not import kivy. Please install it using the " + "instructions mentioned here `https://kivy.org/#download` .") from e # minimum required version for kivy kivy.require('1.8.0') diff --git a/electrum/gui/qt/__init__.py b/electrum/gui/qt/__init__.py index bf4780b3a..76774fa8d 100644 --- a/electrum/gui/qt/__init__.py +++ b/electrum/gui/qt/__init__.py @@ -30,12 +30,15 @@ import traceback import threading from typing import Optional, TYPE_CHECKING, List +from electrum import GuiImportError try: import PyQt5 import PyQt5.QtGui -except Exception: - sys.exit("Error: Could not import PyQt5 on Linux systems, you may try 'sudo apt-get install python3-pyqt5'") +except Exception as e: + raise GuiImportError( + "Error: Could not import PyQt5 on Linux systems, " + "you may try 'sudo apt-get install python3-pyqt5'") from e from PyQt5.QtGui import QGuiApplication from PyQt5.QtWidgets import (QApplication, QSystemTrayIcon, QWidget, QMenu,