##// END OF EJS Templates
DOC: fix links to matplotlib, notebook docs...
DOC: fix links to matplotlib, notebook docs I've added a link to pandas, made all matplotlib links point to matplotlib.org, and fixed a link in the notebook help menu to point to our new notebook.html, now that htmlnotebook.html is a redirect. Whoever ends up merging this PR should backport it to 1.x.

File last commit:

r8675:61470140
r12176:0962ec44
Show More
validator.py
88 lines | 2.7 KiB | text/x-python | PythonLexer
Matthias BUSSONNIER
create a ipynbv3 json schema and a validator...
r8519 #!/usr/bin/env python
# -*- coding: utf8 -*-
Matthias BUSSONNIER
update Jsonschema version
r8674 from IPython.external.jsonschema import Draft3Validator, validate, ValidationError
Matthias BUSSONNIER
import jsonpointer and schema from external
r8525 import IPython.external.jsonpointer as jsonpointer
Matthias BUSSONNIER
import argparse from external
r8675 from IPython.external import argparse
Matthias BUSSONNIER
create a ipynbv3 json schema and a validator...
r8519 import traceback
import json
def nbvalidate(nbjson, schema='v3.withref.json', key=None,verbose=True):
v3schema = resolve_ref(json.load(open(schema,'r')))
if key :
v3schema = jsonpointer.resolve_pointer(v3schema,key)
errors = 0
Matthias BUSSONNIER
update Jsonschema version
r8674 v = Draft3Validator(v3schema);
for error in v.iter_errors(nbjson):
Matthias BUSSONNIER
create a ipynbv3 json schema and a validator...
r8519 errors = errors + 1
if verbose:
print(error)
return errors
def resolve_ref(json, base=None):
"""return a json with resolved internal references
only support local reference to the same json
"""
if not base :
base = json
temp = None
if type(json) is list:
temp = [];
for item in json:
temp.append(resolve_ref(item, base=base))
elif type(json) is dict:
temp = {};
for key,value in json.iteritems():
if key == '$ref':
return resolve_ref(jsonpointer.resolve_pointer(base,value), base=base)
else :
temp[key]=resolve_ref(value, base=base)
else :
return json
return temp
def convert(namein, nameout, indent=2):
"""resolve the references of namein, save the result in nameout"""
jsn = None
with open(namein) as file :
jsn = json.load(file)
v = resolve_ref(jsn, base=jsn)
x = jsonpointer.resolve_pointer(v, '/notebook')
with open(nameout,'w') as file:
json.dump(x,file,indent=indent)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('-s', '--schema',
type=str, default='v3.withref.json')
parser.add_argument('-k', '--key',
type=str, default='/notebook',
help='subkey to extract json schema from json file')
parser.add_argument("-v", "--verbose", action="store_true",
help="increase output verbosity")
parser.add_argument('filename',
type=str,
help="file to validate",
nargs='*',
metavar='names')
args = parser.parse_args()
for name in args.filename :
nerror = nbvalidate(json.load(open(name,'r')),
schema=args.schema,
key=args.key,
verbose=args.verbose)
if nerror is 0:
print u"[Pass]",name
else :
print u"[ ]",name,'(%d)'%(nerror)
if args.verbose :
print '=================================================='