55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
import os
|
|
import importlib
|
|
import traceback
|
|
import logging
|
|
|
|
MODULE_PATH = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
LOG_PREFIX = "JNComfy: "
|
|
|
|
def load_patches():
|
|
error_messages = []
|
|
patches = {}
|
|
|
|
for filename in sorted(os.listdir(MODULE_PATH)):
|
|
module_name, extension = os.path.splitext(filename)
|
|
|
|
if extension not in ["", ".py"] or module_name.startswith("__"):
|
|
continue
|
|
|
|
try:
|
|
module = importlib.import_module(
|
|
f"patch.{module_name}", package=__package__
|
|
)
|
|
|
|
if hasattr(module, "PATCHES"):
|
|
patches.update(getattr(module, "PATCHES"))
|
|
|
|
logging.debug(f"{LOG_PREFIX}Imported '{module_name}' patch")
|
|
|
|
except Exception:
|
|
error_message = traceback.format_exc()
|
|
error_messages.append(f"Failed to import patch '{module_name}' because {error_message}")
|
|
|
|
if len(error_messages) > 0:
|
|
logging.warning(
|
|
f"{LOG_PREFIX}Some patches failed to load:\n\n"
|
|
+ "\n".join(error_messages)
|
|
)
|
|
|
|
return patches
|
|
|
|
def apply_patches(config):
|
|
patches = load_patches()
|
|
|
|
for name in sorted(patches):
|
|
logging.info(f"{LOG_PREFIX}Applying patch '{name}'")
|
|
|
|
try:
|
|
patches[name](config)
|
|
|
|
logging.info(f"{LOG_PREFIX}Applying patch '{name}' APPLIED")
|
|
except Exception:
|
|
error_message = traceback.format_exc()
|
|
logging.error(f"{LOG_PREFIX}Applying patch '{name}' FAILED:\n\n{error_message}")
|