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}))
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))
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)
def history(request): climbs = get_all_climbs(request.user).order_by('-datetime') context = {'climbs': climbs} return render(request, 'stepupmountains/history.html', context)