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)
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 Meta:
model = VirtualRaceResult

View File

@@ -1,6 +1,7 @@
# Python
from django.utils import timezone
from datetime import datetime
import datetime as dt
from datetime import timedelta
from datetime import date
import time
@@ -18,7 +19,7 @@ queuehigh = django_rq.get_queue('low')
from rowers.models import (
Rower, Workout,Team,
GeoCourse, TrainingMicroCycle,TrainingMesoCycle,TrainingMacroCycle,
TrainingPlan,PlannedSession,VirtualRaceResult
TrainingPlan,PlannedSession,VirtualRaceResult,CourseTestResult
)
import metrics
@@ -61,6 +62,17 @@ def add_workouts_plannedsession(ws,ps,r):
w.save()
result += 1
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:
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:
completiondate = ws.reverse()[0].date
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:
(
coursetime,

View File

@@ -210,6 +210,10 @@ def handle_check_race_course(self,
else:
debug = False
mode = 'race'
if 'mode' in kwargs:
mode = kwargs['mode']
columns = ['time',' latitude',' longitude','cum_dist']
try:
@@ -293,6 +297,15 @@ def handle_check_race_course(self,
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():
result = conn.execute(query)

View File

@@ -115,6 +115,7 @@
<td> {{ ps.startdate|date:"Y-m-d" }} </td>
<td> {{ ps.enddate|date:"Y-m-d" }} </td>
<td>
{% if ps.sessiontype != 'race' %}
{% if ps.name != '' %}
<a class="small"
href="/rowers/sessions/{{ ps.id }}/{{ timeperiod }}/rower/{{ rower.id }}">{{ ps.name }}</a>
@@ -122,6 +123,15 @@
<a class="small"
href="/rowers/sessions/{{ ps.id }}/{{ timeperiod }}/rower/{{ rower.id }}">Unnamed Session</a>
{% 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> {{ ps.get_sessiontype_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)
for ps in sps:
print ps.name,ps.sessiontype
completeness = {}
actualvalue = {}
completiondate = {}
@@ -13187,7 +13190,7 @@ def plannedsession_view(request,id=0,rowerid=0,
ws = get_workouts_session(r,ps)
ratio,status,completiondate = is_session_complete(r,ps)
ratio = int(100.*ratio)
# ranking for test
@@ -13214,19 +13217,34 @@ def plannedsession_view(request,id=0,rowerid=0,
'type': w.workouttype,
}
if ps.sessiontype == 'coursetest':
(
coursetimeseconds,
coursemeters,
coursecompleted
) = courses.get_time_course([w],ps.course)
intsecs = int(coursetimeseconds)
microsecs = int(1.e6*(coursetimeseconds-intsecs))
vs = CourseTestResult.objects.filter(plannedsession=ps)
if vs:
for record in vs:
if record.workoutid == w.id:
coursemeters = record.distance
coursecompleted = record.coursecompleted
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(
seconds=intsecs,
microseconds=microsecs
wdict['time'] = datetime.timedelta(
seconds=intsecs,
microseconds=microsecs
)
wdict['distance'] = int(round(coursemeters))
wdict['distance'] = int(round(coursemeters))
ranking.append(wdict)
@@ -13631,7 +13649,7 @@ def virtualevent_create_view(request):
end_time=end_time,
course=geocourse,
comment=comment,
sessiontype = 'coursetest',
sessiontype = 'race',
timezone=timezone_str,
evaluation_closure=evaluation_closure,
registration_closure=registration_closure,