From b20933de6d06fbfc0961eaf505ee898a671cf055 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Wed, 8 Feb 2023 01:51:43 +0000 Subject: [PATCH] payserver: better handle running with --offline ``` 19.70 | E | plugin | Plugin error. plugin: payserver, hook: wallet_export_request Traceback (most recent call last): File "/home/user/wspace/electrum/electrum/plugin.py", line 227, in run_hook r = f(*args) File "/home/user/wspace/electrum/electrum/plugins/payserver/payserver.py", line 69, in wallet_export_request d['view_url'] = self.view_url(key) File "/home/user/wspace/electrum/electrum/plugins/payserver/payserver.py", line 55, in view_url return self.server.base_url + self.server.root + '/pay?id=' + key AttributeError: 'NoneType' object has no attribute 'base_url' ``` ``` 23.22 | E | gui.qt.exception_window.Exception_Hook | exception caught by crash reporter Traceback (most recent call last): File "/home/user/wspace/electrum/electrum/plugins/payserver/qt.py", line 48, in settings_dialog url = self.server.base_url + self.server.root + '/create_invoice.html' AttributeError: 'NoneType' object has no attribute 'base_url' ``` --- electrum/plugins/payserver/payserver.py | 9 ++++++--- electrum/plugins/payserver/qt.py | 4 ++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/electrum/plugins/payserver/payserver.py b/electrum/plugins/payserver/payserver.py index 7ddbdfcc5..2e45401de 100644 --- a/electrum/plugins/payserver/payserver.py +++ b/electrum/plugins/payserver/payserver.py @@ -26,7 +26,7 @@ import os import asyncio from collections import defaultdict -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Optional from aiohttp import web from aiorpcx import NetAddress @@ -50,7 +50,9 @@ class PayServerPlugin(BasePlugin): self.config = config self.server = None - def view_url(self, key): + def view_url(self, key) -> Optional[str]: + if not self.server: + return None return self.server.base_url + self.server.root + '/pay?id=' + key @hook @@ -65,7 +67,8 @@ class PayServerPlugin(BasePlugin): @hook def wallet_export_request(self, d, key): - d['view_url'] = self.view_url(key) + if view_url := self.view_url(key): + d['view_url'] = view_url class PayServer(Logger, EventListener): diff --git a/electrum/plugins/payserver/qt.py b/electrum/plugins/payserver/qt.py index 7d43e6115..2e485e62a 100644 --- a/electrum/plugins/payserver/qt.py +++ b/electrum/plugins/payserver/qt.py @@ -42,9 +42,13 @@ class Plugin(PayServerPlugin): partial(self.settings_dialog, window)) def settings_dialog(self, window: WindowModalDialog): + if self.config.get('offline'): + window.show_error(_("You are offline.")) + return d = WindowModalDialog(window, _("PayServer Settings")) form = QtWidgets.QFormLayout(None) addr = self.config.get('payserver_address', 'localhost:8080') + assert self.server url = self.server.base_url + self.server.root + '/create_invoice.html' self.help_button = QtWidgets.QPushButton('View sample invoice creation form') self.help_button.clicked.connect(lambda: webopen(url))