mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-19 17:14:43 +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
|
from __future__ import annotations
|
||||||
|
|
||||||
import functools
|
import functools
|
||||||
|
import os
|
||||||
|
import re
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
import yaml
|
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 = getattr(yaml, 'CSafeLoader', yaml.SafeLoader)
|
||||||
|
Loader.add_constructor(tag='!Env', constructor=env_constructor)
|
||||||
|
|
||||||
yaml_compose = functools.partial(yaml.compose, Loader=Loader)
|
yaml_compose = functools.partial(yaml.compose, Loader=Loader)
|
||||||
yaml_load = functools.partial(yaml.load, Loader=Loader)
|
yaml_load = functools.partial(yaml.load, Loader=Loader)
|
||||||
Dumper = getattr(yaml, 'CSafeDumper', yaml.SafeDumper)
|
Dumper = getattr(yaml, 'CSafeDumper', yaml.SafeDumper)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue