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
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
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)
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