|
|
# Copyright (c) IPython Development Team.
|
|
|
# Distributed under the terms of the Modified BSD License.
|
|
|
|
|
|
from __future__ import print_function
|
|
|
import json
|
|
|
import os
|
|
|
|
|
|
try:
|
|
|
from jsonschema import ValidationError
|
|
|
from jsonschema import Draft4Validator as Validator
|
|
|
except ImportError as e:
|
|
|
verbose_msg = """
|
|
|
|
|
|
IPython notebook format depends on the jsonschema package:
|
|
|
|
|
|
https://pypi.python.org/pypi/jsonschema
|
|
|
|
|
|
Please install it first.
|
|
|
"""
|
|
|
raise ImportError(str(e) + verbose_msg)
|
|
|
|
|
|
|
|
|
from .nbbase import nbformat, nbformat_schema
|
|
|
schema_path = os.path.join(
|
|
|
os.path.dirname(__file__), nbformat_schema,
|
|
|
)
|
|
|
|
|
|
validator = None
|
|
|
|
|
|
def _load_schema():
|
|
|
"""Load the JSON schema into the global Validator"""
|
|
|
global validator
|
|
|
if validator is None:
|
|
|
# load the schema file
|
|
|
with open(schema_path, 'r') as fh:
|
|
|
schema_json = json.load(fh)
|
|
|
|
|
|
# create the validator
|
|
|
validator = Validator(schema_json)
|
|
|
return validator
|
|
|
|
|
|
def isvalid(nbjson, ref=None):
|
|
|
"""Checks whether the given notebook JSON conforms to the current
|
|
|
notebook format schema. Returns True if the JSON is valid, and
|
|
|
False otherwise.
|
|
|
|
|
|
To see the individual errors that were encountered, please use the
|
|
|
`validate` function instead.
|
|
|
"""
|
|
|
try:
|
|
|
validate(nbjson, ref)
|
|
|
except ValidationError:
|
|
|
return False
|
|
|
else:
|
|
|
return True
|
|
|
|
|
|
|
|
|
def validate(nbjson, ref=None):
|
|
|
"""Checks whether the given notebook JSON conforms to the current
|
|
|
notebook format schema.
|
|
|
|
|
|
Raises ValidationError if not valid.
|
|
|
"""
|
|
|
_load_schema()
|
|
|
|
|
|
if ref:
|
|
|
return validator.validate(nbjson, {'$ref' : '#/definitions/%s' % ref})
|
|
|
else:
|
|
|
return validator.validate(nbjson)
|
|
|
|