Exemple #1
0
def add_drink(request, userinfo, messages, *args, **kwargs):
    """
    Submit a caffeinated beverage.

    :param HttpRequest request: POST request
    :param User userinfo: :py:class:`caffeine.models.User`
    :param dict messages: message dictionary
    :return: messages array or :py:class:`django.http.HttpResponseBadRequest`

    """

    ctype = request.POST.get('beverage')
    drinktime = request.POST.get('time')
    time = None
    if not ctype:
        messages.setdefault('error', []).append(
            API_ERROR_MISSING_PARAM_BEVERAGE)
    elif not hasattr(DRINK_TYPES, ctype):
        messages.setdefault('error', []).append(
            API_ERROR_INVALID_BEVERAGE)
    if not drinktime:
        messages.setdefault('error', []).append(
            API_ERROR_MISSING_PARAM_TIME)
    else:
        time = _parse_drinktime(drinktime, messages)
        if time is not None and time > datetime.now() + timedelta(minutes=1):
            messages.setdefault('error', []).append(API_ERROR_FUTURE_DATETIME)
    if 'error' in messages:
        return HttpResponseBadRequest(json.dumps(messages), 'text/json')
    data = {'date': time.date(), 'time': time.time()}
    form = SubmitCaffeineForm(userinfo, getattr(DRINK_TYPES, ctype), data)
    form.date = time.date()
    form.time = time.time()
    if not form.is_valid():
        for key in form.errors:
            messages.setdefault('error', []).extend(form.errors[key])
        return HttpResponseBadRequest(json.dumps(messages), 'text/json')
    drink = form.save()
    messages['success'] = _('Your %(drink)s has been registered!') % {
        'drink': drink
    }
    return messages