Skip to content

Commit

Permalink
Added env vars using {<varname>[:default]} syntax (#48)
Browse files Browse the repository at this point in the history
  • Loading branch information
natsunlee committed Jan 30, 2024
1 parent 33bb4ce commit de69287
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 22 deletions.
27 changes: 24 additions & 3 deletions flowmancer/jobdefinition/file.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,35 @@
import os
import re
from typing import Any, Callable, Pattern

import yaml
from pyaml_env import parse_config

from . import JobDefinition, SerializableJobDefinition, job_definition

_env_var_matcher = re.compile(r'\$ENV{([^}^{]+)}')
_env_tag_matcher = re.compile(r'[^$]*\$ENV{([^}^{]+)}.*')

# TODO: parameters file
# _param_var_matcher = re.compile(r'\$PARAM{([^}^{]+)}')
# _param_tag_matcher = re.compile(r'[^$]*\$PARAM{([^}^{]+)}.*')


def _build_constructor(var_matcher: Pattern[str]) -> Callable[[Any, Any], str]:
def _path_constructor(_: Any, node: Any) -> str:
def replace_fn(match):
parts = f"{match.group(1)}:".split(":")
return os.environ.get(parts[0], parts[1])
return var_matcher.sub(replace_fn, node.value)
return _path_constructor


@job_definition('yaml')
class YAMLJobDefinition(SerializableJobDefinition):
def load(self, filename: str) -> JobDefinition:
j = parse_config(filename)
return JobDefinition(**j)
yaml.add_implicit_resolver("!envvar", _env_tag_matcher, None, yaml.SafeLoader)
yaml.add_constructor("!envvar", _build_constructor(_env_var_matcher), yaml.SafeLoader)
with open(filename, 'r') as f:
return JobDefinition(**yaml.safe_load(f.read()))

def dump(self, jdef: JobDefinition, filename: str) -> None:
with open(filename, 'r') as f:
Expand Down
19 changes: 1 addition & 18 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ readme = "README.md"
[tool.poetry.dependencies]
python = '^3.7'
PyYAML = '^6.0.1'
pyaml-env = '^1.2.1'
pydantic = '^1.9.0'
rich = '^12.0.0'
urllib3 = "1.26.18"
requests = "^2.31.0"
types-pyyaml = "^6.0.12.12"

[tool.poetry.group.dev.dependencies]
black = '^22.1.0'
Expand Down

0 comments on commit de69287

Please sign in to comment.