"""Functions to get the parameters from the YAML files during the importing.""" import logging import os from os import path import re import yaml logger = logging.getLogger(__name__) YAML_ENVVAR_RGX = re.compile(r'^ENV\[(.*)\]$') def _parse_envvar(token): """Parse a string containing an ENV variable. Args: token (str): String from the config file. Returns: str: Name of an environment variable. """ return YAML_ENVVAR_RGX.match(token).groups()[0] def _yaml_envvar_constructor(loader, node): """Get the variable value from the environment. Args: loader (Loader): An instance of a yaml.Loader class. node (ScalarNode): An instance of a node of a config. Returns: str: The value of an environment variable. """ token = loader.construct_scalar(node) env_var = _parse_envvar(token) if env_var in os.environ: return os.environ[env_var] logger.warning('Undefined env var: {}'.format(env_var)) return None yaml.add_implicit_resolver('!env_var', YAML_ENVVAR_RGX) yaml.add_constructor('!env_var', _yaml_envvar_constructor) def getconf(name, ext='yml'): """Get the configuration parameters from the YAML stream. Args: name (str): A name of a file. ext (str): An extension of the file. Returns: dict: The values of a config. """ filename = '.'.join((name, ext)) logger.debug('loading config file %s', filename) basepath = path.dirname(__file__) with open(f'{basepath}/{filename}', 'r') as f: data = f.read() return yaml.full_load(data)