daemon: adjustments to load local emane models and config services better using a full import

This commit is contained in:
Blake Harnden 2021-05-07 22:49:58 -07:00
parent 3a08b13d6e
commit 85c5ad22e4
4 changed files with 80 additions and 27 deletions

View file

@ -328,7 +328,22 @@ def load_config(file_path: Path, d: Dict[str, str]) -> None:
logger.exception("error reading file to dict: %s", file_path)
def load_classes(path: Path, clazz: Generic[T]) -> T:
def load_module(import_statement: str, clazz: Generic[T]) -> List[T]:
classes = []
try:
module = importlib.import_module(import_statement)
members = inspect.getmembers(module, lambda x: _is_class(module, x, clazz))
for member in members:
valid_class = member[1]
classes.append(valid_class)
except Exception:
logger.exception(
"unexpected error during import, skipping: %s", import_statement
)
return classes
def load_classes(path: Path, clazz: Generic[T]) -> List[T]:
"""
Dynamically load classes for use within CORE.
@ -352,16 +367,8 @@ def load_classes(path: Path, clazz: Generic[T]) -> T:
continue
import_statement = f"{path.name}.{p.stem}"
logger.debug("importing custom module: %s", import_statement)
try:
module = importlib.import_module(import_statement)
members = inspect.getmembers(module, lambda x: _is_class(module, x, clazz))
for member in members:
valid_class = member[1]
classes.append(valid_class)
except Exception:
logger.exception(
"unexpected error during import, skipping: %s", import_statement
)
loaded = load_module(import_statement, clazz)
classes.extend(loaded)
return classes