@@ -8,26 +8,56 @@ def open_f(path_to_file) -> dict:
88 return json .load (file )
99
1010
11- def generate_diff (file1 , file2 ):
12- if str (file1 )[- 5 :] == '.json' and str (file2 )[- 5 :] == '.json' :
13- file1 = open_f (file1 )
14- file2 = open_f (file2 )
11+ def stringify (value , lvl = 1 ):
12+ if isinstance (value , dict ):
13+ result = '{\n '
14+ for el , val in value .items ():
15+ result += f'{ ' ' * lvl } { el } : '
16+ result += stringify (val , lvl + 1 ) + '\n '
17+ result += ' ' * (lvl - 1 ) + '}'
1518 else :
16- file1 = open_ymlf (file1 )
17- file2 = open_ymlf (file2 )
18- res = '''{
19- '''
20- for i in sorted (list (file1 )):
21- if i in sorted (list (file2 )):
22- if file1 [i ] == file2 [i ]:
23- res += f' { i } : { file1 [i ]} \n '
24- else :
25- res += f''' - { i } : { file1 [i ]}
26- + { i } : { file2 [i ]} \n '''
19+ if value is True :
20+ result = 'true'
21+ elif value is None :
22+ result = 'null'
23+ elif value is False :
24+ result = 'false'
2725 else :
28- res += f' - { i } : { file1 [i ]} \n '
29- for i in sorted (list (file2 )):
30- if i not in sorted (list (file1 )):
31- res += f' + { i } : { file2 [i ]} \n '
32- res += '}'
33- return res
26+ result = str (value )
27+ return result
28+
29+
30+ def generate_diff (file1 , file2 , lvl = 1 ):
31+ if isinstance (file1 , str ) and isinstance (file2 , str ):
32+ if str (file1 )[- 5 :] == '.json' and str (file2 )[- 5 :] == '.json' :
33+ file1 = open_f (file1 )
34+ file2 = open_f (file2 )
35+ else :
36+ file1 = open_ymlf (file1 )
37+ file2 = open_ymlf (file2 )
38+ result = '{\n '
39+ if isinstance (file1 , dict ) and isinstance (file2 , dict ):
40+ keys1 = sorted (list (file1 .keys ()))
41+ keys2 = sorted (list (file2 .keys ()))
42+ keys12 = sorted (set (keys1 + keys2 ))
43+ for i in keys12 :
44+ if i in keys1 and i in keys2 :
45+ if isinstance (file1 [i ], dict ) and isinstance (file2 [i ], dict ):
46+ result += f'{ ' ' * lvl } { i } : '
47+ result += generate_diff (file1 [i ], file2 [i ], lvl + 1 ) + '\n '
48+ else :
49+ if file1 [i ] == file2 [i ]:
50+ result += f'{ ' ' * lvl } { i } : { file1 [i ]} ' + '\n '
51+ else :
52+ result += (f'{ ' ' * (lvl - 1 ) + ' - ' } { i } : '
53+ f'{ stringify (file1 [i ], lvl = lvl + 1 )} ' ) + '\n '
54+ result += (f'{ ' ' * (lvl - 1 ) + ' + ' } { i } : '
55+ f'{ stringify (file2 [i ], lvl = lvl + 1 )} ' ) + '\n '
56+ if (i in keys1 ) and (i not in keys2 ):
57+ result += (f'{ ' ' * (lvl - 1 ) + ' - ' } { i } : '
58+ f'{ stringify (file1 [i ], lvl = lvl + 1 )} ' ) + '\n '
59+ if (i not in keys1 ) and (i in keys2 ):
60+ result += (f'{ ' ' * (lvl - 1 ) + ' + ' } { i } : '
61+ f'{ stringify (file2 [i ], lvl = lvl + 1 )} ' ) + '\n '
62+ result += ' ' * (lvl - 1 ) + '}'
63+ return result
0 commit comments