TiledViz
Loading...
Searching...
No Matches
compare_json.py
1#!/bin/env python3
2
3import sys,os
4import argparse
5import re
6import json
7import datetime
8import traceback
9
10errors=sys.stderr
11def parse_args(argv):
12 parser = argparse.ArgumentParser(
13 'Compare two nodes.json databases for TiledViz.\n'+
14 'example : \n'+\
15 './compare_json.py -n "AstroIAlastFiles.json" "AstroIA_mean_newtags.json"')
16 #parser.add_argument('-c', '--oldcasefile', default=oldcasefile,
17 # help='Old case_config_machine path (default: ANATOMIST Mandelbrot).')
18 parser.add_argument('-n', '--file-names', nargs=2, required=True)
19 parser.add_argument('-o', '--out', action='store_true')
20 args = parser.parse_args(argv[1:])
21 return args
22
23if __name__ == '__main__':
24 args = parse_args(sys.argv)
25
26 with open(args.file_names[0],'r') as fnode1:
27 nodes1=json.load(fnode1)
28 with open(args.file_names[1],'r') as fnode2:
29 nodes2=json.load(fnode2)
30
31 nodes1_s=sorted(nodes1["nodes"], key=lambda x: x['name'])
32 ind_nodes1_s=sorted(range(len(nodes1["nodes"])), key=lambda k: nodes1["nodes"][k]['name'])
33 nodes2_s=sorted(nodes2["nodes"], key=lambda x: x['name'])
34 ind_nodes2_s=sorted(range(len(nodes2["nodes"])), key=lambda k: nodes2["nodes"][k]['name'])
35 print("len nodes1,nodes2 : %d,%d " % (len(nodes1_s),len(nodes2_s)))
36 if (args.out):
37 file1o=os.path.join(os.path.dirname(args.file_names[0]),"sorted_"+os.path.basename(args.file_names[0]))
38 file2o=os.path.join(os.path.dirname(args.file_names[1]),"sorted_"+os.path.basename(args.file_names[1]))
39 print(file1o,"\n",file2o)
40 o_nodes1={"nodes":nodes1_s,"order":ind_nodes1_s}
41 with open(file1o,'w+') as fnode1:
42 json.dump(o_nodes1,fnode1)
43 o_nodes2={"nodes":nodes2_s,"order":ind_nodes2_s}
44 with open(file2o,'w+') as fnode2:
45 json.dump(o_nodes2,fnode2)
46 nbsame=0
47 difftile=[]
48 i1=0
49 i2=0
50 #import ipdb; ipdb.set_trace()
51 while i1 < len(nodes1_s):
52 tile1=nodes1_s[i1]
53 # title1=tile1['title']
54 # url1=tile1['url']
55 # if ("comment" in tile1):
56 # comment1=tile1['comment']
57 # else:
58 # comment1=""
59 tags1=tile1['tags']
60 name1=tile1['name']
61 # db1=tile1['dbid']
62 #pass=1
63 while i2 < len(nodes2_s):
64 tile2=nodes2_s[i2]
65 # print(tile1==tile2)
66 tile1_keys = set(tile1.keys())
67 tile2_keys = set(tile2.keys())
68 shared_keys = tile1_keys.intersection(tile2_keys)
69 shared_keys.remove("IdLocation")
70 # added = tile1_keys - tile2_keys
71 # removed = tile2_keys - tile1_keys
72 modified = {o : (tile1[o], tile2[o]) for o in shared_keys if str(tile1[o]) != str(tile2[o])}
73 same = set(o for o in shared_keys if str(tile1[o]) == str(tile2[o]))
74 allsame=len(modified)==0
75 if (allsame):
76 nbsame=nbsame+1
77 i2=i2+1
78 break
79 # title2=tile2['title']
80 # url2=tile2['url']
81 # if ("comment" in tile2):
82 # comment2=tile2['comment']
83 # else:
84 # comment2=""
85 tags2=tile2['tags']
86 name2=tile2['name']
87 # db2=tile2['dbid']
88 if( name1 == name2 ):
89 if ("tags" in modified):
90 modified["tags"] = (list(set(tags1) - set(tags2)),list(set(tags2) - set(tags1)))
91 t1=ind_nodes1_s[i1]; t2=ind_nodes2_s[i2]
92 difftile.append({"t1":t1, "t2":t2, "i1":i1, "i2":i2, **modified})
93 i2=i2+1
94 break
95 i2=i2+1
96 #import pdb; pdb.set_trace()
97 i1=i1+1
98
99 print("Nb same %d" % (nbsame))
100 print("All diff : %d " % (len(difftile)))
101 [ print(difft,"\n") for difft in difftile ]
102 # print(i1,' ',i2,"\n", \
103 # ' ',title1," ",title2, "\n", \
104 # ' ',url1,"\n ",url2, '\n',\
105 # ' ',comment1,'\n ',comment2, '\n', \
106 # ' ',tags1,'\n ',tags2, '\n',\
107 # ' ',name1,' ',name2, '\n',\
108 # db1,' ',db2)
109