diff --git a/preditor/plugins.py b/preditor/plugins.py index 4ebf513e..82bd50d0 100644 --- a/preditor/plugins.py +++ b/preditor/plugins.py @@ -15,7 +15,8 @@ def about_module(self): if name in plugs: _logger.warning( 'Duplicate "preditor.plug.about_module" plugin found with ' - 'name "{}"'.format(name) + 'name "{}"'.format(name), + exc_info=True, ) else: plugs[name] = ep @@ -70,7 +71,13 @@ def add_logging_handler(self, logger, handler_cls, *args, **kwargs): def editor(self, name): for plug_name, ep in self.editors(name): - return plug_name, ep.load() + try: + return plug_name, ep.load() + except Exception: + _logger.warning( + 'Unable to load editor {}'.format(ep.name), + exc_info=True, + ) return None, None def editors(self, name=None): @@ -81,7 +88,13 @@ def editors(self, name=None): def initialize(self, name=None): for ep in self.iterator(group="preditor.plug.initialize"): - yield ep.load() + try: + yield ep.load() + except Exception: + _logger.warning( + 'Unable to initialize plugin {}'.format(ep.name), + exc_info=True, + ) def loggerwindow(self, name=None): """Returns instances of "preditor.plug.loggerwindow" plugins. @@ -95,11 +108,23 @@ def loggerwindow(self, name=None): for ep in self.iterator(group="preditor.plug.loggerwindow"): if name and ep.name != name: continue - yield ep.name, ep.load() + try: + yield ep.name, ep.load() + except Exception: + _logger.warning( + 'Unable to load plugin {}'.format(ep.name), + exc_info=True, + ) def logging_handlers(self, name=None): for ep in self.iterator(group="preditor.plug.logging_handlers"): - yield ep.name, ep.load() + try: + yield ep.name, ep.load() + except Exception: + _logger.warning( + 'Unable to load handler {}'.format(ep.name), + exc_info=True, + ) @classmethod def iterator(cls, group=None, name=None):