def submit_ids(user: User): """ Route to create ids upload package. User must be in `INFO_VERIFIED` state. Will transition user to `ID_NOT_VERIFIED` One should call `/v1/ids/<id>/verify` in order to actually start verification process (see docs there) """ if user.state != INFO_VERIFIED: raise InvalidState(user.state) schema = Schema( { 'upload1': Coerce(ObjectId), 'upload2': Coerce(ObjectId), 'doc_type': In(DOC_TYPES), 'doc_country': All(Length(2, 2), str), Optional('doc_state', default=None): Any(None, All(Length(2, 20), str)), }, extra=REMOVE_EXTRA, required=True) data = schema(request.json) upload1 = Upload.objects(user=user, id=data['upload1']).get() upload2 = Upload.objects(user=user, id=data['upload2']).get() try: if not (upload1.stored_size <= 4 * 1024 * 1024): raise ValidationError('Invalid image size') if not (upload2.stored_size <= 4 * 1024 * 1024): raise ValidationError('Invalid image size') except KeyError as err: raise MissingFile(str(err)) id_upload = IDUpload.create( user=user, upload1=upload1, upload2=upload2, doc_country=data['doc_country'], doc_state=data['doc_state'], doc_type=data['doc_type'], ) user.update(doc_type=data['doc_type']) user.transition(ID_NOT_VERIFIED) return jsonify(id_upload.to_json()), 201
def test_upload(service, user, token): data = { 'filename': 'blop.jpg', 'content_type': 'image/jpeg', 'size': 500 * 1024, } res = service.post('/v1/upload', data, auth=token(user)) assert res.status_code == 200, res.json upload = Upload.objects().get() assert upload.user == user assert upload.filename == f'{user.id}/{upload.id}.jpg'