Files
pallectrum/electrum/gui/common_qt/plugins.py

53 lines
1.5 KiB
Python
Raw Normal View History

import sys
pyinstaller build: towards fixing missing "gui/common_qt" folder pyinstaller tries to import electrum and its different submodules at build-time during the "Analysis" phase. sys._GUI_QT_VERSION was not getting set there, and the resulting exception was blocking pyinstaller from discovering that gui/common_qt is being used. at runtime: ``` $ ./dist/Electrum.app/Contents/MacOS/run_electrum 1.53 | E | daemon.Daemon | GUI raised exception: Exception('Error loading trustedcoin plugin: ModuleNotFoundError("No module named \'electrum.gui.common_qt\'")'). shutting down. 1.53 | E | __main__ | daemon.run_gui errored Traceback (most recent call last): File "electrum/plugin.py", line 135, in load_plugin spec.loader.exec_module(module) File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/Users/vagrant/electrum/dist/Electrum.app/Contents/MacOS/electrum/plugins/trustedcoin/qt.py", line 51, in <module> from .common_qt import TrustedcoinPluginQObject File "/Users/vagrant/electrum/dist/Electrum.app/Contents/MacOS/electrum/plugins/trustedcoin/common_qt.py", line 16, in <module> from electrum.gui.common_qt.plugins import PluginQObject ModuleNotFoundError: No module named 'electrum.gui.common_qt' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "run_electrum", line 456, in handle_cmd d.run_gui() File "electrum/daemon.py", line 617, in run_gui self.gui_object = gui.ElectrumGui(config=self.config, daemon=self, plugins=self._plugins) File "electrum/util.py", line 473, in do_profile o = func(*args, **kw_args) File "electrum/gui/qt/__init__.py", line 153, in __init__ self.plugins.load_plugin('trustedcoin') File "electrum/plugin.py", line 138, in load_plugin raise Exception(f"Error loading {name} plugin: {repr(e)}") from e Exception: Error loading trustedcoin plugin: ModuleNotFoundError("No module named 'electrum.gui.common_qt'") ```
2023-11-17 11:19:47 +00:00
from . import get_qt_major_version
if (qt_ver := get_qt_major_version()) == 5:
from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject
pyinstaller build: towards fixing missing "gui/common_qt" folder pyinstaller tries to import electrum and its different submodules at build-time during the "Analysis" phase. sys._GUI_QT_VERSION was not getting set there, and the resulting exception was blocking pyinstaller from discovering that gui/common_qt is being used. at runtime: ``` $ ./dist/Electrum.app/Contents/MacOS/run_electrum 1.53 | E | daemon.Daemon | GUI raised exception: Exception('Error loading trustedcoin plugin: ModuleNotFoundError("No module named \'electrum.gui.common_qt\'")'). shutting down. 1.53 | E | __main__ | daemon.run_gui errored Traceback (most recent call last): File "electrum/plugin.py", line 135, in load_plugin spec.loader.exec_module(module) File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/Users/vagrant/electrum/dist/Electrum.app/Contents/MacOS/electrum/plugins/trustedcoin/qt.py", line 51, in <module> from .common_qt import TrustedcoinPluginQObject File "/Users/vagrant/electrum/dist/Electrum.app/Contents/MacOS/electrum/plugins/trustedcoin/common_qt.py", line 16, in <module> from electrum.gui.common_qt.plugins import PluginQObject ModuleNotFoundError: No module named 'electrum.gui.common_qt' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "run_electrum", line 456, in handle_cmd d.run_gui() File "electrum/daemon.py", line 617, in run_gui self.gui_object = gui.ElectrumGui(config=self.config, daemon=self, plugins=self._plugins) File "electrum/util.py", line 473, in do_profile o = func(*args, **kw_args) File "electrum/gui/qt/__init__.py", line 153, in __init__ self.plugins.load_plugin('trustedcoin') File "electrum/plugin.py", line 138, in load_plugin raise Exception(f"Error loading {name} plugin: {repr(e)}") from e Exception: Error loading trustedcoin plugin: ModuleNotFoundError("No module named 'electrum.gui.common_qt'") ```
2023-11-17 11:19:47 +00:00
elif qt_ver == 6:
from PyQt6.QtCore import pyqtSignal, pyqtProperty, QObject
pyinstaller build: towards fixing missing "gui/common_qt" folder pyinstaller tries to import electrum and its different submodules at build-time during the "Analysis" phase. sys._GUI_QT_VERSION was not getting set there, and the resulting exception was blocking pyinstaller from discovering that gui/common_qt is being used. at runtime: ``` $ ./dist/Electrum.app/Contents/MacOS/run_electrum 1.53 | E | daemon.Daemon | GUI raised exception: Exception('Error loading trustedcoin plugin: ModuleNotFoundError("No module named \'electrum.gui.common_qt\'")'). shutting down. 1.53 | E | __main__ | daemon.run_gui errored Traceback (most recent call last): File "electrum/plugin.py", line 135, in load_plugin spec.loader.exec_module(module) File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/Users/vagrant/electrum/dist/Electrum.app/Contents/MacOS/electrum/plugins/trustedcoin/qt.py", line 51, in <module> from .common_qt import TrustedcoinPluginQObject File "/Users/vagrant/electrum/dist/Electrum.app/Contents/MacOS/electrum/plugins/trustedcoin/common_qt.py", line 16, in <module> from electrum.gui.common_qt.plugins import PluginQObject ModuleNotFoundError: No module named 'electrum.gui.common_qt' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "run_electrum", line 456, in handle_cmd d.run_gui() File "electrum/daemon.py", line 617, in run_gui self.gui_object = gui.ElectrumGui(config=self.config, daemon=self, plugins=self._plugins) File "electrum/util.py", line 473, in do_profile o = func(*args, **kw_args) File "electrum/gui/qt/__init__.py", line 153, in __init__ self.plugins.load_plugin('trustedcoin') File "electrum/plugin.py", line 138, in load_plugin raise Exception(f"Error loading {name} plugin: {repr(e)}") from e Exception: Error loading trustedcoin plugin: ModuleNotFoundError("No module named 'electrum.gui.common_qt'") ```
2023-11-17 11:19:47 +00:00
else:
raise Exception(f"unexpected {qt_ver=}")
from electrum.logging import get_logger
class PluginQObject(QObject):
logger = get_logger(__name__)
pluginChanged = pyqtSignal()
busyChanged = pyqtSignal()
pluginEnabledChanged = pyqtSignal()
2022-09-09 19:58:48 +02:00
def __init__(self, plugin, parent):
super().__init__(parent)
self._busy = False
self.plugin = plugin
self.app = parent
@pyqtProperty(str, notify=pluginChanged)
def name(self): return self._name
@pyqtProperty(bool, notify=busyChanged)
def busy(self): return self._busy
# below only used for QML, not compatible yet with Qt
@pyqtProperty(bool, notify=pluginEnabledChanged)
def pluginEnabled(self): return self.plugin.is_enabled()
@pluginEnabled.setter
def pluginEnabled(self, enabled):
if enabled != self.plugin.is_enabled():
self.logger.debug(f'can {self.plugin.can_user_disable()}, {self.plugin.is_available()}')
if not self.plugin.can_user_disable() and not enabled:
return
if enabled:
self.app.plugins.enable(self.plugin.name)
else:
self.app.plugins.disable(self.plugin.name)
self.pluginEnabledChanged.emit()