load modules on demand for load_backends

This commit is contained in:
Christophe Benz 2010-04-08 18:32:34 +02:00
commit f0e8747a9b
2 changed files with 7 additions and 2 deletions

View file

@ -118,6 +118,11 @@ class ModulesLoader:
def __init__(self):
self.modules = {}
def get_or_load_module(self, name):
if name not in self.modules:
self.load_module('weboob.backends.%s' % name)
return self.modules[name]
def load(self):
path = backends.__path__[0]
regexp = re.compile('^%s/([\w\d_]+)$' % path)

View file

@ -46,7 +46,6 @@ class Weboob:
# Modules loader
self.modules_loader = ModulesLoader()
self.modules_loader.load()
# Backends config
if not backends_filename:
@ -58,7 +57,7 @@ class Weboob:
def load_backends(self, caps=None, names=None):
for name, _type, params in self.backends_config.iter_backends():
try:
module = self.modules_loader.modules[_type]
module = self.modules_loader.get_or_load_module(_type)
except KeyError:
warning('Unable to find module "%s" for backend "%s"' % (_type, name))
continue
@ -76,6 +75,7 @@ class Weboob:
return self.backends
def load_modules(self, caps=None, names=None):
self.modules_loader.load()
for name, module in self.modules_loader.modules.iteritems():
if (caps is None or module.has_caps(caps)) and \
(names is None or module.name in names):