fix(nodes): gracefully handle custom nodes init error

Previously, exceptions raised as custom nodes are initialized were fatal errors, causing the app to exit.

With this change, any error on import is caught and the error message printed. App continues to start up without the node.

For example, a custom node that isn't updated for v4.0.0 may raise an error on import if it is attempting to import things that no longer exist.
This commit is contained in:
psychedelicious 2024-04-02 12:38:14 +11:00
parent ab33acad5c
commit d4be945dde

View File

@ -3,6 +3,7 @@ Invoke-managed custom node loader. See README.md for more information.
""" """
import sys import sys
import traceback
from importlib.util import module_from_spec, spec_from_file_location from importlib.util import module_from_spec, spec_from_file_location
from pathlib import Path from pathlib import Path
@ -41,11 +42,15 @@ for d in Path(__file__).parent.iterdir():
logger.info(f"Loading node pack {module_name}") logger.info(f"Loading node pack {module_name}")
module = module_from_spec(spec) try:
sys.modules[spec.name] = module module = module_from_spec(spec)
spec.loader.exec_module(module) sys.modules[spec.name] = module
spec.loader.exec_module(module)
loaded_count += 1 loaded_count += 1
except Exception:
full_error = traceback.format_exc()
logger.error(f"Failed to load node pack {module_name}:\n{full_error}")
del init, module_name del init, module_name