Browse Source

kivy: use our logger, not kivy's; and log more exceptions.

master
SomberNight 5 years ago
parent
commit
c70484455c
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 8
      electrum/gui/kivy/__init__.py
  2. 23
      electrum/gui/kivy/main_window.py
  3. 2
      electrum/gui/kivy/uix/dialogs/installwizard.py
  4. 14
      electrum/gui/kivy/uix/dialogs/lightning_channels.py
  5. 7
      electrum/gui/kivy/uix/dialogs/lightning_open_channel.py
  6. 10
      electrum/gui/kivy/uix/screens.py

8
electrum/gui/kivy/__init__.py

@ -39,7 +39,8 @@ except ImportError:
# minimum required version for kivy # minimum required version for kivy
kivy.require('1.8.0') kivy.require('1.8.0')
from kivy.logger import Logger
from electrum.logging import Logger
if TYPE_CHECKING: if TYPE_CHECKING:
from electrum.simple_config import SimpleConfig from electrum.simple_config import SimpleConfig
@ -49,10 +50,11 @@ if TYPE_CHECKING:
class ElectrumGui: class ElectrumGui(Logger):
def __init__(self, config: 'SimpleConfig', daemon: 'Daemon', plugins: 'Plugins'): def __init__(self, config: 'SimpleConfig', daemon: 'Daemon', plugins: 'Plugins'):
Logger.debug('ElectrumGUI: initialising') Logger.__init__(self)
self.logger.debug('ElectrumGUI: initialising')
self.daemon = daemon self.daemon = daemon
self.network = daemon.network self.network = daemon.network
self.config = config self.config = config

23
electrum/gui/kivy/main_window.py

@ -21,11 +21,11 @@ from electrum.invoices import PR_PAID, PR_FAILED
from electrum import blockchain from electrum import blockchain
from electrum.network import Network, TxBroadcastError, BestEffortRequestFailed from electrum.network import Network, TxBroadcastError, BestEffortRequestFailed
from electrum.interface import PREFERRED_NETWORK_PROTOCOL, ServerAddr from electrum.interface import PREFERRED_NETWORK_PROTOCOL, ServerAddr
from electrum.logging import Logger
from .i18n import _ from .i18n import _
from kivy.app import App from kivy.app import App
from kivy.core.window import Window from kivy.core.window import Window
from kivy.logger import Logger
from kivy.utils import platform from kivy.utils import platform
from kivy.properties import (OptionProperty, AliasProperty, ObjectProperty, from kivy.properties import (OptionProperty, AliasProperty, ObjectProperty,
StringProperty, ListProperty, BooleanProperty, NumericProperty) StringProperty, ListProperty, BooleanProperty, NumericProperty)
@ -87,7 +87,7 @@ if TYPE_CHECKING:
from electrum.paymentrequest import PaymentRequest from electrum.paymentrequest import PaymentRequest
class ElectrumWindow(App): class ElectrumWindow(App, Logger):
electrum_config = ObjectProperty(None) electrum_config = ObjectProperty(None)
language = StringProperty('en') language = StringProperty('en')
@ -228,7 +228,7 @@ class ElectrumWindow(App):
self._process_invoice_str(invoice_queued) self._process_invoice_str(invoice_queued)
def on_language(self, instance, language): def on_language(self, instance, language):
Logger.info('language: {}'.format(language)) self.logger.info('language: {}'.format(language))
_.switch_lang(language) _.switch_lang(language)
def update_history(self, *dt): def update_history(self, *dt):
@ -236,12 +236,12 @@ class ElectrumWindow(App):
self.history_screen.update() self.history_screen.update()
def on_quotes(self, d): def on_quotes(self, d):
Logger.info("on_quotes") self.logger.info("on_quotes")
self._trigger_update_status() self._trigger_update_status()
self._trigger_update_history() self._trigger_update_history()
def on_history(self, d): def on_history(self, d):
Logger.info("on_history") self.logger.info("on_history")
if self.wallet: if self.wallet:
self.wallet.clear_coin_price_cache() self.wallet.clear_coin_price_cache()
self._trigger_update_history() self._trigger_update_history()
@ -368,6 +368,7 @@ class ElectrumWindow(App):
self.password = None self.password = None
App.__init__(self)#, **kwargs) App.__init__(self)#, **kwargs)
Logger.__init__(self)
self.electrum_config = config = kwargs.get('config', None) # type: SimpleConfig self.electrum_config = config = kwargs.get('config', None) # type: SimpleConfig
self.language = config.get('language', 'en') self.language = config.get('language', 'en')
@ -556,6 +557,7 @@ class ElectrumWindow(App):
try: try:
return func(self, *args, **kwargs) return func(self, *args, **kwargs)
except Exception as e: except Exception as e:
self.logger.exception('crash on startup')
from .uix.dialogs.crash_reporter import CrashReporter from .uix.dialogs.crash_reporter import CrashReporter
# show the crash reporter, and when it's closed, shutdown the app # show the crash reporter, and when it's closed, shutdown the app
cr = CrashReporter(self, exctype=type(e), value=e, tb=e.__traceback__) cr = CrashReporter(self, exctype=type(e), value=e, tb=e.__traceback__)
@ -568,7 +570,7 @@ class ElectrumWindow(App):
''' This is the start point of the kivy ui ''' This is the start point of the kivy ui
''' '''
import time import time
Logger.info('Time to on_start: {} <<<<<<<<'.format(time.process_time())) self.logger.info('Time to on_start: {} <<<<<<<<'.format(time.process_time()))
Window.bind(size=self.on_size, on_keyboard=self.on_keyboard) Window.bind(size=self.on_size, on_keyboard=self.on_keyboard)
Window.bind(on_key_down=self.on_key_down) Window.bind(on_key_down=self.on_key_down)
#Window.softinput_mode = 'below_target' #Window.softinput_mode = 'below_target'
@ -691,7 +693,7 @@ class ElectrumWindow(App):
self._on_decrypted_storage(storage) self._on_decrypted_storage(storage)
def on_stop(self): def on_stop(self):
Logger.info('on_stop') self.logger.info('on_stop')
self.stop_wallet() self.stop_wallet()
def stop_wallet(self): def stop_wallet(self):
@ -832,7 +834,7 @@ class ElectrumWindow(App):
self.update_proxy_str(self.proxy_config) self.update_proxy_str(self.proxy_config)
def on_network_event(self, event, *args): def on_network_event(self, event, *args):
Logger.info('network event: '+ event) self.logger.info('network event: '+ event)
if event == 'network_updated': if event == 'network_updated':
self._trigger_update_interfaces() self._trigger_update_interfaces()
self._trigger_update_status() self._trigger_update_status()
@ -983,7 +985,7 @@ class ElectrumWindow(App):
notification.notify('Electrum', message, notification.notify('Electrum', message,
app_icon=icon, app_name='Electrum') app_icon=icon, app_name='Electrum')
except ImportError: except ImportError:
Logger.Error('Notification: needs plyer; `sudo python3 -m pip install plyer`') self.logger.Error('Notification: needs plyer; `sudo python3 -m pip install plyer`')
def on_pause(self): def on_pause(self):
self.pause_time = time.time() self.pause_time = time.time()
@ -1246,7 +1248,7 @@ class ElectrumWindow(App):
if self.wallet.has_password(): if self.wallet.has_password():
try: try:
self.wallet.check_password(pw) self.wallet.check_password(pw)
except: except InvalidPassword:
self.show_error("Invalid PIN") self.show_error("Invalid PIN")
return return
self.stop_wallet() self.stop_wallet()
@ -1348,6 +1350,7 @@ class ElectrumWindow(App):
try: try:
self.wallet.lnbackups.import_channel_backup(encrypted) self.wallet.lnbackups.import_channel_backup(encrypted)
except Exception as e: except Exception as e:
self.logger.exception("failed to import backup")
self.show_error("failed to import backup" + '\n' + str(e)) self.show_error("failed to import backup" + '\n' + str(e))
return return
self.lightning_channels_dialog() self.lightning_channels_dialog()

2
electrum/gui/kivy/uix/dialogs/installwizard.py

@ -1081,6 +1081,7 @@ class InstallWizard(BaseWizard, Widget):
try: try:
task() task()
except Exception as err: except Exception as err:
self.logger.exception('')
self.show_error(str(err)) self.show_error(str(err))
# on completion hide message # on completion hide message
Clock.schedule_once(lambda dt: app.info_bubble.hide(now=True), -1) Clock.schedule_once(lambda dt: app.info_bubble.hide(now=True), -1)
@ -1089,6 +1090,7 @@ class InstallWizard(BaseWizard, Widget):
try: try:
on_finished() on_finished()
except Exception as e: except Exception as e:
self.logger.exception('')
self.show_error(str(e)) self.show_error(str(e))
Clock.schedule_once(lambda dt: protected_on_finished(), -1) Clock.schedule_once(lambda dt: protected_on_finished(), -1)

14
electrum/gui/kivy/uix/dialogs/lightning_channels.py

@ -8,6 +8,7 @@ from kivy.uix.popup import Popup
from kivy.clock import Clock from kivy.clock import Clock
from electrum.util import bh2u from electrum.util import bh2u
from electrum.logging import Logger
from electrum.lnutil import LOCAL, REMOTE, format_short_channel_id from electrum.lnutil import LOCAL, REMOTE, format_short_channel_id
from electrum.lnchannel import AbstractChannel, Channel from electrum.lnchannel import AbstractChannel, Channel
from electrum.gui.kivy.i18n import _ from electrum.gui.kivy.i18n import _
@ -289,10 +290,11 @@ Builder.load_string(r'''
''') ''')
class ChannelBackupPopup(Popup): class ChannelBackupPopup(Popup, Logger):
def __init__(self, chan: AbstractChannel, app: 'ElectrumWindow', **kwargs): def __init__(self, chan: AbstractChannel, app: 'ElectrumWindow', **kwargs):
super(ChannelBackupPopup,self).__init__(**kwargs) Popup.__init__(self, **kwargs)
Logger.__init__(self)
self.chan = chan self.chan = chan
self.app = app self.app = app
self.short_id = format_short_channel_id(chan.short_channel_id) self.short_id = format_short_channel_id(chan.short_channel_id)
@ -312,6 +314,7 @@ class ChannelBackupPopup(Popup):
coro.result(5) coro.result(5)
self.app.show_info(_('Channel closed')) self.app.show_info(_('Channel closed'))
except Exception as e: except Exception as e:
self.logger.exception("Could not close channel")
self.app.show_info(_('Could not close channel: ') + repr(e)) # repr because str(Exception()) == '' self.app.show_info(_('Could not close channel: ') + repr(e)) # repr because str(Exception()) == ''
def remove_backup(self): def remove_backup(self):
@ -324,10 +327,11 @@ class ChannelBackupPopup(Popup):
self.app.wallet.lnbackups.remove_channel_backup(self.chan.channel_id) self.app.wallet.lnbackups.remove_channel_backup(self.chan.channel_id)
self.dismiss() self.dismiss()
class ChannelDetailsPopup(Popup): class ChannelDetailsPopup(Popup, Logger):
def __init__(self, chan: Channel, app: 'ElectrumWindow', **kwargs): def __init__(self, chan: Channel, app: 'ElectrumWindow', **kwargs):
super(ChannelDetailsPopup,self).__init__(**kwargs) Popup.__init__(self, **kwargs)
Logger.__init__(self)
self.is_closed = chan.is_closed() self.is_closed = chan.is_closed()
self.is_redeemed = chan.is_redeemed() self.is_redeemed = chan.is_redeemed()
self.app = app self.app = app
@ -364,6 +368,7 @@ class ChannelDetailsPopup(Popup):
coro.result(5) coro.result(5)
self.app.show_info(_('Channel closed')) self.app.show_info(_('Channel closed'))
except Exception as e: except Exception as e:
self.logger.exception("Could not close channel")
self.app.show_info(_('Could not close channel: ') + repr(e)) # repr because str(Exception()) == '' self.app.show_info(_('Could not close channel: ') + repr(e)) # repr because str(Exception()) == ''
def remove_channel(self): def remove_channel(self):
@ -402,6 +407,7 @@ class ChannelDetailsPopup(Popup):
coro.result(1) coro.result(1)
self.app.show_info(_('Channel closed, you may need to wait at least {} blocks, because of CSV delays'.format(self.chan.config[REMOTE].to_self_delay))) self.app.show_info(_('Channel closed, you may need to wait at least {} blocks, because of CSV delays'.format(self.chan.config[REMOTE].to_self_delay)))
except Exception as e: except Exception as e:
self.logger.exception("Could not force close channel")
self.app.show_info(_('Could not force close channel: ') + repr(e)) # repr because str(Exception()) == '' self.app.show_info(_('Could not force close channel: ') + repr(e)) # repr because str(Exception()) == ''

7
electrum/gui/kivy/uix/dialogs/lightning_open_channel.py

@ -8,6 +8,7 @@ from electrum.lnaddr import lndecode
from electrum.util import bh2u from electrum.util import bh2u
from electrum.bitcoin import COIN from electrum.bitcoin import COIN
import electrum.simple_config as config import electrum.simple_config as config
from electrum.logging import Logger
from .label_dialog import LabelDialog from .label_dialog import LabelDialog
@ -94,7 +95,7 @@ Builder.load_string('''
disabled: not root.pubkey or not root.amount disabled: not root.pubkey or not root.amount
''') ''')
class LightningOpenChannelDialog(Factory.Popup): class LightningOpenChannelDialog(Factory.Popup, Logger):
def ipport_dialog(self): def ipport_dialog(self):
def callback(text): def callback(text):
self.ipport = text self.ipport = text
@ -107,7 +108,8 @@ class LightningOpenChannelDialog(Factory.Popup):
self.pubkey = suggested.hex() self.pubkey = suggested.hex()
def __init__(self, app, lnaddr=None, msg=None): def __init__(self, app, lnaddr=None, msg=None):
super(LightningOpenChannelDialog, self).__init__() Factory.Popup.__init__(self)
Logger.__init__(self)
self.app = app # type: ElectrumWindow self.app = app # type: ElectrumWindow
self.lnaddr = lnaddr self.lnaddr = lnaddr
self.msg = msg self.msg = msg
@ -159,6 +161,7 @@ class LightningOpenChannelDialog(Factory.Popup):
push_amt_sat=0, push_amt_sat=0,
password=password) password=password)
except Exception as e: except Exception as e:
self.logger.exception("Problem opening channel")
self.app.show_error(_('Problem opening channel: ') + '\n' + repr(e)) self.app.show_error(_('Problem opening channel: ') + '\n' + repr(e))
return return
n = chan.constraints.funding_txn_minimum_depth n = chan.constraints.funding_txn_minimum_depth

10
electrum/gui/kivy/uix/screens.py

@ -21,7 +21,6 @@ from kivy.uix.image import Image
from kivy.lang import Builder from kivy.lang import Builder
from kivy.factory import Factory from kivy.factory import Factory
from kivy.utils import platform from kivy.utils import platform
from kivy.logger import Logger
from electrum.util import profiler, parse_URI, format_time, InvalidPassword, NotEnoughFunds, Fiat from electrum.util import profiler, parse_URI, format_time, InvalidPassword, NotEnoughFunds, Fiat
from electrum.invoices import (PR_TYPE_ONCHAIN, PR_TYPE_LN, PR_DEFAULT_EXPIRATION_WHEN_CREATING, from electrum.invoices import (PR_TYPE_ONCHAIN, PR_TYPE_LN, PR_DEFAULT_EXPIRATION_WHEN_CREATING,
@ -36,6 +35,7 @@ from electrum import simple_config
from electrum.simple_config import FEERATE_WARNING_HIGH_FEE, FEE_RATIO_HIGH_WARNING from electrum.simple_config import FEERATE_WARNING_HIGH_FEE, FEE_RATIO_HIGH_WARNING
from electrum.lnaddr import lndecode from electrum.lnaddr import lndecode
from electrum.lnutil import RECEIVED, SENT, PaymentFailure from electrum.lnutil import RECEIVED, SENT, PaymentFailure
from electrum.logging import Logger
from .dialogs.question import Question from .dialogs.question import Question
from .dialogs.lightning_open_channel import LightningOpenChannelDialog from .dialogs.lightning_open_channel import LightningOpenChannelDialog
@ -173,12 +173,16 @@ class HistoryScreen(CScreen):
history_card.data = [self.get_card(item) for item in history] history_card.data = [self.get_card(item) for item in history]
class SendScreen(CScreen): class SendScreen(CScreen, Logger):
kvname = 'send' kvname = 'send'
payment_request = None # type: Optional[PaymentRequest] payment_request = None # type: Optional[PaymentRequest]
parsed_URI = None parsed_URI = None
def __init__(self):
CScreen.__init__(self)
Logger.__init__(self)
def set_URI(self, text: str): def set_URI(self, text: str):
if not self.app.wallet: if not self.app.wallet:
return return
@ -361,7 +365,7 @@ class SendScreen(CScreen):
self.app.show_error(_("Not enough funds")) self.app.show_error(_("Not enough funds"))
return return
except Exception as e: except Exception as e:
Logger.exception('') self.logger.exception('')
self.app.show_error(repr(e)) self.app.show_error(repr(e))
return return
if rbf: if rbf:

Loading…
Cancel
Save