Exemplo n.º 1
0
def climb_object(request):
    if request.method == 'GET':
        return HttpResponseRedirect(reverse('stepupmountains:mountain_list'))

    if not re.match("^[0-9]+$", request.POST['climbed_object']):
        return HttpResponseRedirect(reverse('stepupmountains:mountain_list'))

    climbed_object = get_object_by_id(request.user,
                                      request.POST['climbed_object'])
    if request.user != climbed_object.user:
        return HttpResponseForbidden(
            'You are not allowed to climb this object')

    latest_climb = get_all_climbs(
        request.user).extra(order_by=['-datetime']).first()
    if latest_climb:
        if latest_climb.datetime + datetime.timedelta(
                minutes=0) > timezone.now():
            return HttpResponseRedirect(
                reverse('stepupmountains:not_so_quickly'))

    climb = Climb(user=request.user, climbed_object=climbed_object)
    climb.save()
    return HttpResponseRedirect(
        reverse('stepupmountains:mountain_list_args',
                kwargs={'climbed': climbed_object.name}))
Exemplo n.º 2
0
    def test_fastest_climb_different_heights(self):
        """
        Check simple fastest climb calculation
        """
        self.testpassword = '******'
        self.testuser = User.objects.create_user('UliSnek',
                                                 '*****@*****.**',
                                                 self.testpassword)
        self.testuser.save()
        self.climbing_object1 = ClimbingObject(user=self.testuser,
                                               name='test_object',
                                               height=1000,
                                               order=0)
        self.climbing_object1.save()
        self.climbing_object2 = ClimbingObject(user=self.testuser,
                                               name='test_object2',
                                               height=4000,
                                               order=0)
        self.climbing_object2.save()

        highest_mountain = Mountain(name='Mount Everest',
                                    elevation=8850,
                                    comment='Mount Everest comment')
        highest_mountain.save()

        self.climb1 = Climb(user=self.testuser,
                            climbed_object=self.climbing_object1)
        self.climb1.save()
        self.climb2 = Climb(user=self.testuser,
                            climbed_object=self.climbing_object1)
        self.climb2.save()
        self.climb3 = Climb(user=self.testuser,
                            climbed_object=self.climbing_object1)
        self.climb3.save()
        self.climb4 = Climb(user=self.testuser,
                            climbed_object=self.climbing_object1)
        self.climb4.save()
        self.climb5 = Climb(user=self.testuser,
                            climbed_object=self.climbing_object1)
        self.climb5.save()
        self.climb6 = Climb(user=self.testuser,
                            climbed_object=self.climbing_object1)
        self.climb6.save()
        self.climb7 = Climb(user=self.testuser,
                            climbed_object=self.climbing_object1)
        self.climb7.save()
        self.climb8 = Climb(user=self.testuser,
                            climbed_object=self.climbing_object1)
        self.climb8.save()
        self.climb9 = Climb(user=self.testuser,
                            climbed_object=self.climbing_object2)
        self.climb9.save()

        self.assertEqual(
            self.climb9.datetime - self.climb4.datetime,
            get_fastest_climb(
                get_all_climbs(self.testuser).order_by('datetime'),
                highest_mountain))
Exemplo n.º 3
0
def statistics(request):
    total_ascent = get_total_ascent(request.user)
    total_stairs = get_total_stairs(request.user)
    highest_mountain = Mountain.objects.order_by('-elevation').first()

    first_climbed_date = get_all_climbs(
        request.user).order_by('datetime').first()
    if first_climbed_date is None:
        first_climbed = 'Never'
        average_climb = 'N/A'
        average_active_climb = 'N/A'
        highest_mountain_climbed = 'N/A'
        str_fastest_climb = 'N/A'
    else:
        first_climbed = first_climbed_date.datetime
        total_days = (timezone.now().date() - first_climbed.date()).days + 1
        average_climb = round(total_ascent / total_days, 1)

        climbing_days = get_all_climbs(request.user).values('datetime')
        active_days = set()
        for d in climbing_days:
            active_days.add(d['datetime'].date())

        num_active_days = len(active_days)
        average_active_climb = round(total_ascent / num_active_days, 1)
        highest_mountain_climbed = int(
            math.floor(total_ascent / highest_mountain.elevation))
        fastest_climb = get_fastest_climb(
            get_all_climbs(request.user).order_by('datetime'),
            highest_mountain)
        str_fastest_climb = format_fastest_climb(fastest_climb)

    context = {
        'total_ascent': total_ascent,
        'first_climbed': first_climbed,
        'average_climb': average_climb,
        'average_active_climb': average_active_climb,
        'total_stairs': total_stairs,
        'highest_mountain_climbed': highest_mountain_climbed,
        'fastest_climb': str_fastest_climb
    }
    return render(request, 'stepupmountains/statistics.html', context)
Exemplo n.º 4
0
def history(request):
    climbs = get_all_climbs(request.user).order_by('-datetime')
    context = {'climbs': climbs}
    return render(request, 'stepupmountains/history.html', context)