Example #1
0
    def __init__(self, validator, schema=None):
        """
        :param validator: An instance of Validator-(sub-)class that uses this
                          schema.
        :param schema: A definition-schema as ``dict``. Defaults to an empty
                       one.
        """
        self._repr = ("unvalidated schema: {}", schema)
        if not isinstance(validator, UnconcernedValidator):
            raise RuntimeError('validator argument must be a Validator-'
                               'instance.')
        self.validator = validator
        self.regenerate_validation_schema()
        self.schema_validator = SchemaValidator(
            None,
            allow_unknown=self.validation_schema,
            error_handler=errors.SchemaErrorHandler,
            target_validator=validator,
        )

        if isinstance(schema, str):
            schema = validator.schema_registry.get(schema, schema)
        if not isinstance(schema, abc.Mapping):
            raise SchemaError(errors.SCHEMA_TYPE.format(schema))
        else:
            schema = normalize_schema(schema)

        self.validate(schema)
        self._repr = ("{}", schema)
        self.schema = schema
Example #2
0
 def __delitem__(self, key):
     _new_schema = self.schema.copy()
     try:
         del _new_schema[key]
     except ValueError:
         raise SchemaError("Schema has no field '{}' defined".format(key))
     except Exception:
         raise
     else:
         del self.schema[key]
Example #3
0
    def _validate(self, schema):
        """ Validates a schema that defines rules against supported rules.

        :param schema: The schema to be validated as a legal cerberus schema
                       according to the rules of this Validator object.
        """
        if isinstance(schema, str):
            schema = self.validator.schema_registry.get(schema, schema)

        if schema is None:
            raise SchemaError(errors.SCHEMA_MISSING)

        schema = copy(schema)
        for field in schema:
            if isinstance(schema[field], str):
                schema[field] = rules_set_registry.get(schema[field],
                                                       schema[field])

        if not self.schema_validator(schema, normalize=False):
            raise SchemaError(self.schema_validator.errors)
Example #4
0
    def _validate(self, schema):
        """ Validates a schema that defines rules against supported rules.

        :param schema: The schema to be validated as a legal cerberus schema
                       according to the rules of the related Validator object.
        """
        if isinstance(schema, str):
            schema = self.validator.schema_registry.get(schema, schema)

        if schema is None:
            raise SchemaError(errors.SCHEMA_MISSING)

        resolved = {
            k: self.validator.rules_set_registry.get(v, v)
            for k, v in schema.items()
            if isinstance(v, str)
        }

        if not self.schema_validator(ChainMap(resolved, schema), normalize=False):
            raise SchemaError(self.schema_validator.errors)
Example #5
0
 def update(self, schema):
     try:
         schema = normalize_schema(schema)
         _new_schema = self.schema.copy()
         _new_schema.update(schema)
         self.validate(_new_schema)
     except ValueError:
         raise SchemaError(errors.SCHEMA_TYPE.format(schema))
     except Exception as e:
         raise e
     else:
         self.schema = _new_schema