From ae5286cbf5d6842dd4369a406e41a57230ac140f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20K=C3=BCnzel?= <simonk@fsmpi.rwth-aachen.de> Date: Sat, 12 Oct 2024 18:01:30 +0200 Subject: [PATCH] Move config loading to common --- src/videoag_common/__init__.py | 13 +++++++++++++ src/videoag_common/miscellaneous/util.py | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/videoag_common/__init__.py b/src/videoag_common/__init__.py index e69de29..d75bae0 100644 --- a/src/videoag_common/__init__.py +++ b/src/videoag_common/__init__.py @@ -0,0 +1,13 @@ +import os +from pathlib import Path + +from videoag_common.miscellaneous.util import load_config_file, merge_config_with + +if "VIDEOAG_CONFIG" not in os.environ: + raise Exception("Missing VIDEOAG_CONFIG environment variable") +config = load_config_file(Path(os.getcwd()).joinpath(os.environ["VIDEOAG_CONFIG"])) +if "VIDEOAG_TEST_CONFIG_OVERRIDE" in os.environ: + merge_config_with( + config, + load_config_file(Path(os.getcwd()).joinpath(os.environ["VIDEOAG_TEST_CONFIG_OVERRIDE"])) + ) diff --git a/src/videoag_common/miscellaneous/util.py b/src/videoag_common/miscellaneous/util.py index 8d11326..cab39c8 100644 --- a/src/videoag_common/miscellaneous/util.py +++ b/src/videoag_common/miscellaneous/util.py @@ -112,3 +112,16 @@ def load_config_file(path: Path): if key.isupper(): config[key] = getattr(config_module, key) return config + + +def merge_config_with(config: dict, to_merge: dict, overwrite_non_mergeable: bool = False): + for key, item in to_merge: + if key not in config: + config[key] = item + elif isinstance(item, dict) and isinstance(config[key], dict): + merge_config_with(config[key], item) + elif overwrite_non_mergeable: + config[key] = item + else: + # Don't leak config values, might contain passwords, etc. + raise ValueError(f"Can't merge {type(item)} into {type(config[key])} for key {key}") -- GitLab