[jay_diff_upd]
- no update on highler dict on lower level add
This commit is contained in:
+20
-18
@@ -34,7 +34,8 @@ def jay_diff_upd(temp_data, data, add_if_not_exist=False):
|
||||
if k in temp_data:
|
||||
if isinstance(data[k], dict):
|
||||
res = jay_diff_upd(temp_data[k], data[k], add_if_not_exist)
|
||||
new_data[k] = res
|
||||
if len(res.keys()):
|
||||
new_data[k] = res
|
||||
elif data[k] != temp_data[k]:
|
||||
new_data[k] = data[k]
|
||||
elif add_if_not_exist:
|
||||
@@ -80,7 +81,7 @@ def jay_merge_update(d, u):
|
||||
return d
|
||||
|
||||
|
||||
def jay_merge_plus(d, u):
|
||||
def jay_merge_add(d, u):
|
||||
for k, v in u.items():
|
||||
if isinstance(v, dict):
|
||||
if k in d:
|
||||
@@ -92,10 +93,10 @@ def jay_merge_plus(d, u):
|
||||
return d
|
||||
|
||||
|
||||
def jay_merge_minus(d, u):
|
||||
def jay_merge_delete(d, u):
|
||||
for k, v in u.items():
|
||||
if isinstance(v, dict):
|
||||
jay_merge_minus(d[k], u[k])
|
||||
jay_merge_delete(d[k], u[k])
|
||||
else:
|
||||
if k in d:
|
||||
del d[k]
|
||||
@@ -164,7 +165,7 @@ if __name__ == '__main__':
|
||||
assert diffed == {'c':'coke'}
|
||||
|
||||
diffed = jay_diff_upd({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke'}}, {'c': {'f': 'coffee'}})
|
||||
assert diffed == {'c': {}}
|
||||
assert diffed == {}
|
||||
|
||||
diffed = jay_diff_upd({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'a':'hamburger', 'b':'fries', 'c': {'e': 'pepsi', 'f': 'coffee'}})
|
||||
assert diffed == {'c': {'e': 'pepsi'}}
|
||||
@@ -224,7 +225,7 @@ if __name__ == '__main__':
|
||||
assert diffed == {'add': {'b': 'fries'}, 'delete': {'d': 'icecream'}, 'update': {'c': 'coke'}}
|
||||
|
||||
diffed = jay_diff_full({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke'}}, {'c': {'f': 'coffee'}}, combine_upd_add=False)
|
||||
assert diffed == {'add': {'c': {'f': 'coffee'}}, 'delete': {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke'}}, 'update': {'c': {}}}
|
||||
assert diffed == {'add': {'c': {'f': 'coffee'}}, 'delete': {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke'}}}
|
||||
|
||||
diffed = jay_diff_full({'a': 'hamburger', 'c': 'pepsi', 'd': 'icecream'}, {'a': 'hamburger', 'b': 'fries', 'c': 'coke'}, combine_upd_add=False)
|
||||
assert diffed == {'add': {'b': 'fries'}, 'delete': {'d': 'icecream'}, 'update': {'c': 'coke'}}
|
||||
@@ -245,10 +246,10 @@ if __name__ == '__main__':
|
||||
assert diffed == {'delete': {'c': {'e': 'coke', 'f': 'coffee'}}}
|
||||
|
||||
diffed = jay_diff_full({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}}, combine_upd_add=False)
|
||||
assert diffed == {'delete': {'c': {'e': 'coke'}}, 'update': {'c': {}}}
|
||||
assert diffed == {'delete': {'c': {'e': 'coke'}}}
|
||||
|
||||
diffed = jay_diff_full({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'c': {'e': 'coke'}}, combine_upd_add=False)
|
||||
assert diffed == {'delete': {'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}}, 'update': {'c': {}}}
|
||||
assert diffed == {'delete': {'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}}}
|
||||
|
||||
diffed = jay_diff_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'a':'hotdog', 'b':'potatoes'}, combine_upd_add=False)
|
||||
assert diffed == {'delete': {'c': {'e': 'coke', 'f': 'coffee'}}, 'update': {'a': 'hotdog', 'b': 'potatoes'}}
|
||||
@@ -278,23 +279,24 @@ if __name__ == '__main__':
|
||||
assert diffed == {'add': {'c': {'h': 'cake'}}, 'update': {'c': {'e': 'pepsi'}}}
|
||||
|
||||
# Merge
|
||||
merged = jay_merge_plus({}, {'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}})
|
||||
merged = jay_merge_add({}, {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}})
|
||||
assert merged == {'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}
|
||||
|
||||
merged = jay_merge_plus({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'d':'icecream'})
|
||||
merged = jay_merge_add({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'d': 'icecream'})
|
||||
assert merged == {'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}, 'd':'icecream'}
|
||||
|
||||
merged = jay_merge_minus({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}, 'd':'icecream'}, {'d':'icecream'})
|
||||
merged = jay_merge_add({'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}}, {'d': 'icecream'})
|
||||
assert merged == {'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}, 'd':'icecream'}
|
||||
|
||||
merged = jay_merge_add({'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}, 'd': 'icecream'}, {'d': 'icecream'})
|
||||
assert merged == {'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}, 'd':'icecream'}
|
||||
|
||||
merged = jay_merge_delete({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}, 'd': 'icecream'}, {'d': 'icecream'})
|
||||
assert merged == {'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}
|
||||
|
||||
merged = jay_merge_minus({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'c': {'f': 'coffee'}})
|
||||
merged = jay_merge_delete({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'c': {'f': 'coffee'}})
|
||||
assert merged == {'a':'hamburger', 'b':'fries', 'c': {'e': 'coke'}}
|
||||
|
||||
merged = jay_merge_minus({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'c': {'e': 'coke'}})
|
||||
merged = jay_merge_delete({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'c': {'e': 'coke'}})
|
||||
assert merged == {'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}}
|
||||
|
||||
merged = jay_merge_plus({'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}}, {'d':'icecream'})
|
||||
assert merged == {'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}, 'd':'icecream'}
|
||||
|
||||
merged = jay_merge_plus({'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}, 'd':'icecream'}, {'d':'icecream'})
|
||||
assert merged == {'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}, 'd':'icecream'}
|
||||
|
||||
Reference in New Issue
Block a user