fixed jay_merge_add
This commit is contained in:
+3
-2
@@ -2,6 +2,7 @@ import json
|
|||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from jay_diff import jay_diff_full, jay_merge_full
|
from jay_diff import jay_diff_full, jay_merge_full
|
||||||
|
|
||||||
|
|
||||||
def deep_diff(data, temp_data):
|
def deep_diff(data, temp_data):
|
||||||
new_data = {}
|
new_data = {}
|
||||||
for k in data.keys():
|
for k in data.keys():
|
||||||
@@ -50,9 +51,9 @@ if __name__ == '__main__':
|
|||||||
diffed_list = []
|
diffed_list = []
|
||||||
last = {}
|
last = {}
|
||||||
for s in src:
|
for s in src:
|
||||||
diffed = jay_diff_full(last, s, combine_upd_add=diff_mode_update_add)
|
|
||||||
print(f"Old: {last}")
|
print(f"Old: {last}")
|
||||||
print(f"New: {s}")
|
print(f"New: {s}")
|
||||||
|
diffed = jay_diff_full(last, s, combine_upd_add=diff_mode_update_add)
|
||||||
print(f"Diffed: {diffed}")
|
print(f"Diffed: {diffed}")
|
||||||
diffed_list.append(deepcopy(diffed))
|
diffed_list.append(deepcopy(diffed))
|
||||||
last = deepcopy(s)
|
last = deepcopy(s)
|
||||||
@@ -60,9 +61,9 @@ if __name__ == '__main__':
|
|||||||
merged_list = []
|
merged_list = []
|
||||||
last = {}
|
last = {}
|
||||||
for d in diffed_list:
|
for d in diffed_list:
|
||||||
merged = jay_merge_full(last, d)
|
|
||||||
print(f"Old: {last}")
|
print(f"Old: {last}")
|
||||||
print(f"Diff: {d}")
|
print(f"Diff: {d}")
|
||||||
|
merged = jay_merge_full(last, d)
|
||||||
print(f"Merged: {merged}")
|
print(f"Merged: {merged}")
|
||||||
last = deepcopy(merged)
|
last = deepcopy(merged)
|
||||||
merged_list.append(deepcopy(merged))
|
merged_list.append(deepcopy(merged))
|
||||||
|
|||||||
+29
-2
@@ -84,10 +84,11 @@ def jay_merge_update(_old, _new):
|
|||||||
def jay_merge_add(_old, _new):
|
def jay_merge_add(_old, _new):
|
||||||
for k, v in _new.items():
|
for k, v in _new.items():
|
||||||
if isinstance(v, dict):
|
if isinstance(v, dict):
|
||||||
|
r = jay_merge_add(_old.get(k, {}), v)
|
||||||
if k in _old:
|
if k in _old:
|
||||||
_old[k].update(v)
|
_old[k].update(r)
|
||||||
else:
|
else:
|
||||||
_old[k] = v
|
_old[k] = r
|
||||||
else:
|
else:
|
||||||
_old[k] = _new[k]
|
_old[k] = _new[k]
|
||||||
return _old
|
return _old
|
||||||
@@ -539,3 +540,29 @@ if __name__ == '__main__':
|
|||||||
result = jay_merge_full({}, {'add': {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}})
|
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'}}
|
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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user