Skip to content

Commit

Permalink
Merge pull request #262 from blink1073/use-fastjsonschema-by-default
Browse files Browse the repository at this point in the history
Use fastjsonschema by default
  • Loading branch information
willingc committed Apr 2, 2022
2 parents 8675db0 + 7c197b6 commit e1874a3
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 13 deletions.
11 changes: 3 additions & 8 deletions nbformat/json_compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,12 @@

import os

import fastjsonschema
import jsonschema
from fastjsonschema import JsonSchemaException as _JsonSchemaException
from jsonschema import Draft4Validator as _JsonSchemaValidator
from jsonschema import ErrorTree, ValidationError

try:
import fastjsonschema
from fastjsonschema import JsonSchemaException as _JsonSchemaException
except ImportError:
fastjsonschema = None
_JsonSchemaException = ValidationError


class JsonSchemaValidator:
name = "jsonschema"
Expand Down Expand Up @@ -99,5 +94,5 @@ def get_current_validator():
"""
Return the default validator based on the value of an environment variable.
"""
validator_name = os.environ.get("NBFORMAT_VALIDATOR", "jsonschema")
validator_name = os.environ.get("NBFORMAT_VALIDATOR", "fastjsonschema")
return _validator_for_name(validator_name)
16 changes: 13 additions & 3 deletions nbformat/validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

from ._imports import import_item
from .corpus.words import generate_corpus_id
from .json_compat import ValidationError, get_current_validator
from .json_compat import ValidationError, _validator_for_name, get_current_validator
from .reader import get_version

validators = {}
Expand All @@ -37,7 +37,7 @@ def _allow_undefined(schema):
return schema


def get_validator(version=None, version_minor=None, relax_add_props=False):
def get_validator(version=None, version_minor=None, relax_add_props=False, name=None):
"""Load the JSON schema into a Validator"""
if version is None:
from . import current_nbformat
Expand All @@ -49,7 +49,11 @@ def get_validator(version=None, version_minor=None, relax_add_props=False):
if version_minor is None:
version_minor = current_minor

current_validator = get_current_validator()
if name:
current_validator = _validator_for_name(name)
else:
current_validator = get_current_validator()

version_tuple = (current_validator.name, version, version_minor)

if version_tuple not in validators:
Expand Down Expand Up @@ -354,6 +358,12 @@ def iter_validate(
errors = [e for e in validator.iter_errors(nbdict)]

if len(errors) > 0 and strip_invalid_metadata:
if validator.name == "fastjsonschema":
validator = get_validator(
version, version_minor, relax_add_props=relax_add_props, name="jsonschema"
)
errors = [e for e in validator.iter_errors(nbdict)]

error_tree = validator.error_tree(errors)
if "metadata" in error_tree:
for key in error_tree["metadata"]:
Expand Down
4 changes: 2 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,11 @@
"traitlets>=4.1",
"jsonschema>=2.6",
"jupyter_core",
"fastjsonschema",
]

extras_require = setuptools_args["extras_require"] = {
"fast": ["fastjsonschema"],
"test": ["check-manifest", "fastjsonschema", "testpath", "pytest", "pre-commit"],
"test": ["check-manifest", "testpath", "pytest", "pre-commit"],
}

if "setuptools" in sys.modules:
Expand Down

0 comments on commit e1874a3

Please sign in to comment.