|
| 1 | +import typing |
| 2 | + |
1 | 3 | from diff import json_path |
2 | 4 | from diff.delta import Delta |
3 | 5 |
|
4 | 6 |
|
5 | | -def diff(new: dict, old: dict) -> list[Delta]: |
| 7 | +def diff(new: dict[str, typing.Any], old: dict[str, typing.Any]) -> list[Delta]: |
6 | 8 | new_path_map = json_path.path_value_map( |
7 | 9 | new, include_root=True, leaves_only=True, include_containers=False |
8 | 10 | ) |
9 | 11 | old_path_map = json_path.path_value_map( |
10 | 12 | old, include_root=True, leaves_only=False, include_containers=False |
11 | 13 | ) |
12 | | - ops: list[Delta] = [] |
| 14 | + operations: list[Delta] = [] |
13 | 15 |
|
14 | | - # deleted |
15 | 16 | deleted = old_path_map.keys() - new_path_map.keys() |
16 | | - for item in deleted: |
17 | | - ops.append( # noqa: PERF401 |
18 | | - Delta(path=item, op="deleted", old_value=old_path_map[item], new_value=None) |
| 17 | + for key in deleted: |
| 18 | + operations.append( # noqa: PERF401 |
| 19 | + Delta( |
| 20 | + path=key, |
| 21 | + operation="deleted", |
| 22 | + old_value=old_path_map[key], |
| 23 | + new_value=None, |
| 24 | + ) |
19 | 25 | ) |
20 | 26 |
|
21 | | - # added |
22 | 27 | added = new_path_map.keys() - old_path_map.keys() |
23 | | - for item in added: |
24 | | - ops.append( # noqa: PERF401 |
25 | | - Delta(path=item, op="added", old_value=None, new_value=new_path_map[item]) |
| 28 | + for key in added: |
| 29 | + operations.append( # noqa: PERF401 |
| 30 | + Delta( |
| 31 | + path=key, operation="added", old_value=None, new_value=new_path_map[key] |
| 32 | + ) |
26 | 33 | ) |
27 | 34 |
|
28 | | - # modified |
29 | 35 | shared_keys = new_path_map.keys() & old_path_map.keys() |
30 | | - for item in shared_keys: |
31 | | - if old_path_map[item] != new_path_map[item]: |
32 | | - ops.append( # noqa: PERF401 |
| 36 | + for key in shared_keys: |
| 37 | + if old_path_map[key] != new_path_map[key]: |
| 38 | + operations.append( # noqa: PERF401 |
33 | 39 | Delta( |
34 | | - path=item, |
35 | | - op="modified", |
36 | | - old_value=old_path_map[item], |
37 | | - new_value=new_path_map[item], |
| 40 | + path=key, |
| 41 | + operation="modified", |
| 42 | + old_value=old_path_map[key], |
| 43 | + new_value=new_path_map[key], |
38 | 44 | ) |
39 | 45 | ) |
40 | | - # exlude root diff |
41 | | - return ops |
| 46 | + return operations |
0 commit comments