Source code for airflow_config.ui.functions
from __future__ import annotations
from logging import getLogger
from pathlib import Path
from hydra.errors import InstantiationException
from airflow_config import ConfigNotFoundError, load_config
__all__ = (
"get_configs_from_yaml",
"get_yaml_files",
)
log = getLogger(__name__)
[docs]
def get_configs_from_yaml(yaml: str, overrides: list[str]) -> list[str]:
# Process the yaml
yaml_file = Path(yaml).resolve()
try:
cfg = load_config(str(yaml_file.parent.name), yaml_file.name, overrides=overrides, basepath=str(yaml_file))
except (ConfigNotFoundError, InstantiationException):
log.exception(f"Error loading YAML file {yaml}")
return ""
if not cfg:
return ""
return str(cfg.model_dump_json(exclude_unset=True, indent=2))
[docs]
def get_yaml_files(dags_folder: str) -> list[Path]:
# Look for yamls inside the dags folder
yamls = []
base_path = Path(dags_folder)
# Look if the file directly instantiates a BalancerConfiguration
for path in base_path.glob("**/*.yaml"):
if path.is_file() and "_target_: airflow_config.Configuration" in path.read_text():
yamls.append(path)
len_yamls = len(yamls)
len_yamls_last = 0
# If we have yamls, look for any that reference them
while len_yamls != len_yamls_last:
for path in base_path.glob("**/*.yaml"):
if path.is_file() and path not in yamls:
# Check and see if this references any existing yamls
for yaml in yamls:
if path.parent == yaml.parent and f"{yaml.stem}@" in path.read_text():
yamls.append(path)
break
len_yamls_last = len_yamls
len_yamls = len(yamls)
return sorted(yamls)