##// END OF EJS Templates
import argparse from external
Matthias BUSSONNIER -
Show More
@@ -1,88 +1,88 b''
1 #!/usr/bin/env python
1 #!/usr/bin/env python
2 # -*- coding: utf8 -*-
2 # -*- coding: utf8 -*-
3
3
4 from IPython.external.jsonschema import Draft3Validator, validate, ValidationError
4 from IPython.external.jsonschema import Draft3Validator, validate, ValidationError
5 import IPython.external.jsonpointer as jsonpointer
5 import IPython.external.jsonpointer as jsonpointer
6 import argparse
6 from IPython.external import argparse
7 import traceback
7 import traceback
8 import json
8 import json
9
9
10 def nbvalidate(nbjson, schema='v3.withref.json', key=None,verbose=True):
10 def nbvalidate(nbjson, schema='v3.withref.json', key=None,verbose=True):
11 v3schema = resolve_ref(json.load(open(schema,'r')))
11 v3schema = resolve_ref(json.load(open(schema,'r')))
12 if key :
12 if key :
13 v3schema = jsonpointer.resolve_pointer(v3schema,key)
13 v3schema = jsonpointer.resolve_pointer(v3schema,key)
14 errors = 0
14 errors = 0
15 v = Draft3Validator(v3schema);
15 v = Draft3Validator(v3schema);
16 for error in v.iter_errors(nbjson):
16 for error in v.iter_errors(nbjson):
17 errors = errors + 1
17 errors = errors + 1
18 if verbose:
18 if verbose:
19 print(error)
19 print(error)
20 return errors
20 return errors
21
21
22 def resolve_ref(json, base=None):
22 def resolve_ref(json, base=None):
23 """return a json with resolved internal references
23 """return a json with resolved internal references
24
24
25 only support local reference to the same json
25 only support local reference to the same json
26 """
26 """
27 if not base :
27 if not base :
28 base = json
28 base = json
29
29
30 temp = None
30 temp = None
31 if type(json) is list:
31 if type(json) is list:
32 temp = [];
32 temp = [];
33 for item in json:
33 for item in json:
34 temp.append(resolve_ref(item, base=base))
34 temp.append(resolve_ref(item, base=base))
35 elif type(json) is dict:
35 elif type(json) is dict:
36 temp = {};
36 temp = {};
37 for key,value in json.iteritems():
37 for key,value in json.iteritems():
38 if key == '$ref':
38 if key == '$ref':
39 return resolve_ref(jsonpointer.resolve_pointer(base,value), base=base)
39 return resolve_ref(jsonpointer.resolve_pointer(base,value), base=base)
40 else :
40 else :
41 temp[key]=resolve_ref(value, base=base)
41 temp[key]=resolve_ref(value, base=base)
42 else :
42 else :
43 return json
43 return json
44 return temp
44 return temp
45
45
46 def convert(namein, nameout, indent=2):
46 def convert(namein, nameout, indent=2):
47 """resolve the references of namein, save the result in nameout"""
47 """resolve the references of namein, save the result in nameout"""
48 jsn = None
48 jsn = None
49 with open(namein) as file :
49 with open(namein) as file :
50 jsn = json.load(file)
50 jsn = json.load(file)
51 v = resolve_ref(jsn, base=jsn)
51 v = resolve_ref(jsn, base=jsn)
52 x = jsonpointer.resolve_pointer(v, '/notebook')
52 x = jsonpointer.resolve_pointer(v, '/notebook')
53 with open(nameout,'w') as file:
53 with open(nameout,'w') as file:
54 json.dump(x,file,indent=indent)
54 json.dump(x,file,indent=indent)
55
55
56
56
57 if __name__ == '__main__':
57 if __name__ == '__main__':
58 parser = argparse.ArgumentParser()
58 parser = argparse.ArgumentParser()
59 parser.add_argument('-s', '--schema',
59 parser.add_argument('-s', '--schema',
60 type=str, default='v3.withref.json')
60 type=str, default='v3.withref.json')
61
61
62 parser.add_argument('-k', '--key',
62 parser.add_argument('-k', '--key',
63 type=str, default='/notebook',
63 type=str, default='/notebook',
64 help='subkey to extract json schema from json file')
64 help='subkey to extract json schema from json file')
65
65
66 parser.add_argument("-v", "--verbose", action="store_true",
66 parser.add_argument("-v", "--verbose", action="store_true",
67 help="increase output verbosity")
67 help="increase output verbosity")
68
68
69 parser.add_argument('filename',
69 parser.add_argument('filename',
70 type=str,
70 type=str,
71 help="file to validate",
71 help="file to validate",
72 nargs='*',
72 nargs='*',
73 metavar='names')
73 metavar='names')
74
74
75 args = parser.parse_args()
75 args = parser.parse_args()
76 for name in args.filename :
76 for name in args.filename :
77 nerror = nbvalidate(json.load(open(name,'r')),
77 nerror = nbvalidate(json.load(open(name,'r')),
78 schema=args.schema,
78 schema=args.schema,
79 key=args.key,
79 key=args.key,
80 verbose=args.verbose)
80 verbose=args.verbose)
81 if nerror is 0:
81 if nerror is 0:
82 print u"[Pass]",name
82 print u"[Pass]",name
83 else :
83 else :
84 print u"[ ]",name,'(%d)'%(nerror)
84 print u"[ ]",name,'(%d)'%(nerror)
85 if args.verbose :
85 if args.verbose :
86 print '=================================================='
86 print '=================================================='
87
87
88
88
General Comments 0
You need to be logged in to leave comments. Login now