Browse Source

dict_merge: fix overwrite_lists=False

The used code was not suitable to actually merge the lists (it generated
a new list of all items not present in the original list), and the
overwrite_lists flag was not propagated to recursive calls.
Helge Jung 9 years ago
parent
commit
c3a2105d32
1 changed files with 5 additions and 2 deletions
  1. 5 2
      ffstatus/__init__.py

+ 5 - 2
ffstatus/__init__.py

@@ -43,14 +43,17 @@ def dict_merge(a, b, overwrite_lists=True):
     for k, v in b.iteritems():
         if k in result:
             if isinstance(result[k], dict):
-                result[k] = dict_merge(result[k], v)
+                result[k] = dict_merge(result[k], v,
+                                       overwrite_lists=overwrite_lists)
                 continue
 
             if isinstance(result[k], list):
                 if overwrite_lists:
                     result[k] = [deepcopy(x) for x in v]
                 else:
-                    result[k] = [deepcopy(x) for x in v if x not in result[k]]
+                    for x in v:
+                        if x not in result[k]:
+                            result[k].append(deepcopy(x))
                 continue
 
         result[k] = deepcopy(v)