2018-06-28 09:05:18 -07:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""PyInstaller runtime hook"""
|
|
|
|
import imp
|
|
|
|
import sys
|
|
|
|
import pkgutil
|
|
|
|
|
|
|
|
|
|
|
|
_old_find_module = imp.find_module
|
|
|
|
def _new_find_module(name, *args, **kwargs):
|
|
|
|
if name in ['lib', 'gui', 'plugins']:
|
|
|
|
return (None, name, ('', '', 5))
|
|
|
|
else:
|
|
|
|
return _old_find_module(name, *args, **kwargs)
|
|
|
|
imp.find_module = _new_find_module
|
|
|
|
|
|
|
|
|
|
|
|
_old_load_module = imp.load_module
|
|
|
|
def _new_load_module(name, file, pathname, description):
|
|
|
|
if pathname in ['lib', 'gui', 'plugins']:
|
|
|
|
return __import__(name)
|
|
|
|
else:
|
|
|
|
return _old_load_module(name, file, pathname, description)
|
|
|
|
imp.load_module = _new_load_module
|
|
|
|
|
|
|
|
|
2019-02-28 13:26:15 -08:00
|
|
|
PLUGINS_PREFIX = 'electrum_zclassic_plugins'
|
2018-06-28 09:05:18 -07:00
|
|
|
|
|
|
|
KEYSTORE_PLUGINS = [
|
|
|
|
'hw_wallet',
|
|
|
|
'digitalbitbox',
|
|
|
|
'keepkey',
|
|
|
|
'ledger',
|
|
|
|
'trezor',
|
|
|
|
]
|
|
|
|
|
|
|
|
OTHER_PLUGINS= [
|
|
|
|
'audio_modem',
|
|
|
|
'cosigner_pool',
|
|
|
|
'email_requests',
|
|
|
|
'labels',
|
|
|
|
'virtualkeyboard',
|
|
|
|
]
|
|
|
|
|
|
|
|
OTHER_PLUGINS = list(map(lambda p: '%s.%s' % (PLUGINS_PREFIX, p), OTHER_PLUGINS))
|
|
|
|
|
|
|
|
PLUGINS = KEYSTORE_PLUGINS + OTHER_PLUGINS
|
|
|
|
|
|
|
|
|
|
|
|
class PluginsImporter(object):
|
|
|
|
def find_module(self, name):
|
|
|
|
return self
|
|
|
|
|
|
|
|
def load_module(self, name):
|
|
|
|
if name in KEYSTORE_PLUGINS:
|
|
|
|
return getattr(__import__('%s.%s' % (PLUGINS_PREFIX, name)), name)
|
|
|
|
elif name in OTHER_PLUGINS:
|
|
|
|
return getattr(__import__(name), name.split('.')[-1])
|
|
|
|
elif name.endswith('.qt'):
|
|
|
|
split = name.split('.')
|
|
|
|
if split[0] != split[1]:
|
|
|
|
plugin_module = getattr(__import__(name), split[-2])
|
|
|
|
return getattr(plugin_module, 'qt')
|
|
|
|
else:
|
|
|
|
path = '.'.join(split[1:])
|
|
|
|
plugin_module = getattr(__import__(path), split[-2])
|
|
|
|
return getattr(plugin_module, 'qt')
|
|
|
|
else:
|
|
|
|
raise Exception('Can not import %s' % name)
|
|
|
|
|
|
|
|
|
|
|
|
_old_find_loader = pkgutil.find_loader
|
|
|
|
def _new_find_loader(fullname):
|
|
|
|
if fullname.startswith('%s.' % PLUGINS_PREFIX):
|
|
|
|
return PluginsImporter()
|
|
|
|
else:
|
|
|
|
return _old_find_loader(fullname)
|
|
|
|
pkgutil.find_loader = _new_find_loader
|
|
|
|
|
|
|
|
|
|
|
|
_old_iter_modules = pkgutil.iter_modules
|
|
|
|
def _new_iter_modules(path=None, prefix=''):
|
|
|
|
if path and len(path) == 1 and path[0].endswith(PLUGINS_PREFIX):
|
|
|
|
for p in PLUGINS:
|
|
|
|
yield PluginsImporter(), p, True
|
|
|
|
else:
|
|
|
|
for loader, name, ispkg in _old_iter_modules(path, prefix):
|
|
|
|
yield loader, name, ispkg
|
|
|
|
pkgutil.iter_modules = _new_iter_modules
|