From 5cd6ab9335532b8b5808daa4afc73e4f08e08aea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 11 Sep 2014 12:17:45 +0200 Subject: [PATCH] More error resilience during plugin loading --- src/octoprint/plugin/core.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/octoprint/plugin/core.py b/src/octoprint/plugin/core.py index 45359346..1a4eae0e 100644 --- a/src/octoprint/plugin/core.py +++ b/src/octoprint/plugin/core.py @@ -181,15 +181,21 @@ class PluginManager(object): return None plugin = self._load_plugin(key, *module, version=version) - if plugin.check(): - return plugin - else: - self.logger.warn("Plugin \"{plugin}\" did not pass check, disabling it".format(plugin=str(plugin))) - return None + if plugin: + if plugin.check(): + return plugin + else: + self.logger.warn("Plugin \"{plugin}\" did not pass check, disabling it".format(plugin=str(plugin))) + return None + def _load_plugin(self, key, f, filename, description, version=None): - instance = imp.load_module(key, f, filename, description) - return PluginInfo(key, filename, instance, version=version) + try: + instance = imp.load_module(key, f, filename, description) + return PluginInfo(key, filename, instance, version=version) + except: + self.logger.exception("Error loading plugin {key}, disabling it".format(key=key)) + return None def _is_plugin_disabled(self, key): return key in self.plugin_disabled_list or key.endswith('disabled')