Blame tools/extra/packager/jsonschema-2.3.0/jsonschema/_validators.py

Packit 534379
import re
Packit 534379
Packit 534379
from jsonschema import _utils
Packit 534379
from jsonschema.exceptions import FormatError, ValidationError
Packit 534379
from jsonschema.compat import iteritems
Packit 534379
Packit 534379
Packit 534379
FLOAT_TOLERANCE = 10 ** -15
Packit 534379
Packit 534379
Packit 534379
def patternProperties(validator, patternProperties, instance, schema):
Packit 534379
    if not validator.is_type(instance, "object"):
Packit 534379
        return
Packit 534379
Packit 534379
    for pattern, subschema in iteritems(patternProperties):
Packit 534379
        for k, v in iteritems(instance):
Packit 534379
            if re.search(pattern, k):
Packit 534379
                for error in validator.descend(
Packit 534379
                        v, subschema, path=k, schema_path=pattern
Packit 534379
                ):
Packit 534379
                    yield error
Packit 534379
Packit 534379
Packit 534379
def additionalProperties(validator, aP, instance, schema):
Packit 534379
    if not validator.is_type(instance, "object"):
Packit 534379
        return
Packit 534379
Packit 534379
    extras = set(_utils.find_additional_properties(instance, schema))
Packit 534379
Packit 534379
    if validator.is_type(aP, "object"):
Packit 534379
        for extra in extras:
Packit 534379
            for error in validator.descend(instance[extra], aP, path=extra):
Packit 534379
                yield error
Packit 534379
    elif not aP and extras:
Packit 534379
        error = "Additional properties are not allowed (%s %s unexpected)"
Packit 534379
        yield ValidationError(error % _utils.extras_msg(extras))
Packit 534379
Packit 534379
Packit 534379
def items(validator, items, instance, schema):
Packit 534379
    if not validator.is_type(instance, "array"):
Packit 534379
        return
Packit 534379
Packit 534379
    if validator.is_type(items, "object"):
Packit 534379
        for index, item in enumerate(instance):
Packit 534379
            for error in validator.descend(item, items, path=index):
Packit 534379
                yield error
Packit 534379
    else:
Packit 534379
        for (index, item), subschema in zip(enumerate(instance), items):
Packit 534379
            for error in validator.descend(
Packit 534379
                    item, subschema, path=index, schema_path=index
Packit 534379
            ):
Packit 534379
                yield error
Packit 534379
Packit 534379
Packit 534379
def additionalItems(validator, aI, instance, schema):
Packit 534379
    if (
Packit 534379
        not validator.is_type(instance, "array") or
Packit 534379
        validator.is_type(schema.get("items", {}), "object")
Packit 534379
    ):
Packit 534379
        return
Packit 534379
Packit 534379
    len_items = len(schema.get("items", []))
Packit 534379
    if validator.is_type(aI, "object"):
Packit 534379
        for index, item in enumerate(instance[len_items:], start=len_items):
Packit 534379
            for error in validator.descend(item, aI, path=index):
Packit 534379
                yield error
Packit 534379
    elif not aI and len(instance) > len(schema.get("items", [])):
Packit 534379
        error = "Additional items are not allowed (%s %s unexpected)"
Packit 534379
        yield ValidationError(
Packit 534379
            error %
Packit 534379
            _utils.extras_msg(instance[len(schema.get("items", [])):])
Packit 534379
        )
Packit 534379
Packit 534379
Packit 534379
def minimum(validator, minimum, instance, schema):
Packit 534379
    if not validator.is_type(instance, "number"):
Packit 534379
        return
Packit 534379
Packit 534379
    instance = float(instance)
Packit 534379
    if schema.get("exclusiveMinimum", False):
Packit 534379
        failed = instance <= minimum
Packit 534379
        cmp = "less than or equal to"
Packit 534379
    else:
Packit 534379
        failed = instance < minimum
Packit 534379
        cmp = "less than"
Packit 534379
Packit 534379
    if failed:
Packit 534379
        yield ValidationError(
Packit 534379
            "%r is %s the minimum of %r" % (instance, cmp, minimum)
Packit 534379
        )
Packit 534379
Packit 534379
Packit 534379
def maximum(validator, maximum, instance, schema):
Packit 534379
    if not validator.is_type(instance, "number"):
Packit 534379
        return
Packit 534379
Packit 534379
    instance = float(instance)
Packit 534379
    if schema.get("exclusiveMaximum", False):
Packit 534379
        failed = instance >= maximum
Packit 534379
        cmp = "greater than or equal to"
Packit 534379
    else:
Packit 534379
        failed = instance > maximum
Packit 534379
        cmp = "greater than"
Packit 534379
Packit 534379
    if failed:
Packit 534379
        yield ValidationError(
Packit 534379
            "%r is %s the maximum of %r" % (instance, cmp, maximum)
Packit 534379
        )
Packit 534379
Packit 534379
Packit 534379
def multipleOf(validator, dB, instance, schema):
Packit 534379
    if not validator.is_type(instance, "number"):
Packit 534379
        return
Packit 534379
Packit 534379
    if isinstance(dB, float):
Packit 534379
        mod = instance % dB
Packit 534379
        failed = (mod > FLOAT_TOLERANCE) and (dB - mod) > FLOAT_TOLERANCE
Packit 534379
    else:
Packit 534379
        failed = instance % dB
Packit 534379
Packit 534379
    if failed:
Packit 534379
        yield ValidationError("%r is not a multiple of %r" % (instance, dB))
Packit 534379
Packit 534379
Packit 534379
def minItems(validator, mI, instance, schema):
Packit 534379
    if validator.is_type(instance, "array") and len(instance) < mI:
Packit 534379
        yield ValidationError("%r is too short" % (instance,))
Packit 534379
Packit 534379
Packit 534379
def maxItems(validator, mI, instance, schema):
Packit 534379
    if validator.is_type(instance, "array") and len(instance) > mI:
Packit 534379
        yield ValidationError("%r is too long" % (instance,))
Packit 534379
Packit 534379
Packit 534379
def uniqueItems(validator, uI, instance, schema):
Packit 534379
    if (
Packit 534379
        uI and
Packit 534379
        validator.is_type(instance, "array") and
Packit 534379
        not _utils.uniq(instance)
Packit 534379
    ):
Packit 534379
        yield ValidationError("%r has non-unique elements" % instance)
Packit 534379
Packit 534379
Packit 534379
def pattern(validator, patrn, instance, schema):
Packit 534379
    if (
Packit 534379
        validator.is_type(instance, "string") and
Packit 534379
        not re.search(patrn, instance)
Packit 534379
    ):
Packit 534379
        yield ValidationError("%r does not match %r" % (instance, patrn))
Packit 534379
Packit 534379
Packit 534379
def format(validator, format, instance, schema):
Packit 534379
    if validator.format_checker is not None:
Packit 534379
        try:
Packit 534379
            validator.format_checker.check(instance, format)
Packit 534379
        except FormatError as error:
Packit 534379
            yield ValidationError(error.message, cause=error.cause)
Packit 534379
Packit 534379
Packit 534379
def minLength(validator, mL, instance, schema):
Packit 534379
    if validator.is_type(instance, "string") and len(instance) < mL:
Packit 534379
        yield ValidationError("%r is too short" % (instance,))
Packit 534379
Packit 534379
Packit 534379
def maxLength(validator, mL, instance, schema):
Packit 534379
    if validator.is_type(instance, "string") and len(instance) > mL:
Packit 534379
        yield ValidationError("%r is too long" % (instance,))
Packit 534379
Packit 534379
Packit 534379
def dependencies(validator, dependencies, instance, schema):
Packit 534379
    if not validator.is_type(instance, "object"):
Packit 534379
        return
Packit 534379
Packit 534379
    for property, dependency in iteritems(dependencies):
Packit 534379
        if property not in instance:
Packit 534379
            continue
Packit 534379
Packit 534379
        if validator.is_type(dependency, "object"):
Packit 534379
            for error in validator.descend(
Packit 534379
                    instance, dependency, schema_path=property
Packit 534379
            ):
Packit 534379
                yield error
Packit 534379
        else:
Packit 534379
            dependencies = _utils.ensure_list(dependency)
Packit 534379
            for dependency in dependencies:
Packit 534379
                if dependency not in instance:
Packit 534379
                    yield ValidationError(
Packit 534379
                        "%r is a dependency of %r" % (dependency, property)
Packit 534379
                    )
Packit 534379
Packit 534379
Packit 534379
def enum(validator, enums, instance, schema):
Packit 534379
    if instance not in enums:
Packit 534379
        yield ValidationError("%r is not one of %r" % (instance, enums))
Packit 534379
Packit 534379
Packit 534379
def ref(validator, ref, instance, schema):
Packit 534379
    with validator.resolver.resolving(ref) as resolved:
Packit 534379
        for error in validator.descend(instance, resolved):
Packit 534379
            yield error
Packit 534379
Packit 534379
Packit 534379
def type_draft3(validator, types, instance, schema):
Packit 534379
    types = _utils.ensure_list(types)
Packit 534379
Packit 534379
    all_errors = []
Packit 534379
    for index, type in enumerate(types):
Packit 534379
        if type == "any":
Packit 534379
            return
Packit 534379
        if validator.is_type(type, "object"):
Packit 534379
            errors = list(validator.descend(instance, type, schema_path=index))
Packit 534379
            if not errors:
Packit 534379
                return
Packit 534379
            all_errors.extend(errors)
Packit 534379
        else:
Packit 534379
            if validator.is_type(instance, type):
Packit 534379
                return
Packit 534379
    else:
Packit 534379
        yield ValidationError(
Packit 534379
            _utils.types_msg(instance, types), context=all_errors,
Packit 534379
        )
Packit 534379
Packit 534379
Packit 534379
def properties_draft3(validator, properties, instance, schema):
Packit 534379
    if not validator.is_type(instance, "object"):
Packit 534379
        return
Packit 534379
Packit 534379
    for property, subschema in iteritems(properties):
Packit 534379
        if property in instance:
Packit 534379
            for error in validator.descend(
Packit 534379
                instance[property],
Packit 534379
                subschema,
Packit 534379
                path=property,
Packit 534379
                schema_path=property,
Packit 534379
            ):
Packit 534379
                yield error
Packit 534379
        elif subschema.get("required", False):
Packit 534379
            error = ValidationError("%r is a required property" % property)
Packit 534379
            error._set(
Packit 534379
                validator="required",
Packit 534379
                validator_value=subschema["required"],
Packit 534379
                instance=instance,
Packit 534379
                schema=schema,
Packit 534379
            )
Packit 534379
            error.path.appendleft(property)
Packit 534379
            error.schema_path.extend([property, "required"])
Packit 534379
            yield error
Packit 534379
Packit 534379
Packit 534379
def disallow_draft3(validator, disallow, instance, schema):
Packit 534379
    for disallowed in _utils.ensure_list(disallow):
Packit 534379
        if validator.is_valid(instance, {"type": [disallowed]}):
Packit 534379
            yield ValidationError(
Packit 534379
                "%r is disallowed for %r" % (disallowed, instance)
Packit 534379
            )
Packit 534379
Packit 534379
Packit 534379
def extends_draft3(validator, extends, instance, schema):
Packit 534379
    if validator.is_type(extends, "object"):
Packit 534379
        for error in validator.descend(instance, extends):
Packit 534379
            yield error
Packit 534379
        return
Packit 534379
    for index, subschema in enumerate(extends):
Packit 534379
        for error in validator.descend(instance, subschema, schema_path=index):
Packit 534379
            yield error
Packit 534379
Packit 534379
Packit 534379
def type_draft4(validator, types, instance, schema):
Packit 534379
    types = _utils.ensure_list(types)
Packit 534379
Packit 534379
    if not any(validator.is_type(instance, type) for type in types):
Packit 534379
        yield ValidationError(_utils.types_msg(instance, types))
Packit 534379
Packit 534379
Packit 534379
def properties_draft4(validator, properties, instance, schema):
Packit 534379
    if not validator.is_type(instance, "object"):
Packit 534379
        return
Packit 534379
Packit 534379
    for property, subschema in iteritems(properties):
Packit 534379
        if property in instance:
Packit 534379
            for error in validator.descend(
Packit 534379
                instance[property],
Packit 534379
                subschema,
Packit 534379
                path=property,
Packit 534379
                schema_path=property,
Packit 534379
            ):
Packit 534379
                yield error
Packit 534379
Packit 534379
Packit 534379
def required_draft4(validator, required, instance, schema):
Packit 534379
    if not validator.is_type(instance, "object"):
Packit 534379
        return
Packit 534379
    for property in required:
Packit 534379
        if property not in instance:
Packit 534379
            yield ValidationError("%r is a required property" % property)
Packit 534379
Packit 534379
Packit 534379
def minProperties_draft4(validator, mP, instance, schema):
Packit 534379
    if validator.is_type(instance, "object") and len(instance) < mP:
Packit 534379
        yield ValidationError(
Packit 534379
            "%r does not have enough properties" % (instance,)
Packit 534379
        )
Packit 534379
Packit 534379
Packit 534379
def maxProperties_draft4(validator, mP, instance, schema):
Packit 534379
    if not validator.is_type(instance, "object"):
Packit 534379
        return
Packit 534379
    if validator.is_type(instance, "object") and len(instance) > mP:
Packit 534379
        yield ValidationError("%r has too many properties" % (instance,))
Packit 534379
Packit 534379
Packit 534379
def allOf_draft4(validator, allOf, instance, schema):
Packit 534379
    for index, subschema in enumerate(allOf):
Packit 534379
        for error in validator.descend(instance, subschema, schema_path=index):
Packit 534379
            yield error
Packit 534379
Packit 534379
Packit 534379
def oneOf_draft4(validator, oneOf, instance, schema):
Packit 534379
    subschemas = enumerate(oneOf)
Packit 534379
    all_errors = []
Packit 534379
    for index, subschema in subschemas:
Packit 534379
        errs = list(validator.descend(instance, subschema, schema_path=index))
Packit 534379
        if not errs:
Packit 534379
            first_valid = subschema
Packit 534379
            break
Packit 534379
        all_errors.extend(errs)
Packit 534379
    else:
Packit 534379
        yield ValidationError(
Packit 534379
            "%r is not valid under any of the given schemas" % (instance,),
Packit 534379
            context=all_errors,
Packit 534379
        )
Packit 534379
Packit 534379
    more_valid = [s for i, s in subschemas if validator.is_valid(instance, s)]
Packit 534379
    if more_valid:
Packit 534379
        more_valid.append(first_valid)
Packit 534379
        reprs = ", ".join(repr(schema) for schema in more_valid)
Packit 534379
        yield ValidationError(
Packit 534379
            "%r is valid under each of %s" % (instance, reprs)
Packit 534379
        )
Packit 534379
Packit 534379
Packit 534379
def anyOf_draft4(validator, anyOf, instance, schema):
Packit 534379
    all_errors = []
Packit 534379
    for index, subschema in enumerate(anyOf):
Packit 534379
        errs = list(validator.descend(instance, subschema, schema_path=index))
Packit 534379
        if not errs:
Packit 534379
            break
Packit 534379
        all_errors.extend(errs)
Packit 534379
    else:
Packit 534379
        yield ValidationError(
Packit 534379
            "%r is not valid under any of the given schemas" % (instance,),
Packit 534379
            context=all_errors,
Packit 534379
        )
Packit 534379
Packit 534379
Packit 534379
def not_draft4(validator, not_schema, instance, schema):
Packit 534379
    if validator.is_valid(instance, not_schema):
Packit 534379
        yield ValidationError(
Packit 534379
            "%r is not allowed for %r" % (not_schema, instance)
Packit 534379
        )