diff --git a/rowers/forms.py b/rowers/forms.py
index 04034c38..d27030bd 100644
--- a/rowers/forms.py
+++ b/rowers/forms.py
@@ -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'),
diff --git a/rowers/templates/strokedata_form.html b/rowers/templates/strokedata_form.html
new file mode 100644
index 00000000..34cabb57
--- /dev/null
+++ b/rowers/templates/strokedata_form.html
@@ -0,0 +1,25 @@
+{% extends "base.html" %}
+
+{% block title %}Change Rower {% endblock %}
+
+{% block content %}
+ {% if form.errors %}
+
+ Please correct the error{{ form.errors|pluralize }} below.
+
+ {% endif %}
+
+
Stroke Data for workout {{ id }}
+
+
+
+{% endblock %}
diff --git a/rowers/urls.py b/rowers/urls.py
index 0b740ab7..46c0f9b3 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -164,7 +164,7 @@ urlpatterns = [
url(r'^workout/compare/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P\w+.*)/(?P\w+.*)$',views.workout_comparison_view2),
url(r'^workout/compare/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P\w+.*)/$',views.workout_comparison_view2),
url(r'^test\_callback',views.rower_process_testcallback),
-
+ url(r'^workout/(\d+)/test\_strokedata$',views.strokedataform),
]
if settings.DEBUG:
diff --git a/rowers/views.py b/rowers/views.py
index 2450589d..5ad543ee 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -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
#