mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-17 16:24:40 +04:00
implement support for yaml !Env tag
This way environment variables van be referenced in the
.pre-commit-config.yaml, e.g.
cfg: !Env "${PRE_COMMIT_CONFIG_PATH}/.oelint-adv.yaml"
This commit is contained in:
parent
bc89707d15
commit
5d938325c4
1 changed files with 15 additions and 0 deletions
|
|
@ -1,11 +1,26 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import functools
|
||||
import os
|
||||
import re
|
||||
from typing import Any
|
||||
|
||||
import yaml
|
||||
|
||||
|
||||
def env_constructor(loader: yaml.Loader, node: yaml.ScalarNode) -> str:
|
||||
"""Load !Env tag"""
|
||||
value = str(loader.construct_scalar(node))
|
||||
match = re.compile('.*?\\${(\\w+)}.*?').findall(value)
|
||||
if match:
|
||||
for key in match:
|
||||
value = value.replace(f'${{{key}}}', os.getenv(key, ''))
|
||||
return value
|
||||
|
||||
|
||||
Loader = getattr(yaml, 'CSafeLoader', yaml.SafeLoader)
|
||||
Loader.add_constructor(tag='!Env', constructor=env_constructor)
|
||||
|
||||
yaml_compose = functools.partial(yaml.compose, Loader=Loader)
|
||||
yaml_load = functools.partial(yaml.load, Loader=Loader)
|
||||
Dumper = getattr(yaml, 'CSafeDumper', yaml.SafeDumper)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue