##// END OF EJS Templates
Make sure to pass correct datatype to validate
Make sure to pass correct datatype to validate

File last commit:

r16347:9a98f777
r16403:3c52e525
Show More
validator.py
99 lines | 2.8 KiB | text/x-python | PythonLexer
Thomas Kluyver
Convert print statements to print function calls...
r13348 from __future__ import print_function
Matthias BUSSONNIER
create a ipynbv3 json schema and a validator...
r8519 #!/usr/bin/env python
# -*- coding: utf8 -*-
Thomas Kluyver
Import argparse directly from stdlib
r12547 import json
Jessica B. Hamrick
Allow validator to be called from reads_json and writes_json
r16330 import os
Matthias BUSSONNIER
create a ipynbv3 json schema and a validator...
r8519
Jessica B. Hamrick
Misc style changes, add more docstrings
r16347 from IPython.external.jsonschema import Draft3Validator, SchemaError
Matthias BUSSONNIER
import jsonpointer and schema from external
r8525 import IPython.external.jsonpointer as jsonpointer
Thomas Kluyver
Fix references to dict.iteritems and dict.itervalues
r13361 from IPython.utils.py3compat import iteritems
Matthias BUSSONNIER
create a ipynbv3 json schema and a validator...
r8519
Jessica B. Hamrick
Allow validator to be called from reads_json and writes_json
r16330
from .current import nbformat, nbformat_schema
Jessica B. Hamrick
Add comments inside validator
r16335 schema_path = os.path.join(
Jessica B. Hamrick
Allow validator to be called from reads_json and writes_json
r16330 os.path.split(__file__)[0], "v%d" % nbformat, nbformat_schema)
Jessica B. Hamrick
Misc style changes, add more docstrings
r16347 def isvalid(nbjson, verbose=False):
"""Checks whether the given notebook JSON conforms to the current
notebook format schema. Returns True if the JSON is valid, and
False otherwise.
If `verbose` is set, then print out each error that is detected.
"""
errors = validate(nbjson, verbose=verbose)
Jessica B. Hamrick
Add isvalid function which returns True/False
r16341 return errors == 0
Jessica B. Hamrick
Misc style changes, add more docstrings
r16347 def validate(nbjson, verbose=False):
"""Checks whether the given notebook JSON conforms to the current
notebook format schema, and returns the number of errors.
If `verbose` is set, then print out each error that is detected.
"""
Jessica B. Hamrick
Add comments inside validator
r16335 # load the schema file
with open(schema_path, 'r') as fh:
schema_json = json.load(fh)
# resolve internal references
v3schema = resolve_ref(schema_json)
Jessica B. Hamrick
Misc style changes, add more docstrings
r16347 v3schema = jsonpointer.resolve_pointer(v3schema, '/notebook')
Jessica B. Hamrick
Add comments inside validator
r16335
Jessica B. Hamrick
Misc style changes, add more docstrings
r16347 # count how many errors there are
Matthias BUSSONNIER
create a ipynbv3 json schema and a validator...
r8519 errors = 0
Jessica B. Hamrick
Allow validator to be called from reads_json and writes_json
r16330 v = Draft3Validator(v3schema)
Matthias BUSSONNIER
update Jsonschema version
r8674 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)
Jessica B. Hamrick
Add comments inside validator
r16335
Matthias BUSSONNIER
create a ipynbv3 json schema and a validator...
r8519 return errors
Jessica B. Hamrick
Allow validator to be called from reads_json and writes_json
r16330
Jessica B. Hamrick
Add comments inside validator
r16335 def resolve_ref(json, schema=None):
Jessica B. Hamrick
Misc style changes, add more docstrings
r16347 """Resolve internal references within the given JSON. This essentially
means that dictionaries of this form:
{"$ref": "/somepointer"}
will be replaced with the resolved reference to `/somepointer`.
This only supports local reference to the same JSON file.
Matthias BUSSONNIER
create a ipynbv3 json schema and a validator...
r8519
"""
Jessica B. Hamrick
Add comments inside validator
r16335 if not schema:
schema = json
# if it's a list, resolve references for each item in the list
Matthias BUSSONNIER
create a ipynbv3 json schema and a validator...
r8519 if type(json) is list:
Jessica B. Hamrick
Add comments inside validator
r16335 resolved = []
Matthias BUSSONNIER
create a ipynbv3 json schema and a validator...
r8519 for item in json:
Jessica B. Hamrick
Add comments inside validator
r16335 resolved.append(resolve_ref(item, schema=schema))
# if it's a dictionary, resolve references for each item in the
# dictionary
Matthias BUSSONNIER
create a ipynbv3 json schema and a validator...
r8519 elif type(json) is dict:
Jessica B. Hamrick
Add comments inside validator
r16335 resolved = {}
for key, ref in iteritems(json):
Jessica B. Hamrick
Misc style changes, add more docstrings
r16347
Jessica B. Hamrick
Add comments inside validator
r16335 # if the key is equal to $ref, then replace the entire
# dictionary with the resolved value
Matthias BUSSONNIER
create a ipynbv3 json schema and a validator...
r8519 if key == '$ref':
Jessica B. Hamrick
Misc style changes, add more docstrings
r16347 if len(json) != 1:
raise SchemaError(
"objects containing a $ref should only have one item")
Jessica B. Hamrick
Add comments inside validator
r16335 pointer = jsonpointer.resolve_pointer(schema, ref)
resolved = resolve_ref(pointer, schema=schema)
Jessica B. Hamrick
Clean up validator, and rename nbvalidate to validate
r16332 else:
Jessica B. Hamrick
Add comments inside validator
r16335 resolved[key] = resolve_ref(ref, schema=schema)
# otherwise it's a normal object, so just return it
Jessica B. Hamrick
Clean up validator, and rename nbvalidate to validate
r16332 else:
Jessica B. Hamrick
Add comments inside validator
r16335 resolved = json
return resolved