generalize helper for loading module from source (#2862)

This commit is contained in:
Bowen Liang
2024-03-28 11:37:26 +08:00
committed by GitHub
parent c8b82b9d08
commit 08b727833e
10 changed files with 145 additions and 77 deletions

View File

@@ -1,5 +1,4 @@
import enum
import importlib.util
import json
import logging
import os
@@ -7,6 +6,7 @@ from typing import Any, Optional
from pydantic import BaseModel
from core.utils.module_import_helper import load_single_subclass_from_source
from core.utils.position_helper import sort_to_dict_by_position_map
@@ -73,17 +73,9 @@ class Extensible:
# Dynamic loading {subdir_name}.py file and find the subclass of Extensible
py_path = os.path.join(subdir_path, extension_name + '.py')
spec = importlib.util.spec_from_file_location(extension_name, py_path)
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
extension_class = None
for name, obj in vars(mod).items():
if isinstance(obj, type) and issubclass(obj, cls) and obj != cls:
extension_class = obj
break
if not extension_class:
try:
extension_class = load_single_subclass_from_source(extension_name, py_path, cls)
except Exception:
logging.warning(f"Missing subclass of {cls.__name__} in {py_path}, Skip.")
continue