Private
Public Access
1
0

made everything work with async

This commit is contained in:
Sander Roosendaal
2018-05-17 18:19:42 +02:00
parent b6c67f7e2b
commit 4f8bdf1543
5 changed files with 137 additions and 15 deletions

View File

@@ -1575,6 +1575,14 @@ class VirtualRaceResult(models.Model):
age = models.IntegerField(null=True) age = models.IntegerField(null=True)
class CourseTestResult(models.Model):
userid = models.IntegerField(default=0)
workoutid = models.IntegerField(null=True)
plannedsession = models.ForeignKey(PlannedSession)
duration = models.TimeField(default=datetime.time(1,0))
distance = models.IntegerField(default=0)
coursecompleted = models.BooleanField(default=False)
class VirtualRaceResultForm(ModelForm): class VirtualRaceResultForm(ModelForm):
class Meta: class Meta:
model = VirtualRaceResult model = VirtualRaceResult

View File

@@ -1,6 +1,7 @@
# Python # Python
from django.utils import timezone from django.utils import timezone
from datetime import datetime from datetime import datetime
import datetime as dt
from datetime import timedelta from datetime import timedelta
from datetime import date from datetime import date
import time import time
@@ -18,7 +19,7 @@ queuehigh = django_rq.get_queue('low')
from rowers.models import ( from rowers.models import (
Rower, Workout,Team, Rower, Workout,Team,
GeoCourse, TrainingMicroCycle,TrainingMesoCycle,TrainingMacroCycle, GeoCourse, TrainingMicroCycle,TrainingMesoCycle,TrainingMacroCycle,
TrainingPlan,PlannedSession,VirtualRaceResult TrainingPlan,PlannedSession,VirtualRaceResult,CourseTestResult
) )
import metrics import metrics
@@ -61,6 +62,17 @@ def add_workouts_plannedsession(ws,ps,r):
w.save() w.save()
result += 1 result += 1
comments.append('Attached workout %i to session' % w.id) comments.append('Attached workout %i to session' % w.id)
if ps.sessiontype == 'coursetest':
record = CourseTestResult(
userid=w.user.id,
plannedsession=ps,
duration=dt.time(0,0),
coursecompleted=False,
)
record.save()
job = myqueue(queue,handle_check_race_course,w.csvfilename,
w.id,ps.course.id,record.id,
mode='coursetest')
else: else:
errors.append('Workout %i did not match session dates' % w.id) errors.append('Workout %i did not match session dates' % w.id)
@@ -273,7 +285,68 @@ def is_session_complete_ws(ws,ps):
if not completiondate: if not completiondate:
completiondate = ws.reverse()[0].date completiondate = ws.reverse()[0].date
return ratio,'partial',completiondate return ratio,'partial',completiondate
elif ps.sessiontype in ['coursetest','race']: elif ps.sessiontype == 'race':
vs = VirtualRaceResult.objects.filter(race=ps)
wids = [w.id for w in ws]
for record in vs:
if record.workoutid in wids:
if record.coursecompleted:
ratio = record.distance/ps.sessionvalue
return ratio,'completed',completiondate
if ps.course:
(
coursetime,
coursemeters,
coursecompleted
) = courses.get_time_course(ws,ps.course)
if coursecompleted:
return 1.0,'completed',completiondate
else:
return ratio,'partial',completiondate
else:
if ps.criterium == 'exact':
if ratio == 1.0:
return ratio,'completed',completiondate
else:
if not completiondate:
completiondate = ws.reverse()[0].date
return ratio,'partial',completiondate
elif ps.criterium == 'minimum':
if ratio >= 1.0:
return ratio,'completed',completiondate
else:
if not completiondate:
completiondate = ws.reverse()[0].date
return ratio,'partial',completiondate
else:
if ratio>cratiomin and ratio<cratiomax:
return ratio,'completed',completiondate
else:
return ratio,'partial',completiondate
elif ps.sessiontype == 'coursetest':
vs = CourseTestResult.objects.filter(plannedsession=ps)
wids = [w.id for w in ws]
for record in vs:
if record.workoutid in wids:
if record.coursecompleted:
ratio = record.distance/ps.sessionvalue
return ratio,'completed',completiondate
# we're still here - no record, need to create one
if ws:
record = CourseTestResult(
userid=ws[0].user.id,
plannedsession=ps,
duration=dt.time(0,0),
coursecompleted=False,
)
record.save()
job = myqueue(queue,handle_check_race_course,ws[0].csvfilename,
ws[0].id,ps.course.id,record.id,
mode='coursetest')
if ps.course: if ps.course:
( (
coursetime, coursetime,

View File

@@ -210,6 +210,10 @@ def handle_check_race_course(self,
else: else:
debug = False debug = False
mode = 'race'
if 'mode' in kwargs:
mode = kwargs['mode']
columns = ['time',' latitude',' longitude','cum_dist'] columns = ['time',' latitude',' longitude','cum_dist']
try: try:
@@ -293,6 +297,15 @@ def handle_check_race_course(self,
workoutid=workoutid, workoutid=workoutid,
) )
if mode == 'coursetest':
query = 'UPDATE "rowers_coursetestresult" SET "coursecompleted" = 1, "duration" = "{duration}", "distance" = {distance}, "workoutid" = {workoutid} WHERE "id"="{recordid}"'.format(
recordid=recordid,
duration=totaltime_sec_to_string(coursetimeseconds),
distance=int(coursemeters),
workoutid=workoutid,
)
with engine.connect() as conn, conn.begin(): with engine.connect() as conn, conn.begin():
result = conn.execute(query) result = conn.execute(query)

View File

@@ -115,6 +115,7 @@
<td> {{ ps.startdate|date:"Y-m-d" }} </td> <td> {{ ps.startdate|date:"Y-m-d" }} </td>
<td> {{ ps.enddate|date:"Y-m-d" }} </td> <td> {{ ps.enddate|date:"Y-m-d" }} </td>
<td> <td>
{% if ps.sessiontype != 'race' %}
{% if ps.name != '' %} {% if ps.name != '' %}
<a class="small" <a class="small"
href="/rowers/sessions/{{ ps.id }}/{{ timeperiod }}/rower/{{ rower.id }}">{{ ps.name }}</a> href="/rowers/sessions/{{ ps.id }}/{{ timeperiod }}/rower/{{ rower.id }}">{{ ps.name }}</a>
@@ -122,6 +123,15 @@
<a class="small" <a class="small"
href="/rowers/sessions/{{ ps.id }}/{{ timeperiod }}/rower/{{ rower.id }}">Unnamed Session</a> href="/rowers/sessions/{{ ps.id }}/{{ timeperiod }}/rower/{{ rower.id }}">Unnamed Session</a>
{% endif %} {% endif %}
{% else %}
{% if ps.name != '' %}
<a class="small"
href="/rowers/virtualevent/{{ ps.id }}">{{ ps.name }}</a>
{% else %}
<a class="small"
href="/rowers/virtualevent/{{ ps.id }}">Unnamed Race</a>
{% endif %}
{% endif %}
</td> </td>
<td> {{ ps.get_sessiontype_display }} </td> <td> {{ ps.get_sessiontype_display }} </td>
<td> {{ ps.get_sessionmode_display }} </td> <td> {{ ps.get_sessionmode_display }} </td>

View File

@@ -12857,6 +12857,9 @@ def plannedsessions_view(request,timeperiod='thisweek',rowerid=0):
sps = get_sessions(r,startdate=startdate,enddate=enddate) sps = get_sessions(r,startdate=startdate,enddate=enddate)
for ps in sps:
print ps.name,ps.sessiontype
completeness = {} completeness = {}
actualvalue = {} actualvalue = {}
completiondate = {} completiondate = {}
@@ -13187,7 +13190,7 @@ def plannedsession_view(request,id=0,rowerid=0,
ws = get_workouts_session(r,ps) ws = get_workouts_session(r,ps)
ratio,status,completiondate = is_session_complete(r,ps) ratio,status,completiondate = is_session_complete(r,ps)
ratio = int(100.*ratio) ratio = int(100.*ratio)
# ranking for test # ranking for test
@@ -13214,19 +13217,34 @@ def plannedsession_view(request,id=0,rowerid=0,
'type': w.workouttype, 'type': w.workouttype,
} }
if ps.sessiontype == 'coursetest': if ps.sessiontype == 'coursetest':
( vs = CourseTestResult.objects.filter(plannedsession=ps)
coursetimeseconds, if vs:
coursemeters, for record in vs:
coursecompleted if record.workoutid == w.id:
) = courses.get_time_course([w],ps.course) coursemeters = record.distance
intsecs = int(coursetimeseconds) coursecompleted = record.coursecompleted
microsecs = int(1.e6*(coursetimeseconds-intsecs)) t = record.duration
wdict['time'] = datetime.timedelta(
hours=t.hour,
seconds=t.second,
minutes=t.minute,
microseconds=t.microsecond
)
wdict['distance'] = int(round(coursemeters))
else:
(
coursetimeseconds,
coursemeters,
coursecompleted
) = courses.get_time_course([w],ps.course)
intsecs = int(coursetimeseconds)
microsecs = int(1.e6*(coursetimeseconds-intsecs))
wdict['time'] = datetime.timedelta( wdict['time'] = datetime.timedelta(
seconds=intsecs, seconds=intsecs,
microseconds=microsecs microseconds=microsecs
) )
wdict['distance'] = int(round(coursemeters)) wdict['distance'] = int(round(coursemeters))
ranking.append(wdict) ranking.append(wdict)
@@ -13631,7 +13649,7 @@ def virtualevent_create_view(request):
end_time=end_time, end_time=end_time,
course=geocourse, course=geocourse,
comment=comment, comment=comment,
sessiontype = 'coursetest', sessiontype = 'race',
timezone=timezone_str, timezone=timezone_str,
evaluation_closure=evaluation_closure, evaluation_closure=evaluation_closure,
registration_closure=registration_closure, registration_closure=registration_closure,