fixes related to ModuleLoadError
This commit is contained in:
parent
6a242eb30f
commit
b6821b0567
5 changed files with 33 additions and 28 deletions
|
|
@ -173,11 +173,10 @@ class WeboobCfg(ReplApplication):
|
||||||
print >>sys.stderr, 'You must specify a backend name. Hint: use the "backends" command.'
|
print >>sys.stderr, 'You must specify a backend name. Hint: use the "backends" command.'
|
||||||
return
|
return
|
||||||
|
|
||||||
backend = None
|
|
||||||
try:
|
try:
|
||||||
backend = self.weboob.modules_loader.get_or_load_module(line)
|
backend = self.weboob.modules_loader.get_or_load_module(line)
|
||||||
except ModuleLoadError, e:
|
except ModuleLoadError:
|
||||||
self.logger.debug(e)
|
backend = None
|
||||||
|
|
||||||
if not backend:
|
if not backend:
|
||||||
print 'Backend "%s" does not exist.' % line
|
print 'Backend "%s" does not exist.' % line
|
||||||
|
|
|
||||||
|
|
@ -23,23 +23,15 @@ import re
|
||||||
from weboob.capabilities.base import IBaseCap
|
from weboob.capabilities.base import IBaseCap
|
||||||
from weboob.tools.backend import BaseBackend
|
from weboob.tools.backend import BaseBackend
|
||||||
from weboob.tools.log import getLogger
|
from weboob.tools.log import getLogger
|
||||||
from weboob.tools.misc import get_backtrace
|
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['Module', 'ModulesLoader', 'ModuleLoadError']
|
__all__ = ['Module', 'ModulesLoader', 'ModuleLoadError']
|
||||||
|
|
||||||
|
|
||||||
class ModuleLoadError(Exception):
|
class ModuleLoadError(Exception):
|
||||||
def __init__(self, module_name, original_backtrace):
|
def __init__(self, module_name, msg):
|
||||||
Exception.__init__(self, u'Unable to load module "%s"' % module_name)
|
Exception.__init__(self, u'Unable to load module "%s": %s' % (module_name, msg))
|
||||||
self.original_backtrace = original_backtrace
|
self.module = module_name
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
s = Exception.__str__(self)
|
|
||||||
if logging.root.level == logging.DEBUG:
|
|
||||||
s += '\n' + self.original_backtrace
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
class Module(object):
|
class Module(object):
|
||||||
def __init__(self, package):
|
def __init__(self, package):
|
||||||
|
|
@ -133,14 +125,19 @@ class ModulesLoader(object):
|
||||||
|
|
||||||
def load_all(self):
|
def load_all(self):
|
||||||
for existing_module_name in self.iter_existing_module_names():
|
for existing_module_name in self.iter_existing_module_names():
|
||||||
|
try:
|
||||||
self.load_module(existing_module_name)
|
self.load_module(existing_module_name)
|
||||||
|
except ModuleLoadError, e:
|
||||||
|
self.logger.warning(e)
|
||||||
|
|
||||||
def load_module(self, module_name):
|
def load_module(self, module_name):
|
||||||
try:
|
try:
|
||||||
package_name = 'weboob.backends.%s' % module_name
|
package_name = 'weboob.backends.%s' % module_name
|
||||||
module = Module(__import__(package_name, fromlist=[str(package_name)]))
|
module = Module(__import__(package_name, fromlist=[str(package_name)]))
|
||||||
except ImportError, e:
|
except ImportError, e:
|
||||||
raise ModuleLoadError(module_name, get_backtrace())
|
if self.logger.level == logging.DEBUG:
|
||||||
|
self.logger.exception(e)
|
||||||
|
raise ModuleLoadError(module_name, e)
|
||||||
if module.name in self.loaded:
|
if module.name in self.loaded:
|
||||||
self.logger.debug('Module "%s" is already loaded from %s' % (module_name, module.package.__path__[0]))
|
self.logger.debug('Module "%s" is already loaded from %s' % (module_name, module.package.__path__[0]))
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ class Weboob(object):
|
||||||
try:
|
try:
|
||||||
module = self.modules_loader.get_or_load_module(module_name)
|
module = self.modules_loader.get_or_load_module(module_name)
|
||||||
except ModuleLoadError, e:
|
except ModuleLoadError, e:
|
||||||
self.logger.debug(e)
|
self.logger.error(e)
|
||||||
if module is None:
|
if module is None:
|
||||||
self.logger.warning(u'Backend "%s" is referenced in ~/.weboob/backends '
|
self.logger.warning(u'Backend "%s" is referenced in ~/.weboob/backends '
|
||||||
'configuration file, but was not found. '
|
'configuration file, but was not found. '
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ from PyQt4.QtCore import SIGNAL, Qt, QVariant, QUrl
|
||||||
import re
|
import re
|
||||||
from logging import warning
|
from logging import warning
|
||||||
|
|
||||||
|
from weboob.core.modules import ModuleLoadError
|
||||||
from weboob.capabilities.account import ICapAccount, Account, AccountRegisterError
|
from weboob.capabilities.account import ICapAccount, Account, AccountRegisterError
|
||||||
from weboob.tools.application.qt.backendcfg_ui import Ui_BackendCfg
|
from weboob.tools.application.qt.backendcfg_ui import Ui_BackendCfg
|
||||||
from weboob.tools.ordereddict import OrderedDict
|
from weboob.tools.ordereddict import OrderedDict
|
||||||
|
|
@ -79,7 +80,11 @@ class BackendCfg(QDialog):
|
||||||
def loadConfiguredBackendsList(self):
|
def loadConfiguredBackendsList(self):
|
||||||
self.ui.configuredBackendsList.clear()
|
self.ui.configuredBackendsList.clear()
|
||||||
for instance_name, name, params in self.weboob.backends_config.iter_backends():
|
for instance_name, name, params in self.weboob.backends_config.iter_backends():
|
||||||
|
try:
|
||||||
backend = self.weboob.modules_loader.get_or_load_module(name)
|
backend = self.weboob.modules_loader.get_or_load_module(name)
|
||||||
|
except ModuleLoadError:
|
||||||
|
backend = None
|
||||||
|
|
||||||
if not backend or self.caps and not backend.has_caps(*self.caps):
|
if not backend or self.caps and not backend.has_caps(*self.caps):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
@ -193,7 +198,10 @@ class BackendCfg(QDialog):
|
||||||
self.tr('Please select a backend'))
|
self.tr('Please select a backend'))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
backend = self.weboob.modules_loader.get_or_load_module(unicode(selection[0].text()).lower())
|
backend = self.weboob.modules_loader.get_or_load_module(unicode(selection[0].text()).lower())
|
||||||
|
except ModuleLoadError:
|
||||||
|
backend = None
|
||||||
|
|
||||||
if not backend:
|
if not backend:
|
||||||
QMessageBox.critical(self, self.tr('Unable to add a configured backend'),
|
QMessageBox.critical(self, self.tr('Unable to add a configured backend'),
|
||||||
|
|
@ -298,7 +306,10 @@ class BackendCfg(QDialog):
|
||||||
if not selection:
|
if not selection:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
backend = self.weboob.modules_loader.get_or_load_module(unicode(selection[0].text()).lower())
|
backend = self.weboob.modules_loader.get_or_load_module(unicode(selection[0].text()).lower())
|
||||||
|
except ModuleLoadError:
|
||||||
|
backend = None
|
||||||
|
|
||||||
if not backend:
|
if not backend:
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -142,11 +142,10 @@ class ReplApplication(Cmd, BaseApplication):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def register_backend(self, name, ask_add=True):
|
def register_backend(self, name, ask_add=True):
|
||||||
backend = None
|
|
||||||
try:
|
try:
|
||||||
backend = self.weboob.modules_loader.get_or_load_module(name)
|
backend = self.weboob.modules_loader.get_or_load_module(name)
|
||||||
except ModuleLoadError, e:
|
except ModuleLoadError, e:
|
||||||
self.logger.debug(e)
|
backend = None
|
||||||
|
|
||||||
if not backend:
|
if not backend:
|
||||||
print 'Backend "%s" does not exist.' % name
|
print 'Backend "%s" does not exist.' % name
|
||||||
|
|
@ -201,18 +200,17 @@ class ReplApplication(Cmd, BaseApplication):
|
||||||
if params is None:
|
if params is None:
|
||||||
params = {}
|
params = {}
|
||||||
|
|
||||||
backend = None
|
|
||||||
if not edit:
|
if not edit:
|
||||||
try:
|
try:
|
||||||
backend = self.weboob.modules_loader.get_or_load_module(name)
|
backend = self.weboob.modules_loader.get_or_load_module(name)
|
||||||
except ModuleLoadError, e:
|
except ModuleLoadError, e:
|
||||||
self.logger.debug(e)
|
backend = None
|
||||||
else:
|
else:
|
||||||
bname, items = self.weboob.backends_config.get_backend(name)
|
bname, items = self.weboob.backends_config.get_backend(name)
|
||||||
try:
|
try:
|
||||||
backend = self.weboob.modules_loader.get_or_load_module(bname)
|
backend = self.weboob.modules_loader.get_or_load_module(bname)
|
||||||
except ModuleLoadError, e:
|
except ModuleLoadError:
|
||||||
self.logger.debug(e)
|
backend = None
|
||||||
items.update(params)
|
items.update(params)
|
||||||
params = items
|
params = items
|
||||||
if not backend:
|
if not backend:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue