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.
This commit is contained in:
Ghostkeeper 2018-02-12 11:23:43 +01:00
parent b8fce75dac
commit afeea6e214
No known key found for this signature in database
GPG Key ID: 5252B696FB5E7C7A

View File

@ -118,27 +118,30 @@ class PostProcessingPlugin(QObject, Extension):
for loader, script_name, ispkg in scripts: for loader, script_name, ispkg in scripts:
# Iterate over all scripts. # Iterate over all scripts.
if script_name not in sys.modules: 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: try:
setting_data = temp_object.getSettingData() spec = importlib.util.spec_from_file_location(__name__ + "." + script_name, os.path.join(path, script_name + ".py"))
if "name" in setting_data and "key" in setting_data: loaded_script = importlib.util.module_from_spec(spec)
self._script_labels[setting_data["key"]] = setting_data["name"] spec.loader.exec_module(loaded_script)
self._loaded_scripts[setting_data["key"]] = loaded_class sys.modules[script_name] = loaded_script
else:
Logger.log("w", "Script %s.py has no name or key", script_name) loaded_class = getattr(loaded_script, script_name)
self._script_labels[script_name] = script_name temp_object = loaded_class()
self._loaded_scripts[script_name] = loaded_class Logger.log("d", "Begin loading of script: %s", script_name)
except AttributeError: try:
Logger.log("e", "Script %s.py is not a recognised script type. Ensure it inherits Script", script_name) setting_data = temp_object.getSettingData()
except NotImplementedError: if "name" in setting_data and "key" in setting_data:
Logger.log("e", "Script %s.py has no implemented settings", script_name) 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() self.loadedScriptListChanged.emit()
loadedScriptListChanged = pyqtSignal() loadedScriptListChanged = pyqtSignal()
@ -171,18 +174,15 @@ class PostProcessingPlugin(QObject, Extension):
## Load all scripts in the scripts folders ## Load all scripts in the scripts folders
for root in [PluginRegistry.getInstance().getPluginPath("PostProcessingPlugin"), Resources.getStoragePath(Resources.Preferences)]: for root in [PluginRegistry.getInstance().getPluginPath("PostProcessingPlugin"), Resources.getStoragePath(Resources.Preferences)]:
try: path = os.path.join(root, "scripts")
path = os.path.join(root, "scripts") if not os.path.isdir(path):
if not os.path.isdir(path): try:
try: os.makedirs(path)
os.makedirs(path) except OSError:
except OSError: Logger.log("w", "Unable to create a folder for scripts: " + path)
Logger.log("w", "Unable to create a folder for scripts: " + path) continue
continue
self.loadAllScripts(path) self.loadAllScripts(path)
except Exception as e:
Logger.logException("e", "Exception occurred while loading post processing plugin: {error_msg}".format(error_msg = str(e)))
# Create the plugin dialog component # Create the plugin dialog component
path = os.path.join(PluginRegistry.getInstance().getPluginPath("PostProcessingPlugin"), "PostProcessingPlugin.qml") path = os.path.join(PluginRegistry.getInstance().getPluginPath("PostProcessingPlugin"), "PostProcessingPlugin.qml")