Source code for cedar.validation

""" JSON Schema validation helpers
"""
import json
import os
from pathlib import Path

from jsonschema import Draft7Validator, RefResolver, validators


[docs]def validate_with_defaults(obj, schema, resolve=None): """ Validate a configuration file and fill in defaults (modifies ``obj``) """ if resolve: resolver = RefResolver('file://' + str(resolve) + '/', schema) else: resolver = None # Allow tuple/list as 'array' type # See: https://github.com/Julian/jsonschema/issues/148 types_ = {'array': (list, tuple)} validator = DefaultValidatingDraft7Validator(schema, resolver=resolver, types=types_) validator.validate(obj)
# Adapted from python-jsonschema FAQ # https://python-jsonschema.readthedocs.io/en/stable/faq/ def _extend_with_default(validator_class): validate_properties = validator_class.VALIDATORS["properties"] def set_defaults(validator, properties, instance, schema): for property, subschema in properties.items(): if "default" in subschema: instance.setdefault(property, subschema["default"]) for error in validate_properties( validator, properties, instance, schema): yield error return validators.extend(validator_class, {"properties" : set_defaults}) DefaultValidatingDraft7Validator = _extend_with_default(Draft7Validator)