From afeea6e21468fc86800ca39523f76a0ddcdacf3c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 12 Feb 2018 11:23:43 +0100 Subject: [PATCH] Don't interrupt loading scripts when one error occurs Instead of breaking the loading of the rest of the scripts, just don't load this particular one. --- .../PostProcessingPlugin.py | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.py b/plugins/PostProcessingPlugin/PostProcessingPlugin.py index 2c6fc3f492..f491afbec0 100644 --- a/plugins/PostProcessingPlugin/PostProcessingPlugin.py +++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.py @@ -118,27 +118,30 @@ class PostProcessingPlugin(QObject, Extension): for loader, script_name, ispkg in scripts: # Iterate over all scripts. if script_name not in sys.modules: - spec = importlib.util.spec_from_file_location(__name__ + "." + script_name, os.path.join(path, script_name + ".py")) - loaded_script = importlib.util.module_from_spec(spec) - spec.loader.exec_module(loaded_script) - sys.modules[script_name] = loaded_script - - loaded_class = getattr(loaded_script, script_name) - temp_object = loaded_class() - Logger.log("d", "Begin loading of script: %s", script_name) try: - setting_data = temp_object.getSettingData() - if "name" in setting_data and "key" in setting_data: - self._script_labels[setting_data["key"]] = setting_data["name"] - self._loaded_scripts[setting_data["key"]] = loaded_class - else: - Logger.log("w", "Script %s.py has no name or key", script_name) - self._script_labels[script_name] = script_name - self._loaded_scripts[script_name] = loaded_class - except AttributeError: - Logger.log("e", "Script %s.py is not a recognised script type. Ensure it inherits Script", script_name) - except NotImplementedError: - Logger.log("e", "Script %s.py has no implemented settings", script_name) + spec = importlib.util.spec_from_file_location(__name__ + "." + script_name, os.path.join(path, script_name + ".py")) + loaded_script = importlib.util.module_from_spec(spec) + spec.loader.exec_module(loaded_script) + sys.modules[script_name] = loaded_script + + loaded_class = getattr(loaded_script, script_name) + temp_object = loaded_class() + Logger.log("d", "Begin loading of script: %s", script_name) + try: + setting_data = temp_object.getSettingData() + if "name" in setting_data and "key" in setting_data: + self._script_labels[setting_data["key"]] = setting_data["name"] + self._loaded_scripts[setting_data["key"]] = loaded_class + else: + Logger.log("w", "Script %s.py has no name or key", script_name) + self._script_labels[script_name] = script_name + self._loaded_scripts[script_name] = loaded_class + except AttributeError: + Logger.log("e", "Script %s.py is not a recognised script type. Ensure it inherits Script", script_name) + except NotImplementedError: + Logger.log("e", "Script %s.py has no implemented settings", script_name) + except Exception as e: + Logger.logException("e", "Exception occurred while loading post processing plugin: {error_msg}".format(error_msg = str(e))) self.loadedScriptListChanged.emit() loadedScriptListChanged = pyqtSignal() @@ -171,18 +174,15 @@ class PostProcessingPlugin(QObject, Extension): ## Load all scripts in the scripts folders for root in [PluginRegistry.getInstance().getPluginPath("PostProcessingPlugin"), Resources.getStoragePath(Resources.Preferences)]: - try: - path = os.path.join(root, "scripts") - if not os.path.isdir(path): - try: - os.makedirs(path) - except OSError: - Logger.log("w", "Unable to create a folder for scripts: " + path) - continue + path = os.path.join(root, "scripts") + if not os.path.isdir(path): + try: + os.makedirs(path) + except OSError: + Logger.log("w", "Unable to create a folder for scripts: " + path) + continue - self.loadAllScripts(path) - except Exception as e: - Logger.logException("e", "Exception occurred while loading post processing plugin: {error_msg}".format(error_msg = str(e))) + self.loadAllScripts(path) # Create the plugin dialog component path = os.path.join(PluginRegistry.getInstance().getPluginPath("PostProcessingPlugin"), "PostProcessingPlugin.qml")