Source code for full_dia.cfg
from pathlib import Path
import yaml
from full_dia.log import Logger
logger = Logger.get_logger()
params = {}
[docs]
def flatten_yaml(cfg_dict: dict) -> dict:
"""
Remove the first domain for a yaml file.
"""
result = {}
for k, v in cfg_dict.items():
if isinstance(v, dict):
result = result | v
else:
result[k] = v
return result
[docs]
def load_default():
"""
Load the default.yaml file in cfg folder
"""
global params
default_path = Path(__file__).parent / "cfg" / "default.yaml"
with open(default_path, encoding="utf-8") as f:
raw = yaml.safe_load(f)
params = flatten_yaml(raw)
for k, v in params.items():
globals()[k] = v
[docs]
def update_from_yaml(yaml_path):
"""
Update params from a yaml file provided by '-cfg_develop' param.
"""
if yaml_path is None:
return
global params
yaml_path = Path(yaml_path)
if not (yaml_path.is_file() and yaml_path.suffix.lower() in {".yml", ".yaml"}):
raise ValueError(f"Invalid YAML config file: {yaml_path}")
with open(yaml_path, encoding="utf-8") as f:
raw = yaml.safe_load(f)
params_new = flatten_yaml(raw)
# log changed params
for k, v in params_new.items():
if k in params and params[k] != v:
info = "param changed: {}, {} -> {}".format(k, params[k], v)
logger.info(info)
params = {**params, **params_new}
for k, v in params.items():
globals()[k] = v