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