Skip to content
This repository was archived by the owner on Mar 7, 2025. It is now read-only.

Commit 04377e2

Browse files
authored
Settings: Use most recent upgrader used in other l3uddz projects (#300)
1 parent a6f8c8d commit 04377e2

File tree

1 file changed

+37
-22
lines changed

1 file changed

+37
-22
lines changed

roles/settings/files/settings-updater.py

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -86,28 +86,43 @@ def dump_settings(settings, file_to_dump):
8686
return dumped
8787

8888

89-
def upgrade_settings(defaults, current, key=None):
90-
upgraded = False
91-
res = CommentedMap()
92-
for k, v in defaults.items():
93-
if k not in current:
94-
res[k] = v
95-
upgraded = True
96-
log.info("Added field: \'%s%s\'.", k, '' if not key else ' to \'%s\'.' % key)
97-
else:
98-
res[k] = current[k]
99-
100-
if hasattr(v, 'items'):
101-
if k in current:
102-
sub_upgrade, res[k] = upgrade_settings(v, current[k], k)
103-
if sub_upgrade:
104-
upgraded = True
105-
else:
106-
res[k] = v
107-
upgraded = True
108-
109-
return upgraded, res
110-
89+
def _inner_upgrade(settings1, settings2, key=None, overwrite=False):
90+
sub_upgraded = False
91+
merged = settings2.copy()
92+
93+
if isinstance(settings1, dict):
94+
for k, v in settings1.items():
95+
# missing k
96+
if k not in settings2:
97+
merged[k] = v
98+
sub_upgraded = True
99+
if not key:
100+
log.info("Added %r setting: %s", str(k), str(v))
101+
else:
102+
log.info("Added %r to setting %r: %s", str(k), str(key), str(v))
103+
continue
104+
105+
# iterate children
106+
if isinstance(v, dict) or isinstance(v, list):
107+
merged[k], did_upgrade = _inner_upgrade(settings1[k], settings2[k], key=k,
108+
overwrite=overwrite)
109+
sub_upgraded = did_upgrade if did_upgrade else sub_upgraded
110+
elif settings1[k] != settings2[k] and overwrite:
111+
merged = settings1
112+
sub_upgraded = True
113+
elif isinstance(settings1, list) and key:
114+
for v in settings1:
115+
if v not in settings2:
116+
merged.append(v)
117+
sub_upgraded = True
118+
log.info("Added to setting %r: %s", str(key), str(v))
119+
continue
120+
121+
return merged, sub_upgraded
122+
123+
def upgrade_settings(defaults, currents):
124+
upgraded_settings, upgraded = _inner_upgrade(defaults, currents)
125+
return upgraded, upgraded_settings
111126

112127
############################################################
113128
# MAIN

0 commit comments

Comments
 (0)