Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _load_cfg(self, cfg_str:str, cfg_path:str='', ext_vars:dict=None, base=None) -> Dict[str, Any]:
"""Loads a configuration string (yaml or jsonnet) into a namespace checking all values against the parser.
Args:
cfg_str (str): The configuration content.
cfg_path (str): Optional path to original config path, just for error printing.
ext_vars (dict): Optional external variables used for parsing jsonnet.
base (str or None): Base key to prepend.
Raises:
TypeError: If there is an invalid value according to the parser.
"""
if self.parser_mode == 'jsonnet':
ext_vars, ext_codes = ActionJsonnet.split_ext_vars(ext_vars)
cfg_str = _jsonnet.evaluate_snippet(cfg_path, cfg_str, ext_vars=ext_vars, ext_codes=ext_codes) # type: ignore
try:
cfg = yaml.safe_load(cfg_str)
except Exception as ex:
raise type(ex)('Problems parsing config :: '+str(ex))
cfg = namespace_to_dict(_dict_to_flat_namespace(cfg))
if base is not None:
cfg = {base+'.'+k: v for k, v in cfg.items()}
for action in self._actions:
if action.dest in cfg:
value = self._check_value_key(action, cfg[action.dest], action.dest, cfg)
if isinstance(action, ActionParser):
value = namespace_to_dict(_dict_to_flat_namespace(namespace_to_dict(value)))
if '__path__' in value:
value[action.dest+'.__path__'] = value.pop('__path__')
del cfg[action.dest]