Ejemplo n.º 1
0
    def validate(self, document, schema=None, update=False, context=None):
        """
        Main validation method which simply tries to validate against cerberus
        schema and if it does not fail, repeats the same against mongoengine
        validation machinery.
        """

        # call default eve's validator
        if not Validator.validate(self, document, schema, update, context):
            return False

        # validate using mongoengine field validators
        if self.resource:
            model_cls = app.data.models[self.resource]
            doc = model_cls(**document)
            # rewind all file-like's
            for attr, field in iteritems(model_cls._fields):
                if isinstance(field, FileField) and attr in document:
                    document[attr].stream.seek(0)
            try:
                doc.validate()
            except ValidationError as e:
                for field_name, error in e.errors.items():
                    self._error(field_name, str(e))
                return False

        return True
Ejemplo n.º 2
0
    def validate(self, document, schema=None, update=False, context=None):
        """
        Main validation method which simply tries to validate against cerberus
        schema and if it does not fail, repeats the same against mongoengine
        validation machinery.
        """
        # call default eve's validator
        if not Validator.validate(self, document, schema, update, context):
            return False

        # validate using mongoengine field validators
        if self.resource and context is None:
            model_cls = app.data.models[self.resource]

            # We must translate any database field names to their corresponding
            # MongoEngine names before attempting to validate them.
            translate = lambda x: model_cls._reverse_db_field_map.get(x, x)
            document = {translate(k): document[k] for k in document}

            doc = model_cls(**document)
            # rewind all file-like's
            for attr, field in iteritems(model_cls._fields):
                if isinstance(field, FileField) and attr in document:
                    document[attr].stream.seek(0)
            try:
                doc.validate()
            except ValidationError as e:
                for field_name, error in e.errors.items():
                    self._error(field_name, str(e))
                return False

        return True
Ejemplo n.º 3
0
    def validate(self, document, schema=None, update=False, context=None):
        """
        Main validation method which simply tries to validate against cerberus
        schema and if it does not fail, repeats the same against mongoengine
        validation machinery.
        """
        # call default eve's validator
        if not Validator.validate(self, document, schema, update, context):
            return False

        # validate using mongoengine field validators
        if self.resource and context is None:
            model_cls = app.data.models[self.resource]

            # We must translate any database field names to their corresponding
            # MongoEngine names before attempting to validate them.
            translate = lambda x: model_cls._reverse_db_field_map.get(x, x)
            document = {translate(k): document[k] for k in document}

            doc = model_cls(**document)
            # rewind all file-like's
            for attr, field in iteritems(model_cls._fields):
                if isinstance(field, FileField) and attr in document:
                    document[attr].stream.seek(0)
            try:
                doc.validate()
            except ValidationError as e:
                for field_name, error in e.errors.items():
                    self._error(field_name, str(e))
                return False

        return True
Ejemplo n.º 4
0
    def validate(self, document, schema=None, update=False, context=None):
        """
        Main validation method which simply tries to validate against cerberus
        schema and if it does not fail, repeats the same against mongoengine
        validation machinery.
        """

        # fix timestamp
        if app.config["DATE_CREATED"] in list(self.schema.keys()):
            now = get_utc_time()
            if not update:
                document[app.config["DATE_CREATED"]] = document.get(
                    app.config["DATE_CREATED"], now)
            document[app.config["LAST_UPDATED"]] = now

        # call default eve's validator
        if not Validator.validate(self, document, schema, update, context):
            return False

        # validate using mongoengine field validators
        if self.resource:
            model_cls = app.data.models[self.resource]
            translate = lambda x: model_cls._reverse_db_field_map.get(x)
            new_document = dict()
            for field, value in document.items():
                field_copy = field.split(".")
                field_copy[0] = translate(field_copy[0])
                if None not in field_copy:
                    new_document[".".join(field_copy)] = value
            document = new_document
            doc = model_cls(**document)
            # rewind all file-like's
            for attr, field in iteritems(model_cls._fields):
                if isinstance(field, FileField) and attr in document:
                    document[attr].stream.seek(0)
            try:
                doc.validate()
            except ValidationError as e:
                for field_name, error in e.errors.items():
                    self._error(field_name, str(e))
                return False

        return True
Ejemplo n.º 5
0
 def validate(self, document, schema=None, update=False):
     """
     Main validation method which simply tries to validate against cerberus
     schema and if it does not fail, repeats the same against mongoengine
     validation machinery.
     """
     # call default eve's validator
     if not Validator.validate(self, document, schema, update):
         return False
     # validate using mongoengine field validators
     model_cls = app.data.models[self.resource]
     doc = model_cls(**document)
     # rewind all file-like's
     for attr, field in iteritems(model_cls._fields):
         if isinstance(field, FileField) and attr in document:
             document[attr].stream.seek(0)
     try:
         doc.validate()
     except ValidationError as e:
         for field_name, error in e.errors.items():
             self._error(field_name, str(e))
         return False
     return True