INNER CODE UNIT · Python
envvar_constructor
opsdroid/opsdroid · opsdroid/configuration/__init__.py:99
def envvar_constructor(loader, node):
"""Yaml parser for env vars."""
return os.path.expandvars(node.value)
yaml.SafeLoader.add_implicit_resolver("!envvar", env_var_pattern, None)
yaml.SafeLoader.add_constructor("!envvar", envvar_constructor)
try:
with open(config_path, "r") as stream:
_LOGGER.info(_("Loaded config from %s."), config_path)
data = yaml.load(stream, Loader=yaml.SafeLoader)
# Resolvers do not run correctly on JSON so if the config is a JSON
# file dump it to a temporary file as YAML and read it back in again.
if config_path.endswith(".json"):
with tempfile.NamedTemporaryFile("r+") as tmp:
yaml.dump(data, tmp, allow_unicode=True)