fixed jay_merge_add

This commit is contained in:
2024-10-20 18:57:29 +02:00
parent 7eb0acc2f3
commit 1598bf56c3
2 changed files with 32 additions and 4 deletions
+3 -2
View File
@@ -2,6 +2,7 @@ import json
from copy import deepcopy
from jay_diff import jay_diff_full, jay_merge_full
def deep_diff(data, temp_data):
new_data = {}
for k in data.keys():
@@ -50,9 +51,9 @@ if __name__ == '__main__':
diffed_list = []
last = {}
for s in src:
diffed = jay_diff_full(last, s, combine_upd_add=diff_mode_update_add)
print(f"Old: {last}")
print(f"New: {s}")
diffed = jay_diff_full(last, s, combine_upd_add=diff_mode_update_add)
print(f"Diffed: {diffed}")
diffed_list.append(deepcopy(diffed))
last = deepcopy(s)
@@ -60,9 +61,9 @@ if __name__ == '__main__':
merged_list = []
last = {}
for d in diffed_list:
merged = jay_merge_full(last, d)
print(f"Old: {last}")
print(f"Diff: {d}")
merged = jay_merge_full(last, d)
print(f"Merged: {merged}")
last = deepcopy(merged)
merged_list.append(deepcopy(merged))
+29 -2
View File
@@ -84,10 +84,11 @@ def jay_merge_update(_old, _new):
def jay_merge_add(_old, _new):
for k, v in _new.items():
if isinstance(v, dict):
r = jay_merge_add(_old.get(k, {}), v)
if k in _old:
_old[k].update(v)
_old[k].update(r)
else:
_old[k] = v
_old[k] = r
else:
_old[k] = _new[k]
return _old
@@ -539,3 +540,29 @@ if __name__ == '__main__':
result = jay_merge_full({}, {'add': {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}})
assert result == {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}
result = jay_merge_full({}, {'add': {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': {'coffee': {'h': 'black'}}}}})
assert result == {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': {'coffee': {'h': 'black'}}}}
result = jay_merge_full({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': {'coffee': {'h': 'black'}}}}, {'add': {'c': {'f': {'coffee': {'j': 'sugar'}}}}})
assert result == {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': {'coffee': {'h': 'black', 'j': 'sugar'}}}}
old = {'charging': {
'batteryStatus': {'value': {'carCapturedTimestamp': '2024-10-19T05:34:34Z', 'cruisingRangeElectric_km': 192}},
'chargingStatus': {'value': {'carCapturedTimestamp': '2024-10-19T05:34:34Z'}},
'chargingSettings': {'value': {'carCapturedTimestamp': '2024-10-19T05:34:30Z'}},
'plugStatus': {'value': {'carCapturedTimestamp': '2024-10-19T05:34:29Z'}}}}
update = {'charging': {
'batteryStatus': {'value': {'carCapturedTimestamp': '2024-10-19T05:35:46Z', 'cruisingRangeElectric_km': 191}},
'chargingStatus': {'value': {'carCapturedTimestamp': '2024-10-19T05:35:46Z'}}}}
add = {'charging': {
'batteryStatus': {'value': {'currentSOC_pct': 55}}},
'fuelStatus': {'rangeStatus': {'value': {'primaryEngine': {'currentSOC_pct': 55}}}},
'measurements': {'fuelLevelStatus': {'value': {'currentSOC_pct': 55}}}}
delete = {'charging': {
'chargingSettings': {'value': {'carCapturedTimestamp': '2024-10-19T05:34:30Z'}},
'plugStatus': {'value': {'carCapturedTimestamp': '2024-10-19T05:34:29Z'}}}}
result = jay_merge_full(old, {'update':update, 'add':add, 'delete':delete})
assert result == old