コード例 #1
0
ファイル: views.py プロジェクト: elesant/BirthdayStarter
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)
コード例 #2
0
ファイル: views.py プロジェクト: elesant/BirthdayStarter
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)
コード例 #3
0
ファイル: views.py プロジェクト: elesant/BirthdayStarter
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)
コード例 #4
0
ファイル: views.py プロジェクト: elesant/BirthdayStarter
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)
コード例 #5
0
ファイル: views.py プロジェクト: elesant/BirthdayStarter
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)