Files
we_collect/deep_diff.py
T
2024-10-20 13:52:13 +02:00

73 lines
1.9 KiB
Python

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():
if isinstance(data[k], dict):
if k not in temp_data:
temp_data[k] = {}
temp = deep_diff(data[k], temp_data[k])
if temp:
new_data[k] = {}
new_data[k] = temp
else:
if k in temp_data:
if data[k] != temp_data[k]:
new_data[k] = data[k]
else:
new_data[k] = data[k]
return new_data
def deep_merge(d, u, only_existing=True):
for k, v in u.items():
if isinstance(v, dict):
if only_existing:
r = deep_merge(d.get(k, {}), v)
d[k] = r
else:
d[k] = v
else:
d[k] = u[k]
return d
if __name__ == '__main__':
files = [
"results/WVWZZZE1ZMP010760/2024/10/18/vehicle_WVWZZZE1ZMP010760_2024-10-15T12-05-23-268Z.json",
"results/WVWZZZE1ZMP010760/2024/10/19/vehicle_WVWZZZE1ZMP010760_2024-10-19T00-00-34-353Z.json",
]
for diff_mode_update_add in [True, False]:
for file in files:
print(f"-----------------------------------------------------------------------------------------------------------------")
print(f"--- Using file {file}, diff_mode_update_add={diff_mode_update_add}")
print(f"-----------------------------------------------------------------------------------------------------------------")
with open(file, "r") as fp:
src = json.load(fp)
src_last = {}
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}")
print(f"Diffed: {diffed}")
diffed_list.append(deepcopy(diffed))
last = deepcopy(s)
merged_list = []
last = {}
for d in diffed_list:
merged = jay_merge_full(last, d)
print(f"Old: {last}")
print(f"Diff: {d}")
print(f"Merged: {merged}")
last = deepcopy(merged)
merged_list.append(deepcopy(merged))
# Check integrity
assert src == merged_list