@@ -23,35 +23,56 @@ def compare(previous, current):
2323 removed_or_added = set (removed ) | set (added )
2424 potential_changes = [id for id in current if id not in removed_or_added ]
2525 changed = [id for id in potential_changes if current [id ] != previous [id ]]
26- # Now generate the readable summary
27- summary = []
28- title = []
26+ result = {"added" : [], "removed" : [], "changed" : []}
2927 if added :
30- fragment = "{} row{} added" .format (len (added ), "" if len (added ) == 1 else "s" )
28+ result ["added" ] = [current [id ] for id in added ]
29+ if removed :
30+ result ["removed" ] = [previous [id ] for id in removed ]
31+ if changed :
32+ for id in changed :
33+ d = list (diff (previous [id ], current [id ]))
34+ result ["changed" ].append (
35+ {
36+ "key" : id ,
37+ "changes" : {
38+ field : [prev_value , current_value ]
39+ for _ , field , (prev_value , current_value ) in d
40+ },
41+ }
42+ )
43+ return result
44+
45+
46+ def human_text (result ):
47+ title = []
48+ summary = []
49+ if result ["added" ]:
50+ fragment = "{} row{} added" .format (
51+ len (result ["added" ]), "" if len (result ["added" ]) == 1 else "s"
52+ )
3153 title .append (fragment )
3254 summary .append (fragment + "\n " )
33- for id in added :
34- summary .append (" {}" .format (json .dumps (current [ id ] )))
55+ for row in result [ " added" ] :
56+ summary .append (" {}" .format (json .dumps (row )))
3557 summary .append ("" )
36- if removed :
58+ if result [ " removed" ] :
3759 fragment = "{} row{} removed" .format (
38- len (removed ), "" if len (removed ) == 1 else "s"
60+ len (result [ " removed" ] ), "" if len (result [ " removed" ] ) == 1 else "s"
3961 )
4062 title .append (fragment )
4163 summary .append (fragment + "\n " )
42- for id in removed :
43- summary .append (" {}" .format (json .dumps (previous [ id ] )))
64+ for row in result [ " removed" ] :
65+ summary .append (" {}" .format (json .dumps (row )))
4466 summary .append ("" )
45- if changed :
67+ if result [ " changed" ] :
4668 fragment = "{} row{} changed" .format (
47- len (changed ), "" if len (changed ) == 1 else "s"
69+ len (result [ " changed" ] ), "" if len (result [ " changed" ] ) == 1 else "s"
4870 )
4971 title .append (fragment )
5072 summary .append (fragment + "\n " )
51- for id in changed :
52- d = list (diff (previous [id ], current [id ]))
53- summary .append (" Row {}" .format (id ))
54- for _ , field , (prev_value , current_value ) in d :
73+ for details in result ["changed" ]:
74+ summary .append (" Row {}" .format (details ["key" ]))
75+ for field , (prev_value , current_value ) in details ["changes" ].items ():
5576 summary .append (
5677 ' {}: "{}" => "{}"' .format (field , prev_value , current_value )
5778 )
0 commit comments