Source code for nrel.hive.config.config_builder

from __future__ import annotations

from typing import *


[docs]class ConfigBuilder: T = TypeVar("T")
[docs] @classmethod def build( cls, default_config: Dict, required_config: Tuple[str, ...], config_constructor: Callable[[Dict], T], config: Optional[Dict] = None, ) -> T: """ constructs a Config from a configuration Dict :param default_config: a dictionary containing default config values :param required_config: a dictionary containing required keys and their expected types :param config_constructor: a function that takes a dict and builds a Config object :param config: the Dict containing attributes to load for this Config :return: a Config, or, an error """ c = ( default_config if config is None else dict(list(default_config.items()) + list(config.items())) ) for key in required_config: value = c.get(key) if value is None: raise AttributeError(f"expected required config key {key} not found") return config_constructor(c)