From b497449846fd7f27fc58b373b785ecd06cb0684d Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 8 Oct 2021 10:45:59 +0200 Subject: [PATCH] Now writing results --- rowers/models.py | 2 ++ rowers/tasks.py | 32 +++++++++++++++++++++++++++ rowers/views/workoutviews.py | 42 ++++++++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+) diff --git a/rowers/models.py b/rowers/models.py index b7b2e6f2..53b77559 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -3410,6 +3410,8 @@ class VirtualRaceResult(models.Model): verbose_name="Skill Class") race = models.ForeignKey(VirtualRace,on_delete=models.CASCADE,related_name='entries', blank=True,null=True) + course = models.ForeignKey(GeoCourse,on_delete=models.CASCADE,null=True,blank=True) + duration = models.TimeField(default=datetime.time(1,0)) distance = models.IntegerField(default=0) points = models.FloatField(default=0) diff --git a/rowers/tasks.py b/rowers/tasks.py index ed400fb2..7c6bea03 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -540,6 +540,10 @@ def handle_check_race_course(self, if 'mode' in kwargs: # pragma: no cover mode = kwargs['mode'] + summary = False + if 'summary' in kwargs: + summary = kwargs['summary'] + columns = ['time',' latitude',' longitude','cum_dist'] try: @@ -599,6 +603,7 @@ def handle_check_race_course(self, courseid=courseid ) + with engine.connect() as conn, conn.begin(): result = conn.execute(query) polygons = result.fetchall() @@ -736,6 +741,33 @@ def handle_check_race_course(self, with engine.connect() as conn, conn.begin(): result = conn.execute(query) + if summary: + + try: + row = rdata(csvfile=f1) + except IOError: # pragma: no cover + try: + row = rdata(csvfile=f1 + '.csv') + except IOError: # pragma: no cover + try: + row = rdata(csvfile=f1 + '.gz') + except IOError: # pragma: no cover + pass + + vals, units, typ = row.updateinterval_metric( + ' AverageBoatSpeed (m/s)',0.1,mode='larger', + debug=False,smoothwindow=15., + activewindow=[startsecond,endsecond] + ) + + summary = row.allstats() + row.write_csv(f1,gzip=True) + + query = "UPDATE `rowers_workout` SET `summary` = '%s' WHERE `id` = %s" % (summary, workoutid) + + with engine.connect() as conn, conn.begin(): + result = conn.execute(query) + conn.close() engine.dispose() diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index b88034f0..6aecc128 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -6168,6 +6168,48 @@ def workout_summary_edit_view(request,id,message="",successmessage="" powerupdateform = PowerIntervalUpdateForm(initial=data) + if request.method == 'POST' and "course" in request.POST: + courseselectform = CourseSelectForm(request.POST,choices=courses) + if courseselectform.is_valid(): + course = courseselectform.cleaned_data['course'] + # get or create a record + records = VirtualRaceResult.objects.filter( + userid=r.id, + course=course, + workoutid=row.id + ) + if records: + record = records[0] + else: + # create record + record = VirtualRaceResult( + userid = r.id, + username = r.user.first_name+' '+r.user.last_name, + workoutid = row.id, + weightcategory = r.weightcategory, + adaptiveclass = r.adaptiveclass, + course = course, + distance = course.distance, + boatclass = row.workouttype, + boattype = row.boattype, + sex = r.sex, + age = calculate_age(r.birthdate), + ) + record.save() + + job = myqueue( + queue, + handle_check_race_course, + row.csvfilename, + row.id, + course.id, + record.id, + r.user.email, + r.user.first_name, + summary=True, + ) + messages.info(request,'We are checking your time on the course in the background') + # feeling lucky / ruptures if request.method == 'POST' and "ruptures" in request.POST: df = pd.DataFrame({