From fb98877b5f8fcaeb98fb2feb544824c3bd8ef84c Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 15 Feb 2022 14:43:20 +0100 Subject: [PATCH] planviews done --- rowers/tests/testdata/testdata.tcx.gz | Bin 0 -> 4000 bytes rowers/views/planviews.py | 160 ++++++++------------------ rowers/views/workoutviews.py | 3 +- 3 files changed, 51 insertions(+), 112 deletions(-) create mode 100644 rowers/tests/testdata/testdata.tcx.gz diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz new file mode 100644 index 0000000000000000000000000000000000000000..606ac0444b8f10be9aacb6aa111b4542d6d42c82 GIT binary patch literal 4000 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 GfB^vQ2R*g` literal 0 HcmV?d00001 diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index aa0a0bc4..b8dc1a75 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -3,10 +3,7 @@ from rowers.utils import allmonths from rowers.utils import allsundays from rowers.views.statements import * -from rowingdata import trainingparser -import json -from taggit.models import Tag import rowers.garmin_stuff as gs from rowers import credits @@ -57,17 +54,17 @@ def plannedsession_comment_view(request, id=0, userid=0): elif ps.sessiontype == 'indoorrace': # pragma: no cover sessiontype = 'indoor online virtual race' - res = myqueue(queuehigh, - handle_sendemailnewcomment, r.user.first_name, - r.user.last_name, - r.user.email, - request.user.first_name, - request.user.last_name, - comment, ps.name, ps.id, - emailbounced=r.emailbounced, - sessiontype=sessiontype, - commentlink=url - ) + _ = myqueue(queuehigh, + handle_sendemailnewcomment, r.user.first_name, + r.user.last_name, + r.user.email, + request.user.first_name, + request.user.last_name, + comment, ps.name, ps.id, + emailbounced=r.emailbounced, + sessiontype=sessiontype, + commentlink=url + ) commenters = {oc.user for oc in comments if oc.notification} if ps.sessiontype == 'race': # pragma: no cover @@ -94,21 +91,21 @@ def plannedsession_comment_view(request, id=0, userid=0): pass if u != request.user and u != r.user: # pragma: no cover ocr = Rower.objects.get(user=u) - res = myqueue(queue, - handle_sendemailnewresponse, - u.first_name, - u.last_name, - u.email, - request.user.first_name, - request.user.last_name, - comment, - ps.name, - ps.id, - c.id, - emailbounced=ocr.emailbounced, - sessiontype=sessiontype, - commentlink=url - ) + _ = myqueue(queue, + handle_sendemailnewresponse, + u.first_name, + u.last_name, + u.email, + request.user.first_name, + request.user.last_name, + comment, + ps.name, + ps.id, + c.id, + emailbounced=ocr.emailbounced, + sessiontype=sessiontype, + commentlink=url + ) if ps.sessiontype in ['race', 'indoorrace']: # pragma: no cover followers = VirtualRaceFollower.objects.filter(race__id=ps.id) for follower in followers: @@ -116,17 +113,17 @@ def plannedsession_comment_view(request, id=0, userid=0): if follower.user: othername = follower.user.first_name+' '+follower.user.last_name email = follower.emailaddress - res = myqueue(queue, - handle_sendemailnewresponse, - othername, '', email, - request.user.first_name, - request.user.last_name, - comment, - ps.name, ps.id, c.id, - emailbounced=False, - sessiontype=sessiontype, - commentlink=url, - ) + _ = myqueue(queue, + handle_sendemailnewresponse, + othername, '', email, + request.user.first_name, + request.user.last_name, + comment, + ps.name, ps.id, c.id, + emailbounced=False, + sessiontype=sessiontype, + commentlink=url, + ) url = reverse('plannedsession_comment_view', kwargs={'id': ps.id}) return HttpResponseRedirect(url) @@ -201,7 +198,7 @@ def plannedsession_message_view(request, id=0, userid=0): rowername = participant.user.first_name fromemail = ps.manager.email - job = myqueue( + _ = myqueue( queue, handle_send_template_email, 'virtualracemessage.html', @@ -423,7 +420,6 @@ def plannedsession_multiclone_view( message="This functionality requires a Coach or Self-Coach plan", redirect_field_name=None) def template_share_view(request, id=0, userid=0): - r = getrequestplanrower(request, userid=userid) ps = get_object_or_404(PlannedSession, pk=id) if ps.can_be_shared: ps.is_public = True @@ -440,7 +436,6 @@ def template_share_view(request, id=0, userid=0): message="This functionality requires a Coach or Self-Coach plan", redirect_field_name=None) def template_makeprivate_view(request, id=0, userid=0): - r = getrequestplanrower(request, userid=userid) ps = get_object_or_404(PlannedSession, pk=id) ps.is_public = False ps.save() @@ -805,8 +800,6 @@ def plannedsession_multicreate_view(request, except IndexError: trainingplan = None - m = Rower.objects.get(user=request.user) - qset = PlannedSession.objects.filter( rower__in=[r], manager=request.user, @@ -934,10 +927,7 @@ def plannedsession_teamcreate_view(request, '%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') teams = Team.objects.filter(manager=request.user) - if teams.count() > 0: - teamchoices = [(team.id, team.name) for team in teams] - teaminitial = [str(teams[0].id)] - else: + if teams.count() == 0: messages.info( request, "You have no teams established yet. We are redirecting you to the Team Management page.") url = reverse('rower_teams_view') @@ -1000,14 +990,6 @@ def plannedsession_teamcreate_view(request, return HttpResponseRedirect(url) - #url = reverse(plannedsession_teamcreate_view) - #startdatestring = startdate.strftime('%Y-%m-%d') - #enddatestring = enddate.strftime('%Y-%m-%d') - #url += '?when='+startdatestring+'/'+enddatestring - - #next = request.GET.get('next', url) - - # return HttpResponseRedirect(next) else: # pragma: no cover timeperiod = startdate.strftime( '%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') @@ -1123,7 +1105,6 @@ def plannedsession_teamedit_view(request, '%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') teams = Team.objects.filter(manager=request.user) - teamchoices = [(team.id, team.name) for team in teams] teaminitial = ps.team.all() @@ -1387,7 +1368,6 @@ def plannedsessions_coach_view(request, 'dateform': dateform, 'timeperiod': timeperiod, 'rowers': rowers, - 'rower': therower, 'active': 'nav-plan', 'theteam': theteam, 'unmatchedworkouts': unmatchedworkouts, @@ -1587,10 +1567,6 @@ def plannedsessions_print_view(request, userid=0, startdatestring='', enddatestr sps = get_sessions(r, startdate=startdate, enddate=enddate) - completeness = {} - actualvalue = {} - completiondate = {} - timeperiod = startdate.strftime( '%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') return render(request, 'plannedsessions_print.html', @@ -1781,14 +1757,6 @@ def plannedsession_clone_view(request, id=0, userid=0): startdate = startdate.date() enddate = enddate.date() - try: - trainingplan = TrainingPlan.objects.filter( - startdate__lte=startdate, - rowers=r, - enddate__gte=enddate)[0] - except IndexError: # pragma: no cover - trainingplan = None - ps = get_object_or_404(PlannedSession, pk=id) rowers = ps.rower.all() @@ -1844,10 +1812,7 @@ def plannedsession_teamclone_view(request, id=0): r = getrequestplanrower(request) teams = Team.objects.filter(manager=request.user) - if teams.count() > 0: # pragma: no cover - teamchoices = [(team.id, team.name) for team in teams] - teaminitial = [str(teams[0].id)] - else: # pragma: no cover + if teams.count() == 0: # pragma: no cover messages.info( request, "You have no teams established yet. We are redirecting you to the Team Management page.") url = reverse('rower_teams_view') @@ -1857,14 +1822,6 @@ def plannedsession_teamclone_view(request, id=0): startdate = startdate.date() enddate = enddate.date() - try: - trainingplan = TrainingPlan.objects.filter( - startdate__lte=startdate, - rowers=r, - enddate__gte=enddate)[0] - except IndexError: # pragma: no cover - trainingplan = None - ps = get_object_or_404(PlannedSession, pk=id) ps.pk = None @@ -2140,9 +2097,6 @@ def plannedsession_edit_view(request, id=0, userid=0): 'userid': r.user.id, }) - startdatestring = startdate.strftime('%Y-%m-%d') - enddatestring = enddate.strftime('%Y-%m-%d') - url += '?when='+timeperiod return HttpResponseRedirect(url) @@ -2215,9 +2169,6 @@ def plannedsession_edit_view(request, id=0, userid=0): @permission_required('workout.change_workout', fn=get_workout_by_opaqueid, raise_exception=True) def plannedsession_detach_view(request, id=0, psid=0): - - r = getrequestrower(request) - ps = get_object_or_404(PlannedSession, pk=psid) w = get_workout(id) @@ -2236,10 +2187,6 @@ def plannedsession_view(request, id=0, userid=0): r = getrequestplanrower(request, userid=userid) ps = get_object_or_404(PlannedSession, pk=id) - if ps.steps is not None: # pragma: no cover - jsons = ps.steps - else: - jsons = {} try: # pragma: no cover r = VirtualRace.objects.get(id=ps.id) @@ -2324,14 +2271,11 @@ def plannedsession_view(request, id=0, userid=0): coursecompleted=False, ) record.save() - job = myqueue(queue, handle_check_race_course, - w.csvfilename, w.id, ps.course.id, - record.id, - w.user.user.email, w.user.user.first_name, - mode='coursetest') - - intsecs = 0 - microsecs = 0 + _ = myqueue(queue, handle_check_race_course, + w.csvfilename, w.id, ps.course.id, + record.id, + w.user.user.email, w.user.user.first_name, + mode='coursetest') # taking workout duration plus 1 minute penalty wdict['time'] = datetime.timedelta( @@ -2571,10 +2515,6 @@ def rower_view_instantplan(request, id='', userid=0): raise Http404("Plan does not exist") plan = InstantPlan.objects.get(uuid=id) - try: - discountedprice = credits.discounted(plan.price, r) - except AttributeError: # pragma: no cover - discountedprice = plan.price authorizationstring = 'Bearer '+settings.WORKOUTS_FIT_TOKEN url = settings.WORKOUTS_FIT_URL+"/trainingplan/"+id @@ -2637,7 +2577,7 @@ def rower_view_instantplan(request, id='', userid=0): if form.is_valid(): if plan.price > 0: # pragma: no cover - eurocredits = credits.withdraw(plan.price, r) + _ = credits.withdraw(plan.price, r) plansteps = response.json() name = form.cleaned_data['name'] @@ -2811,7 +2751,6 @@ def add_instantplan_view(request): def rower_select_instantplan(request, id=0): r = getrequestrower(request, userid=id) - themanager = getrower(request.user) # get and present available plans ips = InstantPlan.objects.all().order_by( @@ -2839,7 +2778,7 @@ def rower_select_instantplan(request, id=0): 'rower': r, 'active': 'nav-plan', 'plans': ips, - + 'breadcrumbs': breadcrumbs, }) @@ -2848,7 +2787,6 @@ def rower_select_instantplan(request, id=0): redirect_field_name=None) def rower_create_trainingplan(request, id=0): therower = getrequestrower(request, userid=id) - theuser = therower.user themanager = getrower(request.user) if request.method == 'POST' and 'date' in request.POST: @@ -3570,7 +3508,7 @@ class TrainingMicroCycleUpdate(UpdateView): # pragma: no cover def form_valid(self, form): form.instance.user = self.request.user form.instance.post_date = datetime.datetime.now() - microcycle = form.save() + _ = form.save() return super(TrainingMicroCycleUpdate, self).form_valid(form) @@ -3689,7 +3627,7 @@ class TrainingTargetUpdate(UpdateView): # pragma: no cover def form_valid(self, form): form.instance.user = self.request.user form.instance.post_date = datetime.datetime.now() - target = form.save() + _ = form.save() return super(TrainingTargetUpdate, self).form_valid(form) def get_object(self, *args, **kwargs): diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 2d809408..3922a2fe 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -11,7 +11,8 @@ from urllib.parse import urlparse, parse_qs from json.decoder import JSONDecodeError import ruptures as rpt -from rowers.courses import getnearestraces, getnearestcourses +from rowers.courses import getnearestcourses + def default(o): # pragma: no cover if isinstance(o, numpy.int64):