From da7f679c308d0e4d497e68c16e2812a32a90945b Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 28 Nov 2016 17:58:32 +0100 Subject: [PATCH 1/3] boatcoach --- rowers/mailprocessing.py | 6 +++++- rowers/models.py | 1 - rowers/tests.py | 27 +++++++++++++++++++++++++++ rowers/views.py | 9 +++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/rowers/mailprocessing.py b/rowers/mailprocessing.py index b004cd39..90678217 100644 --- a/rowers/mailprocessing.py +++ b/rowers/mailprocessing.py @@ -11,7 +11,7 @@ from rowingdata import rower as rrower from rowingdata import main as rmain from rowingdata import rowingdata as rrdata from rowingdata import TCXParser,RowProParser,ErgDataParser,TCXParserNoHR -from rowingdata import MysteryParser +from rowingdata import MysteryParser,BoatCoachParser from rowingdata import painsledDesktopParser,speedcoachParser,ErgStickParser from rowingdata import SpeedCoach2Parser,FITParser,fitsummarydata from rowingdata import make_cumvalues @@ -131,6 +131,10 @@ def make_new_workout_from_email(rr,f2,name,cntr=0): if (fileformat == 'ergdata'): row = ErgDataParser('media/'+f2) + # handle BoatCoach + if (fileformat == 'boatcoach'): + row = BoatCoachParser('media/'+f2) + # handle painsled desktop if (fileformat == 'painsleddesktop'): row = painsledDesktopParser('media/'+f2) diff --git a/rowers/models.py b/rowers/models.py index c3b7bfc0..62d9897b 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -77,7 +77,6 @@ class Rower(models.Model): team = models.ForeignKey(Team,blank=True,null=True) - def __str__(self): return self.user.username diff --git a/rowers/tests.py b/rowers/tests.py index a556c64c..d162a5ee 100644 --- a/rowers/tests.py +++ b/rowers/tests.py @@ -851,6 +851,33 @@ class ViewTest(TestCase): f_to_be_deleted = w.csvfilename os.remove(f_to_be_deleted) + def test_upload_view_sled_boatcoach(self): + self.c.login(username='john',password='koeinsloot') + + filename = 'C:\\python\\rowingdata\\testdata\\boatcoach.csv' + f = open(filename,'rb') + file_data = {'file': f} + form_data = { + 'title':'test', + 'workouttype':'rower', + 'notes':'aap noot mies', + 'make_plot':False, + 'upload_to_c2':False, + 'plottype':'timeplot', + 'file': f, + } + + form = DocumentsForm(form_data,file_data) + + response = self.c.post('/rowers/workout/upload/', form_data, follow=True) + self.assertRedirects(response, expected_url='/rowers/workout/1/edit', + status_code=302,target_status_code=200) + self.assertEqual(response.status_code, 200) + + w = Workout.objects.get(id=1) + f_to_be_deleted = w.csvfilename + os.remove(f_to_be_deleted) + def test_upload_view_sled_ergstick(self): self.c.login(username='john',password='koeinsloot') diff --git a/rowers/views.py b/rowers/views.py index dd72faee..06ec779b 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -47,6 +47,7 @@ from rowingdata import rower as rrower from rowingdata import main as rmain from rowingdata import rowingdata as rrdata from rowingdata import TCXParser,RowProParser,ErgDataParser,TCXParserNoHR +from rowingdata import BoatCoachParser from rowingdata import MysteryParser from rowingdata import painsledDesktopParser,speedcoachParser,ErgStickParser from rowingdata import SpeedCoach2Parser,FITParser,fitsummarydata @@ -3563,6 +3564,10 @@ def workout_upload_view(request,message=""): if (fileformat == 'ergdata'): row = ErgDataParser(f2) + # handle BoatCoach + if (fileformat == 'boatcoach'): + row = BoatCoachParser(f2) + # handle painsled desktop if (fileformat == 'painsleddesktop'): row = painsledDesktopParser(f2) @@ -3851,6 +3856,10 @@ def workout_upload_view_debug(request,message=""): if (fileformat == 'ergdata'): row = ErgDataParser(f2) + # handle BoatCoach + if (fileformat == 'boatcoach'): + row = BoatCoachParser(f2) + # handle painsled desktop if (fileformat == 'painsleddesktop'): From 0798d05fcadeac058c8624d2ed225ec87e7f7bca Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 28 Nov 2016 21:37:36 +0100 Subject: [PATCH 2/3] protect api data --- rowers/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rowers/urls.py b/rowers/urls.py index 46c0f9b3..1fccd429 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -18,7 +18,7 @@ from rowers.permissions import IsOwnerOrNot,IsOwnerOrReadOnly from rowers.serializers import WorkoutSerializer,RowerSerializer class WorkoutViewSet(viewsets.ModelViewSet): - queryset = Workout.objects.all().order_by("-date", "-starttime") + queryset = Workout.objects.none().order_by("-date", "-starttime") serializer_class = WorkoutSerializer permission_classes = (IsOwnerOrNot,) From 8d9816a238e701b3195bd4d1e9dd25b02c8391df Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 29 Nov 2016 22:20:17 +0100 Subject: [PATCH 3/3] empower --- rowers/dataprep.py | 25 ++++++++++++++++++++++++- rowers/models.py | 7 ++++++- rowers/tests.py | 31 +++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index a262244d..31720733 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -244,7 +244,8 @@ def smalldataprep(therows,xparam,yparam1,yparam2): return df -def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True): +def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, + empower=True): rowdatadf.set_index([range(len(rowdatadf))],inplace=True) t = rowdatadf.ix[:,'TimeStamp (sec)'] t = pd.Series(t-rowdatadf.ix[0,'TimeStamp (sec)']) @@ -338,6 +339,28 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True): data['x_right'] = x_right + if empower: + try: + wash = rowdatadf.ix[:,'wash'] + catch = rowdatadf.ix[:,'catch'] + finish = rowdatadf.ix[:,'finish'] + peakforce = rowdatadf.ix[:'peakforce'] + averageforce = rowdatadf.ix[:'averageforce'] + peakforceangle = rowdatadf.ix[:,'peakforceangle'] + driveenergy = rowdatadf.ix[:,'driveenergy'] + drivelength = driveenergy/(averageforce*4.44822) + slip = rowdatadf.ix[:,'slip'] + data['wash'] = wash + data['catch'] = catch + data['slip'] = slip + data['finish'] = finish + data['peakforceangle'] = peakforceangle + data['driveenergy'] = driveenergy + data['peakforce'] = peakforce + data['averageforce'] = averageforce + except KeyError: + pass + if otwpower: try: nowindpace = rowdatadf.ix[:,'nowindpace'] diff --git a/rowers/models.py b/rowers/models.py index 62d9897b..be9e55c0 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -191,7 +191,12 @@ class StrokeData(models.Model): equivergpower = models.FloatField(null=True) fergpace = models.CharField(max_length=30) fnowindpace = models.CharField(max_length=30) - + catch = models.FloatField(default=0,null=True) + slip = models.FloatField(default=0,null=True) + finish = models.FloatField(default=0,null=True) + wash = models.FloatField(default=0,null=True) + peakforceangle = models.FloatField(default=0,null=True) + class GraphImage(models.Model): filename = models.CharField(default='',max_length=150,blank=True,null=True) creationdatetime = models.DateTimeField() diff --git a/rowers/tests.py b/rowers/tests.py index d162a5ee..0e0c4acd 100644 --- a/rowers/tests.py +++ b/rowers/tests.py @@ -659,6 +659,37 @@ class ViewTest(TestCase): f_to_be_deleted = w.csvfilename os.remove(f_to_be_deleted) + def test_upload_view_SpeedCoach2v127(self): + self.c.login(username='john',password='koeinsloot') + + filename = 'C:\\python\\rowingdata\\testdata\\SpeedCoach2Linkv1.27.csv' + f = open(filename,'rb') + file_data = {'file': f} + + form_data = { + 'title':'test', + 'workouttype':'water', + 'notes':'aap noot mies', + 'make_plot':False, + 'upload_to_c2':False, + 'plottype':'timeplot', + 'file': f, + } + + form = DocumentsForm(form_data,file_data) + + response = self.c.post('/rowers/workout/upload/', form_data, follow=True) + f.close() + self.assertRedirects(response, expected_url='/rowers/workout/1/edit', + status_code=302,target_status_code=200) + + self.assertEqual(response.status_code, 200) + + w = Workout.objects.get(id=1) + f_to_be_deleted = w.csvfilename + os.remove(f_to_be_deleted) + + def test_upload_view_TCX_NoHR(self): self.c.login(username='john',password='koeinsloot')