Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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'