|
@@ -31,7 +31,7 @@ def mac2id(mac):
|
|
|
return mac.lower().replace(':', '')
|
|
|
|
|
|
|
|
|
-def dict_merge(a, b):
|
|
|
+def dict_merge(a, b, overwrite_lists=True):
|
|
|
'''recursively merges dict's. not just simple a['key'] = b['key'], if
|
|
|
both a and bhave a key who's value is a dict then dict_merge is called
|
|
|
on both values and the result stored in the returned dictionary.'''
|
|
@@ -39,12 +39,19 @@ def dict_merge(a, b):
|
|
|
return b
|
|
|
result = deepcopy(a)
|
|
|
for k, v in b.iteritems():
|
|
|
- if k in result and isinstance(result[k], dict):
|
|
|
- result[k] = dict_merge(result[k], v)
|
|
|
- elif k in result and isinstance(result[k], list):
|
|
|
- result[k] = result[k] + [deepcopy(x) for x in v if x not in result[k]]
|
|
|
- else:
|
|
|
- result[k] = deepcopy(v)
|
|
|
+ if k in result:
|
|
|
+ if isinstance(result[k], dict):
|
|
|
+ result[k] = dict_merge(result[k], v)
|
|
|
+ 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]]
|
|
|
+ continue
|
|
|
+
|
|
|
+ result[k] = deepcopy(v)
|
|
|
return result
|
|
|
|
|
|
|