Private
Public Access
1
0

Strokedata post working (somehow)

This commit is contained in:
Sander Roosendaal
2016-11-26 21:32:37 +01:00
parent 0facd70ac1
commit 2b8527074e
4 changed files with 122 additions and 61 deletions

View File

@@ -27,6 +27,10 @@ class CNsummaryForm(forms.Form):
class SummaryStringForm(forms.Form):
intervalstring = forms.CharField(max_length=255,label='Workout Description')
class StrokeDataForm(forms.Form):
strokedata = forms.CharField(label='payload',
widget=forms.Textarea)
class DocumentsForm(forms.Form):
filetypechoices = (
('csv' , 'Painsled iOS CSV'),

View File

@@ -0,0 +1,25 @@
{% extends "base.html" %}
{% block title %}Change Rower {% endblock %}
{% block content %}
{% if form.errors %}
<p style="color: red;">
Please correct the error{{ form.errors|pluralize }} below.
</p>
{% endif %}
<div class="grid_12 alpha">
<h1>Stroke Data for workout {{ id }}</h1>
<form enctype="multipart/form-data" action="/rowers/api/workouts/{{ id }}/strokedata" method="post">
<table>
{{ form.as_table }}
</table>
{% csrf_token %}
<div class="grid_2 prefix_2 suffix_2">
<input class="button green" type="submit" value="POST">
</form>
</div>
</div>
{% endblock %}

View File

@@ -164,7 +164,7 @@ urlpatterns = [
url(r'^workout/compare/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>\w+.*)/(?P<plottype>\w+.*)$',views.workout_comparison_view2),
url(r'^workout/compare/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>\w+.*)/$',views.workout_comparison_view2),
url(r'^test\_callback',views.rower_process_testcallback),
url(r'^workout/(\d+)/test\_strokedata$',views.strokedataform),
]
if settings.DEBUG:

View File

@@ -15,7 +15,7 @@ from django.utils import timezone,translation
from django.core.mail import send_mail, BadHeaderError
from rowers.forms import EmailForm, RegistrationForm, RegistrationFormTermsOfService,RegistrationFormUniqueEmail,CNsummaryForm,UpdateWindForm,UpdateStreamForm
from rowers.forms import PredictedPieceForm,DateRangeForm,DeltaDaysForm
from rowers.forms import SummaryStringForm,IntervalUpdateForm
from rowers.forms import SummaryStringForm,IntervalUpdateForm,StrokeDataForm
from rowers.models import Workout, User, Rower, WorkoutForm
from rowers.models import RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm
import StringIO
@@ -51,7 +51,7 @@ from rowingdata import MysteryParser
from rowingdata import painsledDesktopParser,speedcoachParser,ErgStickParser
from rowingdata import SpeedCoach2Parser,FITParser,fitsummarydata
from rowingdata import make_cumvalues
from rowingdata import summarydata,get_file_type,totimestamp
from rowingdata import summarydata,get_file_type
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
@@ -4479,6 +4479,11 @@ class JSONResponse(HttpResponse):
kwargs['content_type'] = 'application/json'
super(JSONResponse, self).__init__(content, **kwargs)
def totimestamp(dt, epoch=datetime.datetime(1970,1,1,tzinfo=tz('UTC'))):
td = dt - epoch
# return td.total_seconds()
return (td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**6
def trydf(df,aantal,column):
try:
s = df[column]
@@ -4491,6 +4496,25 @@ def trydf(df,aantal,column):
return s
@login_required()
def strokedataform(request,id=0):
if request.method == 'GET':
form = StrokeDataForm()
return render(request, 'strokedata_form.html',
{
'form':form,
'id':id,
})
elif request.method == 'POST':
form = StrokeDataForm()
return render(request, 'strokedata_form.html',
{
'form':form,
'id':id,
})
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
@login_required()
@@ -4515,75 +4539,83 @@ def strokedatajson(request,id):
if request.method == 'POST':
checkdata,r = dataprep.getrowdata_db(id=row.id)
if not checkdata.empty:
return "Not OK"
strokedata = request.POST['strokedata']
return "Not OK 1"
# strokedata = request.POST['strokedata']
print request.body
received_json_data = json.loads(request.body)
# checking/validating and cleaning
try:
strokedata = json.loads(strokedata)
strokedata = json.loads(received_json_data['strokedata'])
except:
return HttpResponse("Not OK")
return HttpResponse("Not OK 2")
try:
df = pd.DataFrame(strokedata)
# time, hr, pace, spm, power, drivelength, distance, drivespeed, dragfactor, strokerecoverytime, averagedriveforce, peakdriveforce, lapidx
time = df['time']
aantal = len(time)
pace = df['pace']
if len(pace) != aantal:
return "Not OK"
distance = df['distance']
if len(distance) != aantal:
return "Not OK"
df = pd.DataFrame(strokedata)
df.index = df.index.astype(int)
df.sort_index(inplace=True)
# time, hr, pace, spm, power, drivelength, distance, drivespeed, dragfactor, strokerecoverytime, averagedriveforce, peakdriveforce, lapidx
time = df['timesecs']
aantal = len(time)
pace = df['pseconds']
if len(pace) != aantal:
return "Not OK"
distance = df['distance']
if len(distance) != aantal:
return "Not OK 3"
spm = df['spm']
if len(spm) != aantal:
return "Not OK 4"
spm = df['spm']
if len(spm) != aantal:
return "Not OK"
res = dataprep.testdata(time,distance,pace,spm)
if not res:
return HttpResponse("Not OK")
res = dataprep.testdata(time,distance,pace,spm)
if not res:
return HttpResponse("Not OK 5")
power = trydf(df,aantal,'power')
drivelength = trydf(df,aantal,'drivelength')
drivespeed = trydf(df,aantal,'drivespeed')
dragfactor = trydf(df,aantal,'dragfactor')
drivetime = trydf(df,aantal,'drivetime')
strokerecoverytime = trydf(df,aantal,'strokerecoverytime')
averagedriveforce = trydf(df,aantal,'averagedriveforce')
peakdriveforce = trydf(df,aantal,'peakdriveforce')
lapidx = trydf(df,aantal,'lapidx')
hr = trydf(df,aantal,'hr')
power = trydf(df,aantal,'power')
drivelength = trydf(df,aantal,'drivelength')
drivespeed = trydf(df,aantal,'drivespeed')
dragfactor = trydf(df,aantal,'dragfactor')
drivetime = trydf(df,aantal,'drivetime')
strokerecoverytime = trydf(df,aantal,'strokerecoverytime')
averagedriveforce = trydf(df,aantal,'averagedriveforce')
peakdriveforce = trydf(df,aantal,'peakdriveforce')
lapidx = trydf(df,aantal,'lapidx')
hr = trydf(df,aantal,'hr')
starttime = totimestamp(row.startdatetime)+time
unixtime = starttime+time
starttime = totimestamp(row.startdatetime)+time
unixtime = starttime+time
data = DataFrame({'TimeStamp (sec)':unixtime,
' Horizontal (meters)': distance,
' Cadence (stokes/min)':spm,
' HRCur (bpm)':hr,
' DragFactor':dragfactor,
' Stroke500mPace (sec/500m)':pace,
' Power (watts)':power,
' DriveLength (meters)':drivelength,
' StrokeDistance (meters)':strokedistance,
' DriveTime (ms)':drivetime,
' StrokeRecoveryTime (ms)':strokerecoverytime,
' AverageDriveForce (lbs)':averagedriveforce,
' PeakDriveForce (lbs)':peakdriveforce,
' lapIdx':lapidx,
' ElapsedTime (sec)':time,
})
data = pd.DataFrame({'TimeStamp (sec)':unixtime,
' Horizontal (meters)': distance,
' Cadence (stokes/min)':spm,
' HRCur (bpm)':hr,
' DragFactor':dragfactor,
' Stroke500mPace (sec/500m)':pace,
' Power (watts)':power,
' DriveLength (meters)':drivelength,
' DriveTime (ms)':drivetime,
' StrokeRecoveryTime (ms)':strokerecoverytime,
' AverageDriveForce (lbs)':averagedriveforce,
' PeakDriveForce (lbs)':peakdriveforce,
' lapIdx':lapidx,
' ElapsedTime (sec)':time,
})
timestr = time.strftime("%Y%m%d-%H%M%S")
csvfilename ='media/Import_'+timestr+'.csv'
timestr = row.startdatetime.strftime("%Y%m%d-%H%M%S")
csvfilename ='media/Import_'+timestr+'.csv'
res = data.to_csv(csvfilename,index_label='index')
row.csvfilename = csvfilename
row.save()
res = df.to_csv(csvfilename,index_label='index')
row.csvfilename = csvfilename
row.save()
datadf = dataprep.dataprep(data,id=row.id,bands=True,barchart=True,otwpower=True)
except:
return HttpResponse("Not OK")
r = Rower.objects.get(user=request.user)
rr = rrower(hrmax=r.max,hrut2=r.ut2,
hrut1=r.ut1,hrat=r.at,
hrtr=r.tr,hran=r.an,ftp=r.ftp)
rowdata = rdata(row.csvfilename,rower=rr).df
datadf = dataprep.dataprep(rowdata,id=row.id,bands=True,barchart=True,otwpower=True)
# mangling
#