1+ from gendiff .data import read_data
2+
3+
4+ def miks_dict (file1 , file2 ):
5+ diff_dict = {}
6+ data1 = read_data (file1 )
7+ data2 = read_data (file2 )
8+ def inner (data1 = None , data2 = None ):
9+ if not data1 :
10+ data1 = {}
11+ if not data2 :
12+ data2 = {}
13+ all_keys = sorted (list (data1 .keys () | data2 .keys ()))
14+ for k in all_keys :
15+ if k in data1 and k in data2 :
16+ if data1 [k ] == data2 [k ] and (not isinstance (data1 [k ], dict )
17+ and not isinstance (data2 [k ], dict )):
18+ diff_dict [f' { k } ' ] = data1 [k ]
19+ elif data1 [k ] == data2 [k ] and (isinstance (data1 [k ], dict )
20+ or isinstance (data2 , dict )):
21+ if f' { k } ' not in diff_dict :
22+ diff_dict [f' { k } ' ] = {}
23+ diff_dict [f' { k } ' ] = inner (data1 [k ], data2 [k ])
24+ elif data1 [k ] != data2 [k ] and (not isinstance (data1 [k ], dict )
25+ and not isinstance (data2 [k ], dict )):
26+ diff_dict [f'- { k } ' ] = data1 [k ]
27+ diff_dict [f'+ { k } ' ] = data2 [k ]
28+ elif data1 [k ] != data2 [k ] and (isinstance (data1 [k ], dict )
29+ or isinstance (data2 , dict )):
30+ if f'- { k } ' not in diff_dict :
31+ diff_dict [f'- { k } ' ] = {}
32+ diff_dict [f'- { k } ' ].update (inner (data1 [k ], data2 [k ]))
33+ elif k in data1 and k not in data2 :
34+ if isinstance (data1 [k ], dict ):
35+ diff_dict [f'- { k } ' ] = inner (data1 [k ], None )
36+ else :
37+ diff_dict [f'- { k } ' ] = data1 [k ]
38+ elif k not in data1 and k in data2 :
39+ if isinstance (data2 [k ], dict ):
40+ diff_dict [f'+ { k } ' ] = inner (None , data2 [k ])
41+ else :
42+ diff_dict [f'+ { k } ' ] = data2 [k ]
43+ return diff_dict
44+
45+ inner (data1 , data2 )
46+ return diff_dict
47+
48+
49+ print (6 , miks_dict ('tests/test_data/file5.json' ,
50+ 'tests/test_data/file6.json' ))
0 commit comments