diff --git a/rowers/tasks.py b/rowers/tasks.py index 3fc8685a..dea6dd32 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -4,6 +4,7 @@ import time import gc import gzip import shutil +import numpy as np import rowingdata from rowingdata import main as rmain @@ -17,6 +18,8 @@ from matplotlib import figure import stravalib +from utils import serialize_list,deserialize_list + from rowers.dataprepnodjango import update_strokedata from django.core.mail import send_mail, BadHeaderError,EmailMessage @@ -171,17 +174,22 @@ def handle_otwsetpower(f1,boattype,weightvalue, # This function generates all the static (PNG image) plots @app.task def handle_makeplot(f1,f2,t,hrdata,plotnr,imagename): + hrmax = hrdata['hrmax'] hrut2 = hrdata['hrut2'] hrut1 = hrdata['hrut1'] hrat = hrdata['hrat'] hrtr = hrdata['hrtr'] hran = hrdata['hran'] - + ftp = hrdata['ftp'] + powerzones = deserialize_list(hrdata['powerzones']) + powerperc = np.array(deserialize_list(hrdata['powerperc'])).astype(int) rr = rowingdata.rower(hrmax=hrmax,hrut2=hrut2, hrut1=hrut1,hrat=hrat, - hrtr=hrtr,hran=hran) + hrtr=hrtr,hran=hran, + ftp=ftp,powerperc=powerperc, + powerzones=powerzones) try: row = rdata(f2,rower=rr) except IOError: diff --git a/rowers/tests.py b/rowers/tests.py index 9b2310f4..8fee138d 100644 --- a/rowers/tests.py +++ b/rowers/tests.py @@ -13,6 +13,7 @@ from django.core.files.uploadedfile import SimpleUploadedFile from time import strftime,strptime,mktime,time,daylight import os from rowers.tasks import handle_makeplot +from rowers.utils import serialize_list,deserialize_list from rowers.c2stuff import C2NoTokenError from minimocktest import MockTestCase @@ -1062,9 +1063,15 @@ class PlotTests(TestCase): duration="0:55:00",distance=8000, csvfilename=filename) -# timestr = strftime("%Y%m%d-%H%M%S") -# imagename = f1+timestr+'.png' -# fullpathimagename = 'static/plots/'+imagename + # timestr = strftime("%Y%m%d-%H%M%S") + # imagename = f1+timestr+'.png' + # fullpathimagename = 'static/plots/'+imagename + powerperc = 100*np.array([r.pw_ut2, + r.pw_ut1, + r.pw_at, + r.pw_tr,r.pw_an])/r.ftp + + self.hrdata = { 'hrmax':r.max, 'hrut2':r.ut2, @@ -1073,7 +1080,9 @@ class PlotTests(TestCase): 'hrtr':r.tr, 'hran':r.an, 'ftp':r.ftp, - } + 'powerperc':serialize_list(powerperc), + 'powerzones':serialize_list(r.powerzones), + } def test_ote_plots(self): diff --git a/rowers/utils.py b/rowers/utils.py index 1d40f487..11c54dbd 100644 --- a/rowers/utils.py +++ b/rowers/utils.py @@ -1,4 +1,14 @@ import math +import numpy as np + +def serialize_list(value,token=','): + assert(isinstance(value, list) or isinstance(value, tuple) or isinstance(value,np.ndarray)) + return token.join([unicode(s) for s in value]) + +def deserialize_list(value,token=','): + if isinstance(value, list): + return value + return value.split(token) def geo_distance(lat1,lon1,lat2,lon2): """ Approximate distance and bearing between two points diff --git a/rowers/views.py b/rowers/views.py index e80ddfb1..733b3927 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -192,7 +192,7 @@ def splitstdata(lijst): return [np.array(t),np.array(latlong)] -from utils import geo_distance +from utils import geo_distance,serialize_list,deserialize_list # Check if a user is a Pro member def promember(user): @@ -3135,6 +3135,12 @@ def workout_add_otw_powerplot_view(request,id): fullpathimagename = 'static/plots/'+imagename u = request.user r = Rower.objects.get(user=u) + powerperc = 100*np.array([r.pw_ut2, + r.pw_ut1, + r.pw_at, + r.pw_tr,r.pw_an])/r.ftp + + hrpwrdata = { 'hrmax':r.max, 'hrut2':r.ut2, @@ -3143,6 +3149,8 @@ def workout_add_otw_powerplot_view(request,id): 'hrtr':r.tr, 'hran':r.an, 'ftp':r.ftp, + 'powerperc':powerperc, + 'powerzones':r.powerzones, } # make plot - asynchronous task @@ -3180,6 +3188,13 @@ def workout_add_piechart_view(request,id): fullpathimagename = 'static/plots/'+imagename u = request.user r = Rower.objects.get(user=u) + + powerperc = 100*np.array([r.pw_ut2, + r.pw_ut1, + r.pw_at, + r.pw_tr,r.pw_an])/r.ftp + + hrpwrdata = { 'hrmax':r.max, 'hrut2':r.ut2, @@ -3188,6 +3203,8 @@ def workout_add_piechart_view(request,id): 'hrtr':r.tr, 'hran':r.an, 'ftp':r.ftp, + 'powerperc':powerperc, + 'powerzones':r.powerzones, } # make plot - asynchronous task @@ -3225,6 +3242,13 @@ def workout_add_power_piechart_view(request,id): fullpathimagename = 'static/plots/'+imagename u = request.user r = Rower.objects.get(user=u) + + powerperc = 100*np.array([r.pw_ut2, + r.pw_ut1, + r.pw_at, + r.pw_tr,r.pw_an])/r.ftp + + hrpwrdata = { 'hrmax':r.max, 'hrut2':r.ut2, @@ -3233,6 +3257,8 @@ def workout_add_power_piechart_view(request,id): 'hrtr':r.tr, 'hran':r.an, 'ftp':r.ftp, + 'powerperc':serialize_list(powerperc), + 'powerzones':serialize_list(r.powerzones), } # make plot - asynchronous task @@ -3268,6 +3294,12 @@ def workout_add_timeplot_view(request,id): fullpathimagename = 'static/plots/'+imagename u = request.user r = Rower.objects.get(user=u) + powerperc = 100*np.array([r.pw_ut2, + r.pw_ut1, + r.pw_at, + r.pw_tr,r.pw_an])/r.ftp + + hrpwrdata = { 'hrmax':r.max, 'hrut2':r.ut2, @@ -3276,6 +3308,8 @@ def workout_add_timeplot_view(request,id): 'hrtr':r.tr, 'hran':r.an, 'ftp':r.ftp, + 'powerperc':serialize_list(powerperc), + 'powerzones':serialize_list(r.powerzones), } # make plot - asynchronous task @@ -3313,6 +3347,12 @@ def workout_add_distanceplot_view(request,id): fullpathimagename = 'static/plots/'+imagename u = request.user r = Rower.objects.get(user=u) + powerperc = 100*np.array([r.pw_ut2, + r.pw_ut1, + r.pw_at, + r.pw_tr,r.pw_an])/r.ftp + + hrpwrdata = { 'hrmax':r.max, 'hrut2':r.ut2, @@ -3321,6 +3361,8 @@ def workout_add_distanceplot_view(request,id): 'hrtr':r.tr, 'hran':r.an, 'ftp':r.ftp, + 'powerperc':serialize_list(powerperc), + 'powerzones':serialize_list(r.powerzones), } # make plot - asynchronous task @@ -3356,6 +3398,12 @@ def workout_add_distanceplot2_view(request,id): fullpathimagename = 'static/plots/'+imagename u = request.user r = Rower.objects.get(user=u) + powerperc = 100*np.array([r.pw_ut2, + r.pw_ut1, + r.pw_at, + r.pw_tr,r.pw_an])/r.ftp + + hrpwrdata = { 'hrmax':r.max, 'hrut2':r.ut2, @@ -3363,6 +3411,9 @@ def workout_add_distanceplot2_view(request,id): 'hrat':r.at, 'hrtr':r.tr, 'hran':r.an, + 'ftp':r.ftp, + 'powerperc':serialize_list(powerperc), + 'powerzones':serialize_list(r.powerzones), } # make plot - asynchronous task @@ -3400,6 +3451,12 @@ def workout_add_timeplot2_view(request,id): fullpathimagename = 'static/plots/'+imagename u = request.user r = Rower.objects.get(user=u) + powerperc = 100*np.array([r.pw_ut2, + r.pw_ut1, + r.pw_at, + r.pw_tr,r.pw_an])/r.ftp + + hrpwrdata = { 'hrmax':r.max, 'hrut2':r.ut2, @@ -3407,6 +3464,9 @@ def workout_add_timeplot2_view(request,id): 'hrat':r.at, 'hrtr':r.tr, 'hran':r.an, + 'ftp':r.ftp, + 'powerperc':serialize_list(powerperc), + 'powerzones':serialize_list(r.powerzones), } # make plot - asynchronous task @@ -3856,7 +3916,6 @@ def workout_upload_view(request,message=""): r.pw_at, r.pw_tr,r.pw_an])/r.ftp - print powerperc rr = rrower(hrmax=r.max,hrut2=r.ut2, hrut1=r.ut1,hrat=r.at, hrtr=r.tr,hran=r.an,ftp=r.ftp, @@ -3956,14 +4015,24 @@ def workout_upload_view(request,message=""): imagename = f1[:-4]+'.png' fullpathimagename = 'static/plots/'+imagename u = request.user - hrpwrdata = { - 'hrmax':r.max, - 'hrut2':r.ut2, - 'hrut1':r.ut1, - 'hrat':r.at, - 'hrtr':r.tr, - 'hran':r.an, - } + r = Rower.objects.get(user=request.user) + powerperc = 100*np.array([r.pw_ut2, + r.pw_ut1, + r.pw_at, + r.pw_tr,r.pw_an])/r.ftp + + + hrpwrdata = { + 'hrmax':r.max, + 'hrut2':r.ut2, + 'hrut1':r.ut1, + 'hrat':r.at, + 'hrtr':r.tr, + 'hran':r.an, + 'ftp':r.ftp, + 'powerperc':serialize_list(powerperc), + 'powerzones':serialize_list(r.powerzones), + } # make plot - asynchronous task plotnrs = {