From 9c9971bbf81b93e8c003f52ba982f29bacc2adf6 Mon Sep 17 00:00:00 2001 From: Serge Bazanski <q3k@q3k.org> Date: Wed, 16 Aug 2023 13:46:38 +0200 Subject: [PATCH] st3m: correcly merge settings dicts This makes settings persistence actually work. --- python_payload/st3m/settings.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/python_payload/st3m/settings.py b/python_payload/st3m/settings.py index 4877b31bc2..65334a99a3 100644 --- a/python_payload/st3m/settings.py +++ b/python_payload/st3m/settings.py @@ -320,13 +320,25 @@ def load_all() -> None: setting.load(data) +def _update(d: Dict[str, Any], u: Dict[str, Any]) -> Dict[str, Any]: + """ + Recursive update dictionary. + """ + for k, v in u.items(): + if type(v) == type({}): + d[k] = _update(d.get(k, {}), v) + else: + d[k] = v + return d + + def save_all() -> None: """ Save all settings to flash. """ - res = {} + res: Dict[str, Any] = {} for setting in all_settings: - res.update(setting.save()) + res = _update(res, setting.save()) try: with open("/flash/settings.json", "w") as f: json.dump(res, f) -- GitLab