Skip to content

Commit 8fdf5d7

Browse files
committed
refactor(config.py): improve missing config key handling
1 parent 77f5ff8 commit 8fdf5d7

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

tux/utils/config.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import base64
22
import os
33
from pathlib import Path
4-
from typing import Final
4+
from typing import Any, Final, cast
55

66
import yaml
77
from dotenv import load_dotenv
@@ -38,14 +38,18 @@ def convert_dict_str_to_int(original_dict: dict[str, int]) -> dict[int, int]:
3838
config = yaml.safe_load(config_file.read_text())
3939
config_example = yaml.safe_load(config_file_example.read_text())
4040

41-
missing_keys = set(config_example.keys()) - set(config.keys())
42-
if missing_keys:
43-
logger.warning(f"The config file is missing the following keys: {', '.join(missing_keys)}. ")
44-
logger.warning(
45-
"This has been automatically fixed by adding the missing keys with their default values TO THE LOADED CONFIG.",
46-
)
47-
for key in missing_keys:
48-
config[key] = config_example[key]
41+
42+
# Recursively merge defaults into user config (fills nested missing keys too)
43+
def merge_defaults(user: dict[str, Any], default: dict[str, Any]) -> None:
44+
for key, default_val in default.items():
45+
if key not in user:
46+
user[key] = default_val
47+
logger.warning(f"Added missing config key: {key}")
48+
elif isinstance(default_val, dict) and isinstance(user.get(key), dict):
49+
merge_defaults(user[key], cast(dict[str, Any], default_val))
50+
51+
52+
merge_defaults(config, config_example)
4953

5054

5155
class Config:

0 commit comments

Comments
 (0)