Skip to content

Commit 01ac742

Browse files
committed
(feat): Diffing now supports missing keys
1 parent e62a8e1 commit 01ac742

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

lib/diff.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ def diff_rows(rows):
5555

5656
unified_diff = []
5757
for field in row_a:
58-
field_a = json.dumps(row_a[field], indent=2, separators=(',', ': ')).replace('\\n', "\n") if isinstance(row_a[field], (dict, list)) else str(row_a[field])
59-
field_b = json.dumps(row_b[field], indent=2, separators=(',', ': ')).replace('\\n', "\n") if isinstance(row_b[field], (dict, list)) else str(row_b[field])
58+
field_a = json.dumps(row_a[field], indent=2, separators=(',', ': ')).replace('\\n', "\n") if isinstance(row_a.get(field, '[NOT PRESENT]'), (dict, list)) else str(row_a.get(field, '[NOT PRESENT]'))
59+
field_b = json.dumps(row_b[field], indent=2, separators=(',', ': ')).replace('\\n', "\n") if isinstance(row_b.get(field, '[NOT PRESENT]'), (dict, list)) else str(row_b.get(field, '[NOT PRESENT]'))
6060

6161
# although not strictly needed we use DeepDiff as this is WAY faster than difflib suprisingly
6262
diff = DeepDiff(field_a, field_b,
@@ -89,6 +89,16 @@ def diff_rows(rows):
8989
unified_diff.append(f"diff --git a/{field} b/{field}\n---\n+++\n@@ -1 +1 @@")
9090
for v in value:
9191
unified_diff.append(f"- {key}: {v}")
92+
elif key == "type_changes":
93+
for k, v in value.items():
94+
95+
if v.get('diff', False):
96+
unified_diff.append(f"diff --git a/{field} b/{field}")
97+
unified_diff.append(str(v['diff']))
98+
else:
99+
unified_diff.append(f"diff --git a/{field} b/{field}\n---\n+++\n@@ -1 +1 @@")
100+
unified_diff.append(f"- {v['old_value']} (Type: {v['old_type']})")
101+
unified_diff.append(f"+ {v['new_value']} (Type: {v['new_type']})")
92102
elif key == "values_changed":
93103
for k, v in value.items():
94104

@@ -107,5 +117,5 @@ def diff_rows(rows):
107117

108118
if __name__ == '__main__':
109119
from lib.user import User
110-
diffable_rows = get_diffable_rows(User(1), ['6f34b31e-f35c-4601-ae0d-6fd04a951aaf', '70ed5b3f-fa90-43fe-abcc-d4bf8048786a'])
120+
diffable_rows = get_diffable_rows(User(1), ['14f95398-a62e-464b-8f25-b82645895cef', '382f61ae-c5fb-4c8f-b973-d2b1eede6bd4'])
111121
print(diff_rows(diffable_rows))

0 commit comments

Comments
 (0)