示例#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
示例#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
示例#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
示例#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
 def _fixture_template(self, data_ok, expected=None, data_fail=None, msg=None):
     d = FieldsDoc(**data_ok).save()
     if expected is None:
         expected = data_ok
     response = self.client.get('/fieldsdoc')
     json_data = response.get_json()[config.ITEMS][0]
     try:
         for key, value in iteritems(expected):
             self.assertEqual(json_data[key], value)
     finally:
         d.delete()
     if not data_fail:
         return
     # post
     response = self.client.post('/fieldsdoc/',
                                 data=json.dumps(data_fail),
                                 content_type='application/json')
     json_data = response.get_json()
     self.assertEqual(json_data[config.STATUS], "ERR")
     self.assertEqual(json_data[config.ISSUES], msg)
示例#6
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
示例#7
0
 def _fixture_template(self,
                       data_ok,
                       expected=None,
                       data_fail=None,
                       msg=None):
     d = FieldsDoc(**data_ok).save()
     if expected is None:
         expected = data_ok
     response = self.client.get('/fieldsdoc')
     json_data = response.get_json()[config.ITEMS][0]
     try:
         for key, value in iteritems(expected):
             self.assertEqual(json_data[key], value)
     finally:
         d.delete()
     if not data_fail:
         return
     # post
     response = self.client.post('/fieldsdoc/',
                                 data=json.dumps(data_fail),
                                 content_type='application/json')
     json_data = response.get_json()
     self.assertEqual(json_data[config.STATUS], "ERR")
     self.assertEqual(json_data[config.ISSUES], msg)