コード例 #1
0
def patternProperties(validator, patternProperties, instance, schema):
    if not validator.is_type(instance, "object"):
        return

    for pattern, subschema in iteritems(patternProperties):
        for k, v in iteritems(instance):
            if re.search(pattern, k):
                for error in validator.descend(
                        v, subschema, path=k, schema_path=pattern
                ):
                    yield error
コード例 #2
0
def patternProperties(validator, patternProperties, instance, schema):
    if not validator.is_type(instance, "object"):
        return

    for pattern, subschema in iteritems(patternProperties):
        for k, v in iteritems(instance):
            if re.search(pattern, k):
                for error in validator.descend(v,
                                               subschema,
                                               path=k,
                                               schema_path=pattern):
                    yield error
コード例 #3
0
    def __init__(
            self,
            schema,
            types=(),
            resolver=None,
            format_checker=None,
            serialize=False,
            server_defaults=(),
    ):
        self._types = dict(self.DEFAULT_TYPES)
        self._types.update(types)

        if resolver is None:
            resolver = RefResolver.from_schema(schema)

        self.resolver = resolver
        self.format_checker = format_checker
        self.schema = schema
        self._serialize = serialize

        if self._serialize:
            self._validated = []
            self.VALIDATORS = dict((k, _serializers.REPLACEMENTS.get(v, v))
                                   for k, v in iteritems(self.VALIDATORS))
            self._server_defaults = dict(self.SERVER_DEFAULTS)
            self._server_defaults.update(server_defaults)
コード例 #4
0
    def iter_errors(self, instance, _schema=None):
        if _schema is None:
            _schema = self.schema

        with self.resolver.in_scope(_schema.get("id", "")):
            ref = _schema.get("$ref")
            if ref is not None:
                validators = [("$ref", ref)]
            else:
                validators = iteritems(_schema)
                if self._serialize:
                    initial = self._copy_validated(instance, _schema)
                    seen = tuple(k for k, v in initial)
                    validators = ((k, v) for k, v in validators
                                  if k not in seen)
                    validators = itertools.chain(initial, validators)

            for k, v in validators:
                validator = self.VALIDATORS.get(k)
                if validator is None:
                    continue

                errors = validator(self, v, instance, _schema) or ()
                for error in errors:
                    # set details if not already set by the called fn
                    error._set(
                        validator=k,
                        validator_value=v,
                        instance=instance,
                        schema=_schema,
                    )
                    if k != "$ref":
                        error.schema_path.appendleft(k)
                    yield error
コード例 #5
0
def properties_draft4(validator, properties, instance, schema):
    if not validator.is_type(instance, "object"):
        return

    if validator._serialize:
        validated_instance = validator._validated[-1]

    for property, subschema in iteritems(properties):
        if property in instance:
            if validator._serialize:
                lv = len(validator._validated)
            for error in validator.descend(
                instance[property],
                subschema,
                path=property,
                schema_path=property,
                # XXX serialize=True,
            ):
                yield error
            if validator._serialize:
                validated_instance[property] = validator._validated[lv]
                del validator._validated[lv:]
        elif validator._serialize:
            if "default" in subschema:
                validated_instance[property] = deepcopy(subschema["default"])
            if "serverDefault" in subschema:
                default = validator.server_default(instance, subschema)
                if default is not NO_DEFAULT:
                    validated_instance[property] = default
コード例 #6
0
    def total_errors(self):
        """
        The total number of errors in the entire tree, including children.

        """

        child_errors = sum(len(tree) for _, tree in iteritems(self._contents))
        return len(self.errors) + child_errors
コード例 #7
0
def patternProperties(validator, patternProperties, instance, schema):
    if not validator.is_type(instance, "object"):
        return

    if validator._serialize:
        validated_instance = validator._validated[-1]

    for pattern, subschema in iteritems(patternProperties):
        for k, v in iteritems(instance):
            if validator._serialize:
                lv = len(validator._validated)
            if re.search(pattern, k):
                for error in validator.descend(
                        v, subschema, path=k, schema_path=pattern
                ):
                    yield error
                if validator._serialize:
                    validated_instance[k] = validator._validated[lv]
                    del validator._validated[lv:]
コード例 #8
0
def properties_draft4(validator, properties, instance, schema):
    if not validator.is_type(instance, "object"):
        return

    for property, subschema in iteritems(properties):
        if property in instance:
            for error in validator.descend(
                    instance[property],
                    subschema,
                    path=property,
                    schema_path=property,
            ):
                yield error
コード例 #9
0
def properties_draft4(validator, properties, instance, schema):
    if not validator.is_type(instance, "object"):
        return

    for property, subschema in iteritems(properties):
        if property in instance:
            for error in validator.descend(
                instance[property],
                subschema,
                path=property,
                schema_path=property,
            ):
                yield error
コード例 #10
0
def dependencies(validator, dependencies, instance, schema):
    if not validator.is_type(instance, "object"):
        return

    for property, dependency in iteritems(dependencies):
        if property not in instance:
            continue

        if validator.is_type(dependency, "object"):
            for error in validator.descend(instance,
                                           dependency,
                                           schema_path=property):
                yield error
        else:
            dependencies = _utils.ensure_list(dependency)
            for dependency in dependencies:
                if dependency not in instance:
                    yield ValidationError("%r is a dependency of %r" %
                                          (dependency, property))
コード例 #11
0
    def __init__(
            self,
            base_uri,
            referrer,
            store=(),
            cache_remote=True,
            handlers=(),
    ):
        self.base_uri = base_uri
        self.resolution_scope = base_uri
        # This attribute is not used, it is for backwards compatibility
        self.referrer = referrer
        self.cache_remote = cache_remote
        self.handlers = dict(handlers)

        self.store = _utils.URIDict(
            (id, validator.META_SCHEMA)
            for id, validator in iteritems(meta_schemas))
        self.store.update(store)
        self.store[base_uri] = referrer
コード例 #12
0
def dependencies(validator, dependencies, instance, schema):
    if not validator.is_type(instance, "object"):
        return

    for property, dependency in iteritems(dependencies):
        if property not in instance:
            continue

        if validator.is_type(dependency, "object"):
            for error in validator.descend(
                    instance, dependency, schema_path=property
            ):
                yield error
        else:
            dependencies = _utils.ensure_list(dependency)
            for dependency in dependencies:
                if dependency not in instance:
                    yield ValidationError(
                        "%r is a dependency of %r" % (dependency, property)
                    )
コード例 #13
0
def properties_draft3(validator, properties, instance, schema):
    if not validator.is_type(instance, "object"):
        return

    if validator._serialize:
        validated_instance = validator._validated[-1]

    for property, subschema in iteritems(properties):
        if property in instance:
            if validator._serialize:
                lv = len(validator._validated)
            for error in validator.descend(
                instance[property],
                subschema,
                path=property,
                schema_path=property,
            ):
                yield error
            if validator._serialize:
                validated_instance[property] = validator._validated[lv]
                del validator._validated[lv:]
        else:
            if validator._serialize:
                if "default" in subschema:
                    validated_instance[property] = deepcopy(subschema["default"])
                if "serverDefault" in subschema:
                    default = validator.server_default(instance, subschema)
                    if default is not NO_DEFAULT:
                        validated_instance[property] = default
            if subschema.get("required", False):
                error = ValidationError("%r is a required property" % property)
                error._set(
                    validator="required",
                    validator_value=subschema["required"],
                    instance=instance,
                    schema=schema,
                )
                error.path.appendleft(property)
                error.schema_path.extend([property, "required"])
                yield error
コード例 #14
0
def properties_draft3(validator, properties, instance, schema):
    if not validator.is_type(instance, "object"):
        return

    for property, subschema in iteritems(properties):
        if property in instance:
            for error in validator.descend(
                    instance[property],
                    subschema,
                    path=property,
                    schema_path=property,
            ):
                yield error
        elif subschema.get("required", False):
            error = ValidationError("%r is a required property" % property)
            error._set(
                validator="required",
                validator_value=subschema["required"],
                instance=instance,
                schema=schema,
            )
            error.path.appendleft(property)
            error.schema_path.extend([property, "required"])
            yield error
コード例 #15
0
def properties_draft3(validator, properties, instance, schema):
    if not validator.is_type(instance, "object"):
        return

    for property, subschema in iteritems(properties):
        if property in instance:
            for error in validator.descend(
                instance[property],
                subschema,
                path=property,
                schema_path=property,
            ):
                yield error
        elif subschema.get("required", False):
            error = ValidationError("%r is a required property" % property)
            error._set(
                validator="required",
                validator_value=subschema["required"],
                instance=instance,
                schema=schema,
            )
            error.path.appendleft(property)
            error.schema_path.extend([property, "required"])
            yield error
コード例 #16
0
 def _set(self, **kwargs):
     for k, v in iteritems(kwargs):
         if getattr(self, k) is _unset:
             setattr(self, k, v)
コード例 #17
0
 def _set(self, **kwargs):
     for k, v in iteritems(kwargs):
         if getattr(self, k) is _unset:
             setattr(self, k, v)