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