Changeset View
Changeset View
Standalone View
Standalone View
pykolab/xml/utils.py
Show First 20 Lines • Show All 241 Lines • ▼ Show 20 Lines | |||||
def compute_diff(a, b, reduced=False): | def compute_diff(a, b, reduced=False): | ||||
""" | """ | ||||
List the differences between two given dicts | List the differences between two given dicts | ||||
""" | """ | ||||
diff = [] | diff = [] | ||||
properties = a.keys() | properties = a.keys() | ||||
properties.extend([x for x in b.keys() if x not in properties]) | properties.extend([x for x in b if x not in properties]) | ||||
for prop in properties: | for prop in properties: | ||||
aa = a[prop] if a.has_key(prop) else None | aa = a[prop] if a.has_key(prop) else None | ||||
bb = b[prop] if b.has_key(prop) else None | bb = b[prop] if b.has_key(prop) else None | ||||
# compare two lists | # compare two lists | ||||
if isinstance(aa, list) or isinstance(bb, list): | if isinstance(aa, list) or isinstance(bb, list): | ||||
if not isinstance(aa, list): | if not isinstance(aa, list): | ||||
▲ Show 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | |||||
def reduce_properties(aa, bb): | def reduce_properties(aa, bb): | ||||
""" | """ | ||||
Compares two given structs and removes equal values in bb | Compares two given structs and removes equal values in bb | ||||
""" | """ | ||||
if not isinstance(aa, dict) or not isinstance(bb, dict): | if not isinstance(aa, dict) or not isinstance(bb, dict): | ||||
return (aa, bb) | return (aa, bb) | ||||
properties = aa.keys() | properties = aa.keys() | ||||
properties.extend([x for x in bb.keys() if x not in properties]) | properties.extend([x for x in bb if x not in properties]) | ||||
for prop in properties: | for prop in properties: | ||||
if not aa.has_key(prop) or not bb.has_key(prop): | if not aa.has_key(prop) or not bb.has_key(prop): | ||||
continue | continue | ||||
if isinstance(aa[prop], dict) and isinstance(bb[prop], dict): | if isinstance(aa[prop], dict) and isinstance(bb[prop], dict): | ||||
(aa[prop], bb[prop]) = reduce_properties(aa[prop], bb[prop]) | (aa[prop], bb[prop]) = reduce_properties(aa[prop], bb[prop]) | ||||
if aa[prop] == bb[prop]: | if aa[prop] == bb[prop]: | ||||
# del aa[prop] | # del aa[prop] | ||||
del bb[prop] | del bb[prop] | ||||
return (aa, bb) | return (aa, bb) |