core: more robust plugins importation

This commit is contained in:
Goffi 2014-09-01 11:05:27 +02:00
commit 7c4824f352

View file

@ -130,6 +130,7 @@ class SAT(service.Service):
ui_contact_list.ContactList(self)
ui_profile_manager.ProfileManager(self)
self._initialised.callback(None)
log.info(_("Backend is ready"))
def _import_plugins(self):
"""Import all plugins found in plugins directory"""
@ -139,7 +140,11 @@ class SAT(service.Service):
__plugins_to_import = {} # plugins we still have to import
for plug in plug_lst:
plugin_path = 'sat.plugins.' + plug
__import__(plugin_path)
try:
__import__(plugin_path)
except ImportError as e:
log.error(_("Can't import plugin [%(path)s]: %(error)s") % {'path': plugin_path, 'error':e})
continue
mod = sys.modules[plugin_path]
plugin_info = mod.PLUGIN_INFO
__plugins_to_import[plugin_info['import_name']] = (plugin_path, mod, plugin_info)
@ -173,7 +178,11 @@ class SAT(service.Service):
for to_import in dependencies + recommendations:
if to_import not in self.plugins:
log.debug('Recursively import dependency of [%s]: [%s]' % (import_name, to_import))
self._import_plugins_from_dict(plugins_to_import, to_import, to_import not in dependencies)
try:
self._import_plugins_from_dict(plugins_to_import, to_import, to_import not in dependencies)
except ImportError as e:
log.error(_("Can't import plugin %(name)s: %(error)s") % {'name':plugin_info['name'], 'error':e})
return
log.info(_("importing plugin: %s") % plugin_info['name'])
self.plugins[import_name] = getattr(mod, plugin_info['main'])(self)
if 'handler' in plugin_info and plugin_info['handler'] == 'yes':