Private
Public Access
1
0

using models in tasks.py

This commit is contained in:
Sander Roosendaal
2022-07-11 20:30:05 +02:00
parent 7f3d80dc4e
commit 3d62772ed2
4 changed files with 81 additions and 191 deletions

View File

@@ -11,7 +11,10 @@ except KeyError:
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
from rowers.models import *
from rowers.models import (
Workout, GeoPolygon, GeoPoint, GeoCourse,
VirtualRaceResult, CourseTestResult, Rower
)
import math
from rowers.courseutils import (
@@ -51,7 +54,6 @@ from rowingdata import make_cumvalues
from uuid import uuid4
from rowingdata import rowingdata as rdata
from datetime import timedelta
from sqlalchemy import create_engine
from rowers.celery import app
from celery import shared_task
@@ -296,7 +298,9 @@ def summaryfromsplitdata(splitdata, data, filename, sep='|', workouttype='rower'
@app.task
def handle_request_post(url, data, debug=False, **kwargs): # pragma: no cover
response = requests.post(url, data)
if 'localhost' in url:
url = 'http'+url[5:]
response = requests.post(url, data, verify=False)
dologging('upload_api.log', data)
dologging('upload_api.log', response.status_code)
return response.status_code
@@ -530,30 +534,7 @@ def getagegrouprecord(age, sex='male', weightcategory='hwt',
return power
def polygon_to_path(polygon, debug=True):
pid = polygon[0]
query = "SELECT id, latitude, longitude FROM rowers_geopoint WHERE polygon_id = {pid}"\
" ORDER BY order_in_poly ASC".format(
pid=pid)
if debug:
engine = create_engine(database_url_debug, echo=False)
else: # pragma: no cover
engine = create_engine(database_url, echo=False)
with engine.connect() as conn, conn.begin():
result = conn.execute(query)
points = result.fetchall()
conn.close()
engine.dispose()
s = []
for point in points:
s.append([point[1], point[2]])
p = path.Path(s[:-1])
return p
from rowers.models import polygon_to_path
@app.task(bind=True)
@@ -639,25 +620,9 @@ def handle_check_race_course(self,
rowdata = rowdata.resample('100ms', on='dt').mean()
rowdata = rowdata.interpolate()
# initiate database engine
course = GeoCourse.objects.get(courseid)
polygons = course.polygons.all()
if debug: # pragma: no cover
engine = create_engine(database_url_debug, echo=False)
else:
engine = create_engine(database_url, echo=False)
# get polygons
query = "SELECT id,name FROM rowers_geopolygon WHERE course_id = {courseid} ORDER BY order_in_course ASC".format(
courseid=courseid
)
with engine.connect() as conn, conn.begin():
result = conn.execute(query)
polygons = result.fetchall()
conn.close()
engine.dispose()
paths = []
for polygon in polygons:
@@ -759,33 +724,25 @@ def handle_check_race_course(self,
coursedistance = coursemeters
velo = coursedistance/coursetimeseconds
points = 100*(2.-referencespeed/velo)
query = 'UPDATE rowers_virtualraceresult SET coursecompleted = 1,'\
' duration = "{duration}", distance = {distance},'\
' workoutid = {workoutid}, startsecond = {startsecond},'\
' endsecond = {endsecond}, points={points} WHERE id={recordid}'.format(
recordid=recordid,
duration=totaltime_sec_to_string(coursetimeseconds),
distance=int(coursemeters),
points=points,
workoutid=workoutid,
startsecond=startsecond,
endsecond=endsecond,)
record = VirtualRaceResult.objects.get(id=recordid)
record.duration = totaltime_sec_to_string(coursetimeseconds)
record.distance=int(coursemeters)
record.points = points
record.startsecond = startsecond
record.endsecond = endsecond
record.workoutid = workoutid
record.coursecompleted = 1
record.save()
if mode == 'coursetest':
query = 'UPDATE rowers_coursetestresult SET coursecompleted = 1,'\
' duration = "{duration}", distance = {distance},'\
' workoutid = {workoutid}, startsecond = {startsecond},'\
' endsecond = {endsecond}, points={points} WHERE id={recordid}'.format(
recordid=recordid,
duration=totaltime_sec_to_string(coursetimeseconds),
distance=int(coursemeters),
points=points,
workoutid=workoutid,
startsecond=startsecond,
endsecond=endsecond,)
with engine.connect() as conn, conn.begin():
result = conn.execute(query)
record = CourseTestResult.objects.get(id=recordid)
record.duration = totaltime_sec_to_string(coursetimeseconds)
record.distance = int(coursemeters)
record.workoutid = workoutid
record.startsecond = startsecond
record.endsecond = endsecond
record.points = points
record.save()
if summary:
try:
@@ -807,15 +764,10 @@ def handle_check_race_course(self,
summary = row.allstats()
row.write_csv(f1, gzip=True)
workout = Workout.objects.get(id=workoutid)
workout.summary = summary
workout.save()
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()
if successemail:
handle_sendemail_coursesucceed(
@@ -827,36 +779,26 @@ def handle_check_race_course(self,
return 1
else: # pragma: no cover
query = 'UPDATE rowers_virtualraceresult SET coursecompleted = 0,'\
' duration = "{duration}", distance = {distance},'\
' workoutid = {workoutid}, startsecond = {startsecond},'\
' endsecond = {endsecond}, points={points} WHERE id={recordid}'.format(
recordid=recordid,
duration=totaltime_sec_to_string(0),
distance=0,
points=0.0,
workoutid=workoutid,
startsecond=startsecond,
endsecond=endsecond,)
record = VirtualRaceResult.object.get(id=recordid)
record.duration = totaltime_sec_to_string(0)
record.distance = 0
record.workoutid = workoutid
record.startsecond = startsecond
record.endsecond = endsecond
record.points = 0
record.save()
if mode == 'coursetest':
query = 'UPDATE rowers_coursetestresult SET coursecompleted = 0,'\
' duration = "{duration}", distance = {distance}, workoutid = {workoutid}'\
', startsecond = {startsecond}, endsecond = {endsecond}'\
', points={points} WHERE id={recordid}'.format(
recordid=recordid,
duration=totaltime_sec_to_string(0),
distance=0,
points=0,
workoutid=workoutid,
startsecond=startsecond,
endsecond=endsecond,)
record = CourseTestResult.objects.get(id=recordid)
record.duration = totaltime_sec_to_string(0)
record.distance = 0
record.workoutid = workoutid
record.startsecond = startsecond
record.endsecond = endsecond
record.points = 0
record.save()
with engine.connect() as conn, conn.begin():
result = conn.execute(query)
conn.close()
engine.dispose()
# add times for all gates to log file
with open(logfile, 'ab') as f:
@@ -1109,10 +1051,7 @@ def handle_calctrimp(id,
hrmax,
hrmin,
debug=False, **kwargs):
if debug: # pragma: no cover
engine = create_engine(database_url_debug, echo=False)
else:
engine = create_engine(database_url, echo=False)
tss = 0
normp = 0
@@ -1201,21 +1140,14 @@ def handle_calctrimp(id,
if hrtss > 1000: # pragma: no cover
hrtss = 0
query = 'UPDATE rowers_workout SET rscore = {tss},'\
' normp = {normp}, trimp={trimp}, hrtss={hrtss},'\
' normv={normv}, normw={normw} WHERE id={id}'.format(
tss=int(tss),
normp=int(normp),
trimp=int(trimp),
hrtss=int(hrtss),
normv=normv,
normw=normw,
id=id,)
with engine.connect() as conn, conn.begin():
_ = conn.execute(query)
conn.close()
engine.dispose()
workout = Workout.objects.get(id=id)
workout.tss = int(tss)
workout.normp = int(normp)
workout.trimp = int(trimp)
workout.hrtss = int(hrtss)
workout.normv = normv
workout.normw = normw
workout.save()
return 1
@@ -2857,23 +2789,13 @@ def handle_update_wps(rid, types, ids, mode, debug=False, **kwargs):
except ValueError: # pragma: no cover
return 0
rower = Rower.objects.get(id=rid)
if mode == 'water':
query = "UPDATE `rowers_rower` SET `median_wps` = '%s' WHERE `id` = '%s'" % (
wps_median, rid)
rower.median_wps = wps_median
else:
query = "UPDATE `rowers_rower` SET `median_wps_erg` = '%s' WHERE `id` = '%s'" % (
wps_median, rid)
rower.median_wps_erg = wps_median
if debug: # pragma: no cover
engine = create_engine(database_url_debug, echo=False)
else:
engine = create_engine(database_url, echo=False)
with engine.connect() as conn, conn.begin():
_ = conn.execute(query)
conn.close()
engine.dispose()
rower.save()
return wps_median
@@ -3022,23 +2944,8 @@ def handle_nk_async_workout(alldata, userid, nktoken, nkid, delaysec, defaulttim
workoutid, error = add_workout_from_data(userid, nkid, data, df)
# dologging('nklog.log','NK Workout ID {id}'.format(id=workoutid))
if debug: # pragma: no cover
engine = create_engine(database_url_debug, echo=False)
else:
engine = create_engine(database_url, echo=False)
query = 'SELECT uploadedtonk from rowers_workout WHERE id ={workoutid}'.format(
workoutid=workoutid)
newnkid = 0
with engine.connect() as conn, conn.begin():
result = conn.execute(query)
tdata = result.fetchall()
if tdata:
newnkid = tdata[0][0]
conn.close()
workout = Workout.objects.get(id=workoutid)
newnkid = workout.uploadedtonk
parkedids = []
try:
@@ -3326,22 +3233,8 @@ def handle_c2_async_workout(alldata, userid, c2token, c2id, delaysec, defaulttim
workoutid = response.json()['id']
if debug: # pragma: no cover
engine = create_engine(database_url_debug, echo=False)
else:
engine = create_engine(database_url, echo=False)
query = 'SELECT uploadedtoc2 from rowers_workout WHERE id ={workoutid}'.format(
workoutid=workoutid)
newc2id = 0
with engine.connect() as conn, conn.begin():
result = conn.execute(query)
tdata = result.fetchall()
if tdata: # pragma: no cover
newc2id = tdata[0][0]
conn.close()
workout = Workout.objects.get(id=workoutid)
newc2id = workout.uploadedtoc2
parkedids = []
with open('c2blocked.json', 'r') as c2blocked:
@@ -3358,14 +3251,10 @@ def handle_c2_async_workout(alldata, userid, c2token, c2id, delaysec, defaulttim
json.dump(tdata, c2blocked)
# set distance, time
query = "UPDATE `rowers_workout` SET `distance` = '%s', `duration` = '%s' WHERE `id` = '%s'" % (
distance, duration, workoutid)
with engine.connect() as conn, conn.begin():
result = conn.execute(query)
conn.close()
engine.dispose()
workout = Workout.objects.get(id=workoutid)
workout.distance = distance
workout.duration = duration
workout.save()
# summary
if 'workout' in data:
@@ -3382,14 +3271,9 @@ def handle_c2_async_workout(alldata, userid, c2token, c2id, delaysec, defaulttim
summary, sa, results = summaryfromsplitdata(
splitdata, data, csvfilename, workouttype=workouttype)
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()
workout = Workout.objects.get(id=workoutid)
workout.summary = summary
workout.save()
from rowingdata.trainingparser import getlist
if sa: