Пример #1
0
def remove():
    user_uid = request.user_uid

    expense_to_delete = request.get_json(force=True, silent=True)
    try:
        validate_remove_request(expense_to_delete)
    except AssertionError as err:
        return make_error_response(str(err), status_code=400)

    try:
        db_facade.remove(expense=expense_to_delete, user_uid=user_uid)
        return make_json_response('[]')
    except NoExpenseWithThisId as ex:
        return make_error_response(ApiError.NO_EXPENSE_WITH_THIS_ID,
                                   status_code=404)
Пример #2
0
def sync():
    user_uid = request.user_uid
    request_data = request.get_json(force=True, silent=True)

    try:
        validate_sync_request(request_data)
    except AssertionError as err:
        return make_error_response(str(err), status_code=400)

    try:
        return make_json_response(
            db_facade.sync(sync_request_objs=request_data, user_uid=user_uid))
    except RuntimeError as err:
        return make_error_response("problem at the back end. mi scuzi.",
                                   status_code=500)
    except DynamodbThroughputExhausted as err:
        return make_error_response(
            "The API cannot server your request currently.", status_code=413)
Пример #3
0
def update():
    user_uid = request.user_uid

    request_data = request.get_json(force=True, silent=True)
    is_valid, error_msg = validate_update_request(request_data)
    if not is_valid:
        return make_error_response(error_msg, 400)

    try:
        result = db_facade.update(request_data['updated'],
                                  request_data['previous_state'], user_uid)
        return make_json_response(result)
    except NoExpenseWithThisId as err:
        return make_error_response(ApiError.NO_EXPENSE_WITH_THIS_ID,
                                   status_code=404)
    except ValueError as err:
        return make_error_response(ApiError.IDS_OF_EXPENSES_DONT_MATCH,
                                   status_code=400)
Пример #4
0
def statistics(from_dt, to_dt):
    try:
        assert (parse(to_dt) - parse(from_dt)).total_seconds(
        ) <= 60 * 24 * 3600  # 60 days * 24hr/day * 3600 sec/hr
    except AssertionError:
        return make_error_response(ApiError.MAXIMUM_TIME_WINDOW_EXCEEDED,
                                   status_code=400)
    except ValueError:
        return make_error_response(ApiError.INVALID_QUERY_PARAMS,
                                   status_code=400)

    from_dt = ensure_ts_str_ends_with_z(from_dt)
    to_dt = ensure_ts_str_ends_with_z(to_dt)

    result = db_facade.statistics(from_dt=from_dt,
                                  to_dt=to_dt,
                                  user_uid=request.user_uid)

    return make_json_response(result, 200)
Пример #5
0
def persist():
    user_uid = request.user_uid

    expense = request.get_json(force=True, silent=True)
    try:
        validate_persist_request(expense)
    except AssertionError as e:

        return make_error_response(str(e), status_code=400)
    persisted = db_facade.persist(expense=expense, user_uid=user_uid)

    return make_json_response(persisted, status_code=200)
Пример #6
0
    def decorated(*args, **kwargs):
        try:

            header_name = current_app.config['CUSTOM_AUTH_HEADER_NAME']

            id_token = request.headers.get(header_name, None)
            user_uid = FirebaseTokenValidator.validate_id_token_and_get_uid(
                id_token=id_token)

            request.user_uid = user_uid
            return f(*args, **kwargs)
        except FirebaseTokenValidator.FirebaseIdTokenValidationExc:
            abort(
                make_error_response("can't find id_token in the %s header" %
                                    header_name,
                                    status_code=403))