def api_birthday_pay(request): benchmark_start = time.time() response = prepare_response(request) status = 200 birthday_id = request.POST['birthday_id'] if birthday_id: try: birthday = Birthday.objects.get(id=birthday_id) response['birthday_id'] = birthday_id contribution = BirthdayContribution.objects.get(birthday=birthday, contributor=request.user) amount = float(request.POST['amount']) if amount > 0.0: contribution.amount += amount contribution.save() response['amount'] = amount response['total_amount'] = contribution.amount response['birthday_contribution_id'] = contribution.id birthday.amount_raised += amount birthday.save() except Birthday.DoesNotExist: status = 404 else: status = 400 response['meta']['status'] = status benchmark_end = time.time() response['meta']['execution_time'] = benchmark_end - benchmark_start return build_response(response, status=status)
def api_birthday_join(request): benchmark_start = time.time() response = prepare_response(request) status = 200 birthday_id = request.POST['birthday_id'] if birthday_id: try: birthday = Birthday.objects.get(id=birthday_id) response['birthday_id'] = birthday_id try: contribution = BirthdayContribution.objects.get(birthday=birthday, contributor=request.user) status = 204 except BirthdayContribution.DoesNotExist: contribution = BirthdayContribution() contribution.birthday = birthday contribution.contributor = request.user contribution.save() status = 201 response['birthday_contribution_id'] = contribution.id except Birthday.DoesNotExist: status = 404 else: status = 400 response['meta']['status'] = status benchmark_end = time.time() response['meta']['execution_time'] = benchmark_end - benchmark_start return build_response(response, status=status)
def api_present_parse(request): benchmark_start = time.time() response = prepare_response(request) status = 200 try: item_link = request.POST['item_link'] response['item_link'] = item_link conn = urllib.urlopen(item_link) page_response = conn.read() conn.close() soup = BeautifulSoup(page_response) asn = soup.find('input', {'id': 'ASIN'})['value'] response['asn'] = asn try: birthday_id = request.POST['birthday_id'] birthday = Birthday.objects.get(id=birthday_id) response['birthday_id'] = birthday_id except Birthday.DoesNotExist: birthday = None if birthday: try: present = Present.objects.get(asn=asn, birthday=birthday) status = 204 except Present.DoesNotExist: name = soup.find('span', {'id': 'btAsinTitle'}).find(text=True) response['name'] = name try: image_link = soup.find('img', {'id': 'original-main-image'})['src'] except: try: image_link = soup.find('img', {'id': 'main-image'})['src'] except: image_link = None response['image_link'] = image_link cost = float(soup.find('span', {'id': 'actualPriceValue'}).find(class_='priceLarge').find(text=True).split('$')[1].replace(',', '')) response['cost'] = cost new_present = Present() new_present.item_link = item_link new_present.image_link = image_link new_present.name = name new_present.cost = cost new_present.asn = asn new_present.birthday = birthday new_present.save() if cost > birthday.amount_target: birthday.amount_target = cost birthday.save() status = 201 else: status = 404 except KeyError: status = 400 response['meta']['status'] = status benchmark_end = time.time() response['meta']['execution_time'] = benchmark_end - benchmark_start return build_response(response, status=status)
def api_user_register(request): benchmark_start = time.time() response = prepare_response(request) status = 200 form = UserRegisterForm(request.POST) errors = get_validation_errors(form) if form.is_valid(): data = form.cleaned_data new_user = User(email=data['email']) new_user.set_password(data['password']) new_user.save() response['new_user_id'] = new_user.id status = 201 else: response['errors'] = errors status = 400 response['meta']['status'] = status benchmark_end = time.time() response['meta']['execution_time'] = benchmark_end - benchmark_start return build_response(response, status=status)
def api_friend_list(request): benchmark_start = time.time() response = prepare_response(request) status = 200 try: friend_list = get_facebook_friends(request)['data'] response['friend_list'] = friend_list friend_list_ids = [] for datum in response['friend_list']: friend_list_ids.append(datum['id']) birthdays = Birthday.objects.filter(facebook_id__in=friend_list_ids) friend_list_data = {} for datum in birthdays: friend_list_data[datum.facebook_id] = datum for datum in response['friend_list']: facebook_id = datum['id'] if facebook_id in friend_list_data.keys(): contributions = BirthdayContribution.objects.filter(birthday=friend_list_data[facebook_id]).count() pleged_percentage = int(friend_list_data[facebook_id].amount_raised / (friend_list_data[facebook_id].amount_target or 1) * 100) progress_bar_class = '' if pleged_percentage <= 25: progress_bar_class = 'bar-danger' elif pleged_percentage > 25 and pleged_percentage <= 75: progress_bar_class = 'bar-warning' elif pleged_percentage > 75: progress_bar_class = 'bar-success' datum['bar_display'] = '<div class="bar {0}" style="width: {1}%"></div>'.format(progress_bar_class, pleged_percentage) datum['num_contributions'] = contributions else: datum['bar_display'] = '' datum['num_contributions'] = 0 except KeyError: status = 400 response['meta']['status'] = status benchmark_end = time.time() response['meta']['execution_time'] = benchmark_end - benchmark_start # add number of contributions return build_response(response, status=status)