1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#!/usr/bin/env python
from __future__ import absolute_import, division, print_function, unicode_literals
import sys
import json
import os
import getopt
globGood=0
globBad=0
globBeautify=0
globOverwrite=0
globFile=""
# prints usage
def usage():
print((
'Usage: '+sys.argv[0]+'\n'
' -h|--help: this help\n'
' -f|file <fname>: only processes that file\n'
' -b|--beautify: beautifies the json file\n'
' -o|--overwrite: when used with -b/--beautify overwrites the file without adding a pretty- prefix. Use with caution\n'
))
#beautifies a given file
def beautify(fi,ki):
global globOverwrite
if globOverwrite:
prefix=''
else:
prefix='pretty-'
print("Beautifying %s, writing to %s" % (fi,prefix+fi))
w = len (max(ki, key=len))
pretty=[]
for k in sorted(ki):
line = " \"%s\"%s:\"%s\"" %(k,' '*(w-len(k)+1),ki[k])
pretty.append(line)
pFh=open(prefix+fi,"w")
pFh.write('{\n')
if sys.version_info >=(3, 0):
pFh.write(",\n".join(pretty))
else:
pFh.write(",\n".join(pretty).encode('UTF-8'))
pFh.write('\n}\n')
pFh.close()
#Compares keys in language file
def compare(fname):
beaut="no"
global globGood, globBad,globOverwrite, globFile, globBeautify
with open (i) as json_data:
try:
newKeys = json.load(json_data)
except ValueError:
print('could not parse %s, skipping!' %fname)
globBad+=1
return
json_data.close()
diffOrig = set(origKeys.keys()) - set(newKeys.keys())
diffNew = set(newKeys.keys()) - set(origKeys.keys())
if len(diffOrig)==0 and len (diffNew)==0:
status = "GOOD"
globGood+=1
if globBeautify and globFile == fname or globFile == "":
beaut="YES"
else:
status = "ERROR"
globBad+=1
print("\n-------Checking:%s:%s, beautify:%s---------" % (fname,status,beaut))
print("master keys:%d, %s keys:%d" % (len(origKeys), i, len(newKeys)))
if beaut=="YES":
beautify(fname,newKeys)
if len(diffOrig) > 0:
print("Keys not present in :%s" %fname)
for x in diffOrig:
print("-->",x)
if len(diffNew) > 0:
print("Extra keys present in :%s" %fname)
for x in diffNew:
print("-->",x)
#MAIN
try:
myopts,args=getopt.getopt(sys.argv[1:],"f:hob",["file=","help","overwrite","beautify"])
except getopt.GetoptError as err:
print (err)
usage()
sys.exit(2)
for o,a in myopts:
if o in ("-h","--help"):
usage()
sys.exit()
elif o in ("-b","--beautify"):
globBeautify=1
elif o in ("-o","--overwrite"):
globOverwrite=1
elif o in ("-f","--file"):
globFile=a
with open ('locale-en.json') as json_data:
origKeys=json.load(json_data)
json_data.close()
print("total keys in master language: ", len(origKeys))
#iterate through all languages, using -en as the master
for i in os.listdir(os.getcwd()):
if not i.endswith(".json") or not i.startswith("locale-"):
#print "skipping ",i," as we will only process locale-*.json"
continue
else:
if globFile == "" or globFile == i:
compare(i)
else:
print("skipping ",i, " as its not ",globFile)
print("=================================================")
print("Good files:%d, Bad files:%d, Total files:%d" % (globGood, globBad, globGood+globBad))
print("=================================================\n")
|