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
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
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)
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
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
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
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:]
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
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))
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
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) )
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
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
def _set(self, **kwargs): for k, v in iteritems(kwargs): if getattr(self, k) is _unset: setattr(self, k, v)