diff --git a/rowers/tests/statements.py b/rowers/tests/statements.py index 51f1f25a..0b9aaf47 100644 --- a/rowers/tests/statements.py +++ b/rowers/tests/statements.py @@ -37,6 +37,8 @@ from minimocktest import MockTestCase import pandas as pd import rowers.c2stuff as c2stuff +from django.core.urlresolvers import reverse, reverse_lazy + import json import numpy as np diff --git a/rowers/tests/test_aworkouts.py b/rowers/tests/test_aworkouts.py new file mode 100644 index 00000000..cd936992 --- /dev/null +++ b/rowers/tests/test_aworkouts.py @@ -0,0 +1,52 @@ +from statements import * + +nu = datetime.datetime.now() + +class WaterWorkoutViewTest(TestCase): + def setUp(self): + self.u = UserFactory() + + self.r = Rower.objects.create(user=self.u, + birthdate=faker.profile()['birthdate'], + gdproptin=True, + gdproptindate=timezone.now(), + rowerplan='coach') + + self.c = Client() + self.user_workouts = WorkoutFactory.create_batch(5, user=self.r) + self.factory = RequestFactory() + self.password = faker.word() + self.u.set_password(self.password) + self.u.save() + + result = get_random_file(filename='rowers/tests/testdata/onwater.csv') + + self.wwater = WorkoutFactory(user=self.r, + csvfilename=result['filename'], + starttime=result['starttime'], + startdatetime=result['startdatetime'], + duration=result['duration'], + distance=result['totaldist'] + ) + + def tearDown(self): + pass + + @patch('rowers.dataprep.create_engine') + @patch('rowers.dataprep.getsmallrowdata_db') + def test_forcecurve(self, mocked_sqlalchemy, mocked_getsmallrowdata_db): + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + url = reverse('workout_forcecurve_view',kwargs={'id':self.wwater.id}) + + response = self.c.get(url) + self.assertEqual(response.status_code,200) + + form_data = { + 'workstrokesonly': True + } + + response = self.c.post(url,form_data) + self.assertEqual(response.status_code,200) + diff --git a/rowers/tests/testdata/onwater.csv b/rowers/tests/testdata/onwater.csv new file mode 100644 index 00000000..1a07204c --- /dev/null +++ b/rowers/tests/testdata/onwater.csv @@ -0,0 +1,98 @@ +,index, lapIdx,TimeStamp (sec), Horizontal (meters),GPS Split,GPS Speed, Cadence (stokes/min), HRCur (bpm),Stroke Count,cum_dist, Stroke500mPace (sec/500m), ElapsedTime (sec), Power (watts), DriveLength (meters), StrokeDistance (meters), DriveTime (ms), DragFactor, StrokeRecoveryTime (ms), AverageDriveForce (lbs), AverageBoatSpeed (m/s), PeakDriveForce (lbs), AverageDriveForce (N), PeakDriveForce (N), WorkoutState, Stroke Number,originalvelo,hr_ut2,hr_ut1,hr_at,hr_tr,hr_an,hr_max,lim_ut2,lim_ut1,lim_at,lim_tr,lim_an,lim_max,pw_ut2,pw_ut1,pw_at,pw_tr,pw_an,pw_max,limpw_ut2,limpw_ut1,limpw_at,limpw_tr,limpw_an +0,0,0.0,1469705701.0,3.2,0.0,0.74,35.5,112,1,3.2,695.931477516,0.0,0,0,0,0,0,0,0,0.74,0,0.0,0.0,4,0,0.74,0.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +1,1,0.0,1469705702.6,8.6,0.0,2.07,38.5,113,2,8.6,228.8,1.59999990463,0,0,0,0,0,0,0,2.07,0,0.0,0.0,4,1,2.07,113.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +2,2,0.0,1469705704.5,15.1,0.0,3.36,38.5,115,3,15.1,153.336955279,3.5,0,0,0,0,0,0,0,3.36,0,0.0,0.0,4,3,3.35999999999,115.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +3,3,0.0,1469705705.6,21.4,0.0,4.09,39.0,115,4,21.4,124.977058407,4.59999990463,0,0,0,0,0,0,0,4.09,0,0.0,0.0,4,3,4.09,115.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +4,4,0.0,1469705707.5,28.8,0.0,4.43,38.5,118,5,28.8,112.083019815,6.5,0,0,0,0,0,0,0,4.43,0,0.0,0.0,4,5,4.42999999999,118.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +5,5,0.0,1469705708.8,36.2,0.0,4.64,37.5,125,6,36.2,106.442632632,7.79999995232,0,0,0,0,0,0,0,4.64,0,0.0,0.0,4,5,4.63999999999,125.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +6,6,0.0,1469705710.5,43.1,0.0,4.66,36.0,130,7,43.1,104.628021775,9.5,0,0,0,0,0,0,0,4.66,0,0.0,0.0,4,6,4.66,130.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +7,7,0.0,1469705712.2,52.0,0.0,4.76,34.0,135,8,52.0,106.01911804,11.2000000477,0,0,0,0,0,0,0,4.76,0,0.0,0.0,4,7,4.75999999999,135.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +8,8,0.0,1469705714.0,60.1,0.0,4.71,34.5,142,9,60.1,107.565165936,13.0,0,0,0,0,0,0,0,4.71,0,0.0,0.0,4,8,4.70999999998,142.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +9,9,0.0,1469705715.8,68.1,0.0,4.53,33.5,148,10,68.1,108.679681206,14.7999999523,0,0,0,0,0,0,0,4.53,0,0.0,0.0,4,9,4.53000000001,0.0,0.0,148.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +10,10,0.0,1469705717.6,76.3,0.0,4.44,32.5,154,11,76.3,109.466700689,16.5999999046,0,0,0,0,0,0,0,4.44,0,0.0,0.0,4,10,4.43999999998,0.0,0.0,154.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +11,11,0.0,1469705719.5,83.8,0.0,4.44,33.0,156,12,83.8,109.893487851,18.5,0,0,0,0,0,0,0,4.44,0,0.0,0.0,4,11,4.43999999998,0.0,0.0,156.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +12,12,0.0,1469705721.2,92.5,0.0,4.62,33.5,159,13,92.5,110.627456239,20.2000000477,0,0,0,0,0,0,0,4.62,0,0.0,0.0,4,12,4.62,0.0,0.0,159.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +13,13,0.0,1469705723.0,100.8,0.0,4.64,33.5,163,14,100.8,110.362782274,22.0,0,0,0,0,0,0,0,4.64,0,0.0,0.0,4,13,4.63999999999,0.0,0.0,0.0,163.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +14,14,0.0,1469705724.8,109.1,0.0,4.59,32.0,166,15,109.1,109.351182981,23.7999999523,0,0,0,0,0,0,0,4.59,0,0.0,0.0,4,14,4.58999999998,0.0,0.0,0.0,166.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +15,15,0.0,1469705726.8,118.1,0.0,4.52,32.5,168,16,118.1,108.636197885,25.7999999523,0,0,0,0,0,0,0,4.52,0,0.0,0.0,4,15,4.51999999998,0.0,0.0,0.0,0.0,168.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +16,16,0.0,1469705728.5,125.1,0.0,4.5,33.0,169,17,125.1,108.494979894,27.5,0,0,0,0,0,0,0,4.5,0,0.0,0.0,4,16,4.5,0.0,0.0,0.0,0.0,169.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +17,17,0.0,1469705730.4,134.7,0.0,4.66,33.5,171,18,134.7,109.232014911,29.4000000954,0,0,0,0,0,0,0,4.66,0,0.0,0.0,4,17,4.66,0.0,0.0,0.0,0.0,171.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +18,18,0.0,1469705732.2,143.0,0.0,4.66,32.5,172,19,143.0,109.4493854,31.2000000477,0,0,0,0,0,0,0,4.66,0,0.0,0.0,4,18,4.66,0.0,0.0,0.0,0.0,172.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +19,19,0.0,1469705734.0,151.2,0.0,4.58,33.0,172,20,151.2,109.222559423,33.0,0,0,0,0,0,0,0,4.58,0,0.0,0.0,4,19,4.57999999999,0.0,0.0,0.0,0.0,172.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +20,20,0.0,1469705735.8,159.4,0.0,4.52,33.0,173,21,159.4,109.097567302,34.7999999523,0,0,0,0,0,0,0,4.52,0,0.0,0.0,4,20,4.51999999998,0.0,0.0,0.0,0.0,173.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +21,21,0.0,1469705737.5,166.1,0.0,4.47,33.5,175,22,166.1,109.622785185,36.5,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,21,4.47000000001,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +22,22,0.0,1469705739.4,175.7,0.0,4.58,33.5,175,23,175.7,110.908884086,38.4000000954,0,0,0,0,0,0,0,4.58,0,0.0,0.0,4,22,4.57999999999,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +23,23,0.0,1469705741.2,183.8,0.0,4.57,32.5,175,24,183.8,111.571150665,40.2000000477,0,0,0,0,0,0,0,4.57,0,0.0,0.0,4,23,4.57,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +24,24,0.0,1469705743.0,191.8,0.0,4.47,33.0,175,25,191.8,111.781044645,42.0,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,24,4.47000000001,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +25,25,0.0,1469705744.8,199.8,0.0,4.39,32.0,176,26,199.8,111.973606594,43.7999999523,0,0,0,0,0,0,0,4.39,0,0.0,0.0,4,25,4.39,0.0,0.0,0.0,0.0,176.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +26,26,0.0,1469705746.7,207.8,0.0,4.39,32.5,176,27,207.8,112.082434148,45.7000000477,0,0,0,0,0,0,0,4.39,0,0.0,0.0,4,26,4.39,0.0,0.0,0.0,0.0,176.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +27,27,0.0,1469705748.6,216.7,0.0,4.49,33.0,174,28,216.7,112.462053887,47.5999999046,0,0,0,0,0,0,0,4.49,0,0.0,0.0,4,27,4.49000000001,0.0,0.0,0.0,0.0,174.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +28,28,0.0,1469705750.4,224.8,0.0,4.49,32.0,174,29,224.8,110.702820986,49.4000000954,0,0,0,0,0,0,0,4.49,0,0.0,0.0,4,28,4.49000000001,0.0,0.0,0.0,0.0,174.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +29,29,0.0,1469705752.5,232.9,0.0,4.47,33.0,174,30,232.9,111.287510895,51.5,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,30,4.47000000001,0.0,0.0,0.0,0.0,174.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +30,30,0.0,1469705754.0,240.9,0.0,4.48,32.0,175,31,240.9,113.880099386,53.0,0,0,0,0,0,0,0,4.48,0,0.0,0.0,4,30,4.48000000001,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +31,31,0.0,1469705755.8,248.9,0.0,4.43,32.0,175,32,248.9,117.397229535,54.7999999523,0,0,0,0,0,0,0,4.43,0,0.0,0.0,4,31,4.42999999999,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +32,32,0.0,1469705756.2,250.4,0.0,4.43,32.0,175,32,250.4,120.181532945,55.2000000477,0,0,0,0,0,0,0,4.43,0,0.0,0.0,4,32,4.42999999999,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +33,33,1.0,1469705757.6,5.7,0.0,3.62,30.5,160,1,256.1,121.464367621,56.5999999046,0,0,0,0,0,0,0,3.62,0,0.0,0.0,4,32,3.62000000001,0.0,0.0,160.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +34,34,1.0,1469705759.4,13.4,0.0,3.85,33.5,161,2,263.8,121.497391629,58.4000000954,0,0,0,0,0,0,0,3.85,0,0.0,0.0,4,33,3.85,0.0,0.0,0.0,161.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +35,35,1.0,1469705761.2,20.7,0.0,4.2,33.5,162,3,271.1,120.37982782,60.2000000477,0,0,0,0,0,0,0,4.2,0,0.0,0.0,4,34,4.19999999999,0.0,0.0,0.0,162.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +36,36,1.0,1469705763.0,29.2,0.0,4.47,33.5,162,4,279.6,118.387283716,62.0,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,35,4.47000000001,0.0,0.0,0.0,162.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +37,37,1.0,1469705764.8,37.3,0.0,4.47,33.0,164,5,287.7,115.233986774,63.7999999523,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,36,4.47000000001,0.0,0.0,0.0,164.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +38,38,1.0,1469705766.6,45.3,0.0,4.44,33.5,165,6,295.7,111.287510895,65.5999999046,0,0,0,0,0,0,0,4.44,0,0.0,0.0,4,37,4.43999999998,0.0,0.0,0.0,165.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +39,39,1.0,1469705768.5,53.5,0.0,4.42,33.5,165,7,303.9,111.718168135,67.5,0,0,0,0,0,0,0,4.42,0,0.0,0.0,4,38,4.41999999999,0.0,0.0,0.0,165.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +40,40,1.0,1469705770.2,60.7,0.0,4.38,32.0,167,8,311.1,113.471050335,69.2000000477,0,0,0,0,0,0,0,4.38,0,0.0,0.0,4,39,4.37999999998,0.0,0.0,0.0,167.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +41,41,1.0,1469705772.2,70.1,0.0,4.44,32.0,171,9,320.5,115.140584238,71.2000000477,0,0,0,0,0,0,0,4.44,0,0.0,0.0,4,40,4.43999999998,0.0,0.0,0.0,0.0,171.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +42,42,1.0,1469705774.1,77.8,0.0,4.3,32.0,172,10,328.2,116.273396972,73.0999999046,0,0,0,0,0,0,0,4.3,0,0.0,0.0,4,41,4.30000000002,0.0,0.0,0.0,0.0,172.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +43,43,1.0,1469705776.1,85.2,0.0,4.12,31.0,174,11,335.6,117.556791714,75.0999999046,0,0,0,0,0,0,0,4.12,0,0.0,0.0,4,42,4.12,0.0,0.0,0.0,0.0,174.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +44,44,1.0,1469705777.9,93.4,0.0,4.2,31.5,174,12,343.8,119.395508057,76.9000000954,0,0,0,0,0,0,0,4.2,0,0.0,0.0,4,43,4.19999999999,0.0,0.0,0.0,0.0,174.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +45,45,1.0,1469705779.9,101.5,0.0,4.21,32.0,176,13,351.9,121.165219651,78.9000000954,0,0,0,0,0,0,0,4.21,0,0.0,0.0,4,44,4.20999999999,0.0,0.0,0.0,0.0,176.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +46,46,1.0,1469705781.6,108.9,0.0,4.11,30.5,176,14,359.3,122.757318225,80.5999999046,0,0,0,0,0,0,0,4.11,0,0.0,0.0,4,45,4.10999999998,0.0,0.0,0.0,0.0,176.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +47,47,1.0,1469705783.6,116.9,0.0,4.02,32.0,175,15,367.3,123.722400388,82.5999999046,0,0,0,0,0,0,0,4.02,0,0.0,0.0,4,46,4.01999999999,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +48,48,1.0,1469705785.5,124.1,0.0,3.96,30.5,177,16,374.5,123.80237793,84.5,0,0,0,0,0,0,0,3.96,0,0.0,0.0,4,47,3.95999999999,0.0,0.0,0.0,0.0,177.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +49,49,1.0,1469705787.5,132.1,0.0,4.04,32.0,177,17,382.5,123.700282002,86.5,0,0,0,0,0,0,0,4.04,0,0.0,0.0,4,48,4.03999999999,0.0,0.0,0.0,0.0,177.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +50,50,1.0,1469705789.2,139.7,0.0,4.06,32.0,178,18,390.1,122.672370408,88.2000000477,0,0,0,0,0,0,0,4.06,0,0.0,0.0,4,49,4.05999999999,0.0,0.0,0.0,0.0,178.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +51,51,1.0,1469705791.1,146.7,0.0,4.09,33.0,178,19,397.1,121.011418513,90.0999999046,0,0,0,0,0,0,0,4.09,0,0.0,0.0,4,50,4.09,0.0,0.0,0.0,0.0,178.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +52,52,1.0,1469705793.1,155.4,0.0,4.27,31.0,177,20,405.8,119.62256154,92.0999999046,0,0,0,0,0,0,0,4.27,0,0.0,0.0,4,51,4.27000000001,0.0,0.0,0.0,0.0,177.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +53,53,1.0,1469705794.9,163.1,0.0,4.27,32.0,177,21,413.5,118.342215896,93.9000000954,0,0,0,0,0,0,0,4.27,0,0.0,0.0,4,52,4.27000000001,0.0,0.0,0.0,0.0,177.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +54,54,1.0,1469705797.1,171.6,0.0,4.24,31.5,178,22,422.0,117.740696015,96.0999999046,0,0,0,0,0,0,0,4.24,0,0.0,0.0,4,53,4.24,0.0,0.0,0.0,0.0,178.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +55,55,1.0,1469705798.6,179.3,0.0,4.22,32.0,179,23,429.7,117.599973684,97.5999999046,0,0,0,0,0,0,0,4.22,0,0.0,0.0,4,54,4.22000000001,0.0,0.0,0.0,0.0,179.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +56,56,1.0,1469705800.7,187.9,0.0,4.21,30.5,179,24,438.3,117.565167825,99.7000000477,0,0,0,0,0,0,0,4.21,0,0.0,0.0,4,55,4.20999999999,0.0,0.0,0.0,0.0,179.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +57,57,1.0,1469705802.5,195.8,0.0,4.28,30.5,180,25,446.2,117.967332124,101.5,0,0,0,0,0,0,0,4.28,0,0.0,0.0,4,56,4.27999999998,0.0,0.0,0.0,0.0,180.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +58,58,1.0,1469705804.5,204.3,0.0,4.22,30.5,180,26,454.7,118.489957355,103.5,0,0,0,0,0,0,0,4.22,0,0.0,0.0,4,57,4.22000000001,0.0,0.0,0.0,0.0,180.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +59,59,1.0,1469705806.4,212.2,0.0,4.2,30.5,180,27,462.6,118.763530461,105.400000095,0,0,0,0,0,0,0,4.2,0,0.0,0.0,4,58,4.19999999999,0.0,0.0,0.0,0.0,180.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +60,60,1.0,1469705808.5,221.4,0.0,4.26,29.5,180,28,471.8,117.583212735,107.5,0,0,0,0,0,0,0,4.26,0,0.0,0.0,4,59,4.25999999999,0.0,0.0,0.0,0.0,180.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +61,61,1.0,1469705810.4,229.8,0.0,4.17,30.5,180,29,480.2,119.140852815,109.400000095,0,0,0,0,0,0,0,4.17,0,0.0,0.0,4,60,4.16999999999,0.0,0.0,0.0,0.0,180.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +62,62,1.0,1469705812.3,236.6,0.0,4.11,33.5,181,30,487.0,121.480877381,111.299999952,0,0,0,0,0,0,0,4.11,0,0.0,0.0,4,61,4.10999999998,0.0,0.0,0.0,0.0,0.0,181.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +63,63,1.0,1469705814.0,244.8,0.0,4.24,33.5,181,31,495.2,122.38470448,113.0,0,0,0,0,0,0,0,4.24,0,0.0,0.0,4,62,4.24,0.0,0.0,0.0,0.0,0.0,181.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +64,64,1.0,1469705815.4,250.9,0.0,4.24,33.5,181,31,501.3,122.183234979,114.400000095,0,0,0,0,0,0,0,4.24,0,0.0,0.0,4,63,4.24,0.0,0.0,0.0,0.0,0.0,181.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +65,65,2.0,1469705816.3,0.9,0.0,3.66,28.0,158,1,502.2,121.2563172,115.299999952,0,0,0,0,0,0,0,3.66,0,0.0,0.0,4,63,3.66,0.0,0.0,158.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +66,66,2.0,1469705817.8,9.8,0.0,4.12,33.5,160,2,511.1,119.786227655,116.799999952,0,0,0,0,0,0,0,4.12,0,0.0,0.0,4,64,4.12,0.0,0.0,160.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +67,67,2.0,1469705819.6,18.0,0.0,4.44,32.5,162,3,519.3,117.678039467,118.599999905,0,0,0,0,0,0,0,4.44,0,0.0,0.0,4,65,4.43999999998,0.0,0.0,0.0,162.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +68,68,2.0,1469705821.5,26.1,0.0,4.47,33.0,161,4,527.4,115.319480659,120.5,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,66,4.47000000001,0.0,0.0,0.0,161.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +69,69,2.0,1469705823.4,35.0,0.0,4.43,32.0,164,5,536.3,112.531083761,122.400000095,0,0,0,0,0,0,0,4.43,0,0.0,0.0,4,67,4.42999999999,0.0,0.0,0.0,164.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +70,70,2.0,1469705825.1,41.9,0.0,4.43,33.0,165,6,543.2,109.693981917,124.099999905,0,0,0,0,0,0,0,4.43,0,0.0,0.0,4,68,4.42999999999,0.0,0.0,0.0,165.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +71,71,2.0,1469705827.1,51.5,0.0,4.6,33.5,166,7,552.8,110.111805834,126.099999905,0,0,0,0,0,0,0,4.6,0,0.0,0.0,4,69,4.6,0.0,0.0,0.0,166.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +72,72,2.0,1469705828.9,59.7,0.0,4.59,33.5,168,8,561.0,110.235734879,127.900000095,0,0,0,0,0,0,0,4.59,0,0.0,0.0,4,70,4.58999999998,0.0,0.0,0.0,0.0,168.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +73,73,2.0,1469705830.7,68.1,0.0,4.53,32.0,171,9,569.4,109.674351541,129.700000048,0,0,0,0,0,0,0,4.53,0,0.0,0.0,4,71,4.53000000001,0.0,0.0,0.0,0.0,171.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +74,74,2.0,1469705832.4,76.4,0.0,4.55,33.0,172,10,577.7,109.081478016,131.400000095,0,0,0,0,0,0,0,4.55,0,0.0,0.0,4,72,4.55,0.0,0.0,0.0,0.0,172.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +75,75,2.0,1469705834.3,84.0,0.0,4.54,32.5,173,11,585.3,108.95736186,133.299999952,0,0,0,0,0,0,0,4.54,0,0.0,0.0,4,73,4.54000000001,0.0,0.0,0.0,0.0,173.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +76,76,2.0,1469705836.0,92.9,0.0,4.63,33.0,174,12,594.2,109.581343074,135.0,0,0,0,0,0,0,0,4.63,0,0.0,0.0,4,74,4.63000000001,0.0,0.0,0.0,0.0,174.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +77,77,2.0,1469705837.9,101.3,0.0,4.61,33.5,176,13,602.6,109.437100452,136.900000095,0,0,0,0,0,0,0,4.61,0,0.0,0.0,4,75,4.61000000001,0.0,0.0,0.0,0.0,176.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +78,78,2.0,1469705839.7,109.6,0.0,4.58,33.5,177,14,610.9,108.898173861,138.700000048,0,0,0,0,0,0,0,4.58,0,0.0,0.0,4,76,4.57999999999,0.0,0.0,0.0,0.0,177.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +79,79,2.0,1469705841.5,118.0,0.0,4.54,33.5,178,15,619.3,108.514739286,140.5,0,0,0,0,0,0,0,4.54,0,0.0,0.0,4,77,4.54000000001,0.0,0.0,0.0,0.0,178.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +80,80,2.0,1469705843.1,125.0,0.0,4.54,34.0,178,16,626.3,108.408891045,142.099999905,0,0,0,0,0,0,0,4.54,0,0.0,0.0,4,78,4.54000000001,0.0,0.0,0.0,0.0,178.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +81,81,2.0,1469705845.1,134.8,0.0,4.69,34.5,179,17,636.1,108.970092917,144.099999905,0,0,0,0,0,0,0,4.69,0,0.0,0.0,4,79,4.69000000002,0.0,0.0,0.0,0.0,179.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +82,82,2.0,1469705846.7,142.2,0.0,4.67,34.0,180,18,643.5,108.943527129,145.700000048,0,0,0,0,0,0,0,4.67,0,0.0,0.0,4,80,4.67000000001,0.0,0.0,0.0,0.0,180.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +83,83,2.0,1469705848.5,150.6,0.0,4.59,34.5,181,19,651.9,108.491687362,147.5,0,0,0,0,0,0,0,4.59,0,0.0,0.0,4,81,4.58999999998,0.0,0.0,0.0,0.0,0.0,181.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +84,84,2.0,1469705850.3,158.8,0.0,4.52,33.5,181,20,660.1,108.195629805,149.299999952,0,0,0,0,0,0,0,4.52,0,0.0,0.0,4,82,4.51999999998,0.0,0.0,0.0,0.0,0.0,181.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +85,85,2.0,1469705852.1,166.4,0.0,4.52,33.5,181,21,667.7,108.474130564,151.099999905,0,0,0,0,0,0,0,4.52,0,0.0,0.0,4,83,4.51999999998,0.0,0.0,0.0,0.0,0.0,181.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +86,86,2.0,1469705853.9,175.2,0.0,4.68,33.5,182,22,676.5,109.550561798,152.900000095,0,0,0,0,0,0,0,4.68,0,0.0,0.0,4,84,4.67999999998,0.0,0.0,0.0,0.0,0.0,182.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +87,87,2.0,1469705855.7,183.2,0.0,4.65,32.0,182,23,684.5,110.12141592,154.700000048,0,0,0,0,0,0,0,4.65,0,0.0,0.0,4,85,4.65000000002,0.0,0.0,0.0,0.0,0.0,182.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +88,88,2.0,1469705857.5,191.2,0.0,4.51,33.0,182,24,692.5,110.388908617,156.5,0,0,0,0,0,0,0,4.51,0,0.0,0.0,4,86,4.51,0.0,0.0,0.0,0.0,0.0,182.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +89,89,2.0,1469705859.4,200.1,0.0,4.42,32.0,183,25,701.4,111.075438088,158.400000095,0,0,0,0,0,0,0,4.42,0,0.0,0.0,4,87,4.41999999999,0.0,0.0,0.0,0.0,0.0,183.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +90,90,2.0,1469705861.2,207.4,0.0,4.38,32.0,183,26,708.7,112.186192469,160.200000048,0,0,0,0,0,0,0,4.38,0,0.0,0.0,4,88,4.37999999998,0.0,0.0,0.0,0.0,0.0,183.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +91,91,2.0,1469705863.0,216.1,0.0,4.47,32.0,183,27,717.4,113.541324808,162.0,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,89,4.47000000001,0.0,0.0,0.0,0.0,0.0,183.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +92,92,2.0,1469705865.0,224.7,0.0,4.44,32.5,183,28,726.0,113.933934253,164.0,0,0,0,0,0,0,0,4.44,0,0.0,0.0,4,90,4.43999999998,0.0,0.0,0.0,0.0,0.0,183.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +93,93,2.0,1469705867.1,232.4,0.0,4.34,33.0,184,29,733.7,114.217860585,166.099999905,0,0,0,0,0,0,0,4.34,0,0.0,0.0,4,91,4.34,0.0,0.0,0.0,0.0,0.0,184.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +94,94,2.0,1469705868.6,240.6,0.0,4.35,32.0,184,30,741.9,114.508095643,167.599999905,0,0,0,0,0,0,0,4.35,0,0.0,0.0,4,92,4.34999999999,0.0,0.0,0.0,0.0,0.0,184.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +95,95,2.0,1469705870.7,249.0,0.0,4.34,30.5,184,31,750.3,114.922206507,169.700000048,0,0,0,0,0,0,0,4.34,0,0.0,0.0,4,93,4.34,0.0,0.0,0.0,0.0,0.0,184.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 +96,96,2.0,1469705871.0,250.4,0.0,4.34,30.5,184,31,751.7,115.581707376,170.0,0,0,0,0,0,0,0,4.34,0,0.0,0.0,4,93,4.34,0.0,0.0,0.0,0.0,0.0,184.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2 diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz index 5112eb13..7dc55d87 100644 Binary files a/rowers/tests/testdata/testdata.csv.gz and b/rowers/tests/testdata/testdata.csv.gz differ diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py index 3fc8cc46..6cc5bf52 100644 --- a/rowers/views/analysisviews.py +++ b/rowers/views/analysisviews.py @@ -1,5 +1,176 @@ from statements import * +# Histogram for a date/time range +@user_passes_test(ispromember,login_url="/rowers/paidplans", + message="This functionality requires a Pro plan or higher", + redirect_field_name=None) +def histo(request,theuser=0, + startdate=timezone.now()-datetime.timedelta(days=365), + enddate=timezone.now(), + deltadays=-1, + enddatestring=timezone.now().strftime("%Y-%m-%d"), + startdatestring=(timezone.now()-datetime.timedelta(days=30)).strftime("%Y-%m-%d"), + options={ + 'includereststrokes':False, + 'workouttypes':[i[0] for i in mytypes.workouttypes], + 'waterboattype':mytypes.waterboattype, + 'rankingonly': False, + }): + + r = getrequestrower(request,userid=theuser) + theuser = r.user + + if 'waterboattype' in request.session: + waterboattype = request.session['waterboattype'] + else: + waterboattype = mytypes.waterboattype + + + if 'rankingonly' in request.session: + rankingonly = request.session['rankingonly'] + else: + rankingonly = False + + if 'modalities' in request.session: + modalities = request.session['modalities'] + if len(modalities) > 1: + modality = 'all' + else: + modality = modalities[0] + else: + modalities = [m[0] for m in mytypes.workouttypes] + modality = 'all' + + + try: + rankingonly = options['rankingonly'] + except KeyError: + rankingonly = False + + try: + includereststrokes = options['includereststrokes'] + except KeyError: + includereststrokes = False + + + workstrokesonly = not includereststrokes + + waterboattype = mytypes.waterboattype + + + if startdatestring != "": + startdate = iso8601.parse_date(startdatestring) + + if enddatestring != "": + enddate = iso8601.parse_date(enddatestring) + + if enddate < startdate: + s = enddate + enddate = startdate + startdate = s + + + # get all indoor rows of in date range + + # process form + if request.method == 'POST': + form = DateRangeForm(request.POST) + modalityform = TrendFlexModalForm(request.POST) + if form.is_valid(): + startdate = form.cleaned_data['startdate'] + enddate = form.cleaned_data['enddate'] + if startdate > enddate: + s = enddate + enddate = startdate + startdate = s + startdatestring = startdate.strftime('%Y-%m-%d') + enddatestring = enddate.strftime('%Y-%m-%d') + if modalityform.is_valid(): + modality = modalityform.cleaned_data['modality'] + waterboattype = modalityform.cleaned_data['waterboattype'] + rankingonly = modalityform.cleaned_data['rankingonly'] + if modality == 'all': + modalities = [m[0] for m in mytypes.workouttypes] + else: + modalities = [modality] + + if modality != 'water': + waterboattype = [b[0] for b in mytypes.boattypes] + + + request.session['modalities'] = modalities + request.session['waterboattype'] = waterboattype + request.session['rankingonly'] = rankingonly + form = DateRangeForm(initial={ + 'startdate': startdate, + 'enddate': enddate, + }) + else: + form = DateRangeForm(initial={ + 'startdate': startdate, + 'enddate': enddate, + }) + includereststrokes = False + + workstrokesonly = not includereststrokes + modalityform = TrendFlexModalForm( + initial={ + 'modality':modality, + 'waterboattype':waterboattype, + 'rankingonly':rankingonly, + } + ) + + negtypes = [] + for b in mytypes.boattypes: + if b[0] not in waterboattype: + negtypes.append(b[0]) + + + + script = '' + div = get_call() + js_resources = '' + css_resources = '' + + + + + options = { + 'modality': modality, + 'theuser': theuser.id, + 'waterboattype':waterboattype, + 'startdatestring':startdatestring, + 'enddatestring':enddatestring, + 'rankingonly':rankingonly, + 'includereststrokes':includereststrokes, + } + + request.session['options'] = options + + promember=0 + mayedit=0 + if not request.user.is_anonymous(): + result = request.user.is_authenticated() and ispromember(request.user) + if result: + promember = 1 + + + request.session['options'] = options + + return render(request, 'histo.html', + {'interactiveplot':script, + 'the_div':div, + 'id':theuser, + 'active':'nav-analysis', + 'theuser':theuser, + 'rower':r, + 'startdate':startdate, + 'enddate':enddate, + 'form':form, + 'optionsform':modalityform, + 'teams':get_my_teams(request.user), + }) # The Flex plot for a large selection of workouts @login_required() diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 28319cb6..6b3cddeb 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -255,6 +255,15 @@ def getfavorites(r,row): return favorites,maxfav +def get_workout_default_page(request,id): + if request.user.is_anonymous(): + return reverse('workout_view',kwargs={'id':str(id)}) + else: + r = Rower.objects.get(user=request.user) + if r.defaultlandingpage == 'workout_edit_view': + return reverse('workout_edit_view',kwargs={'id':str(id)}) + else: + return reverse('workout_workflow_view',kwargs={'id':str(id)}) def getrequestrower(request,rowerid=0,userid=0,notpermanent=False): diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index e97af583..8fcb3866 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -41,7 +41,7 @@ def workout_forcecurve_view(request,id=0,workstrokesonly=False): 'name': row.name }, { - 'url':reverse(workout_forcecurve_view,kwargs={'id':id}), + 'url':reverse('workout_forcecurve_view',kwargs={'id':id}), 'name': 'Empower Force Curve' } @@ -73,7 +73,7 @@ def workout_test_task_view(request,id=0): res = myqueue(queuehigh,addcomment2,request.user.id,row.id) - url = reverse(workout_edit_view, + url = reverse('workout_edit_view', kwargs = { 'id':int(id), }) @@ -111,7 +111,7 @@ def workout_histo_view(request,id=0): 'name': w.name }, { - 'url':reverse(workout_histo_view,kwargs={'id':id}), + 'url':reverse('workout_histo_view',kwargs={'id':id}), 'name': 'Histogram' } @@ -133,177 +133,6 @@ def workout_histo_view(request,id=0): -# Histogram for a date/time range -@user_passes_test(ispromember,login_url="/rowers/paidplans", - message="This functionality requires a Pro plan or higher", - redirect_field_name=None) -def histo(request,theuser=0, - startdate=timezone.now()-datetime.timedelta(days=365), - enddate=timezone.now(), - deltadays=-1, - enddatestring=timezone.now().strftime("%Y-%m-%d"), - startdatestring=(timezone.now()-datetime.timedelta(days=30)).strftime("%Y-%m-%d"), - options={ - 'includereststrokes':False, - 'workouttypes':[i[0] for i in mytypes.workouttypes], - 'waterboattype':mytypes.waterboattype, - 'rankingonly': False, - }): - - r = getrequestrower(request,userid=theuser) - theuser = r.user - - if 'waterboattype' in request.session: - waterboattype = request.session['waterboattype'] - else: - waterboattype = mytypes.waterboattype - - - if 'rankingonly' in request.session: - rankingonly = request.session['rankingonly'] - else: - rankingonly = False - - if 'modalities' in request.session: - modalities = request.session['modalities'] - if len(modalities) > 1: - modality = 'all' - else: - modality = modalities[0] - else: - modalities = [m[0] for m in mytypes.workouttypes] - modality = 'all' - - - try: - rankingonly = options['rankingonly'] - except KeyError: - rankingonly = False - - try: - includereststrokes = options['includereststrokes'] - except KeyError: - includereststrokes = False - - - workstrokesonly = not includereststrokes - - waterboattype = mytypes.waterboattype - - - if startdatestring != "": - startdate = iso8601.parse_date(startdatestring) - - if enddatestring != "": - enddate = iso8601.parse_date(enddatestring) - - if enddate < startdate: - s = enddate - enddate = startdate - startdate = s - - - # get all indoor rows of in date range - - # process form - if request.method == 'POST': - form = DateRangeForm(request.POST) - modalityform = TrendFlexModalForm(request.POST) - if form.is_valid(): - startdate = form.cleaned_data['startdate'] - enddate = form.cleaned_data['enddate'] - if startdate > enddate: - s = enddate - enddate = startdate - startdate = s - startdatestring = startdate.strftime('%Y-%m-%d') - enddatestring = enddate.strftime('%Y-%m-%d') - if modalityform.is_valid(): - modality = modalityform.cleaned_data['modality'] - waterboattype = modalityform.cleaned_data['waterboattype'] - rankingonly = modalityform.cleaned_data['rankingonly'] - if modality == 'all': - modalities = [m[0] for m in mytypes.workouttypes] - else: - modalities = [modality] - - if modality != 'water': - waterboattype = [b[0] for b in mytypes.boattypes] - - - request.session['modalities'] = modalities - request.session['waterboattype'] = waterboattype - request.session['rankingonly'] = rankingonly - form = DateRangeForm(initial={ - 'startdate': startdate, - 'enddate': enddate, - }) - else: - form = DateRangeForm(initial={ - 'startdate': startdate, - 'enddate': enddate, - }) - includereststrokes = False - - workstrokesonly = not includereststrokes - modalityform = TrendFlexModalForm( - initial={ - 'modality':modality, - 'waterboattype':waterboattype, - 'rankingonly':rankingonly, - } - ) - - negtypes = [] - for b in mytypes.boattypes: - if b[0] not in waterboattype: - negtypes.append(b[0]) - - - - script = '' - div = get_call() - js_resources = '' - css_resources = '' - - - - - options = { - 'modality': modality, - 'theuser': theuser.id, - 'waterboattype':waterboattype, - 'startdatestring':startdatestring, - 'enddatestring':enddatestring, - 'rankingonly':rankingonly, - 'includereststrokes':includereststrokes, - } - - request.session['options'] = options - - promember=0 - mayedit=0 - if not request.user.is_anonymous(): - result = request.user.is_authenticated() and ispromember(request.user) - if result: - promember = 1 - - - request.session['options'] = options - - return render(request, 'histo.html', - {'interactiveplot':script, - 'the_div':div, - 'id':theuser, - 'active':'nav-analysis', - 'theuser':theuser, - 'rower':r, - 'startdate':startdate, - 'enddate':enddate, - 'form':form, - 'optionsform':modalityform, - 'teams':get_my_teams(request.user), - }) # add a workout manually @login_required() @@ -316,7 +145,7 @@ def addmanual_view(request): 'name':'Workouts' }, { - 'url':reverse(addmanual_view), + 'url':reverse('addmanual_view'), 'name': 'Add Manual Entry' }, ] @@ -418,7 +247,7 @@ def addmanual_view(request): messages.info(request,'New workout created') url = reverse( - workout_edit_view, + 'workout_edit_view', kwargs={'id':id} ) return HttpResponseRedirect(url) @@ -457,7 +286,7 @@ def fitness_metric_view(request,mode='rower',days=42): # test if not something already done ms = PowerTimeFitnessMetric.objects.filter(user=request.user) if not ms: - url = reverse(workouts_view) + url = reverse('workouts_view') return HttpResponseRedirect(url) max_workout_id = max([m.last_workout for m in ms]) @@ -502,7 +331,7 @@ def workout_update_cp_view(request,id=0): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" messages.error(request,message) - url = reverse(workouts_view) + url = reverse('workouts_view') return HttpResponseRedirect(url) @@ -529,7 +358,7 @@ def workout_recalcsummary_view(request,id=0): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" messages.error(request,message) - url = reverse(workouts_view) + url = reverse('workouts_view') return HttpResponseRedirect(url) @@ -540,14 +369,14 @@ def workout_recalcsummary_view(request,id=0): row.save() successmessage = "Summary Updated" messages.info(request,successmessage) - url = reverse(workout_edit_view, + url = reverse('workout_edit_view', kwargs = { 'id':int(id), }) else: message = "Something went wrong. Could not update summary" messages.error(request,message) - url = reverse(workout_edit_view, + url = reverse('workout_edit_view', kwargs = { 'id':int(id), }) @@ -599,7 +428,7 @@ def workouts_join_view(request): return HttpResponse("form is not valid") else: - url = reverse(workouts_join_select) + url = reverse('workouts_join_select') return HttpResponseRedirect(url) @user_passes_test(ispromember,login_url="/rowers/paidplans", @@ -1082,11 +911,11 @@ def virtualevent_compare_view(request,id=0): breadcrumbs = [ { - 'url': reverse(virtualevents_view), + 'url': reverse('virtualevents_view'), 'name': 'Racing' }, { - 'url':reverse(virtualevent_view, + 'url':reverse('virtualevent_view', kwargs={ 'id':race.id, } @@ -1094,7 +923,7 @@ def virtualevent_compare_view(request,id=0): 'name': race.name }, { - 'url':reverse(virtualevent_compare_view, + 'url':reverse('virtualevent_compare_view', kwargs={ 'id':race.id, } @@ -1159,7 +988,7 @@ def plannedsession_compare_view(request,id=0,userid=0): request.session['plottype'] = plottype request.session['ps'] = ps.id - url = reverse(multi_compare_view,kwargs={'userid':userid,'id':ids[0]}) + url = reverse('multi_compare_view',kwargs={'userid':userid,'id':ids[0]}) return HttpResponseRedirect(url) @@ -1237,7 +1066,7 @@ def multi_compare_view(request,id=0,userid=0): ) else: - url = reverse(team_comparison_select, + url = reverse('team_comparison_select', kwargs={ 'id':id, 'teamid':0}) @@ -1262,11 +1091,11 @@ def multi_compare_view(request,id=0,userid=0): 'name':'Workouts' }, { - 'url':reverse(team_comparison_select,kwargs={'teamid':teamid}), + 'url':reverse('team_comparison_select',kwargs={'teamid':teamid}), 'name': 'Compare Select' }, { - 'url':reverse(multi_compare_view), + 'url':reverse('multi_compare_view'), 'name': 'Comparison Chart' } ] @@ -1275,12 +1104,12 @@ def multi_compare_view(request,id=0,userid=0): ps = PlannedSession.objects.get(id=int(request.session['ps'])) breadcrumbs = [ { - 'url': reverse(plannedsessions_view, + 'url': reverse('plannedsessions_view', kwargs={'userid':userid}), 'name': 'Sessions' }, { - 'url':reverse(plannedsession_view, + 'url':reverse('plannedsession_view', kwargs={ 'userid':userid, 'id':ps.id, @@ -1289,7 +1118,7 @@ def multi_compare_view(request,id=0,userid=0): 'name': ps.id }, { - 'url':reverse(plannedsession_compare_view, + 'url':reverse('plannedsession_compare_view', kwargs={ 'userid':userid, 'id':ps.id, @@ -1610,7 +1439,7 @@ def workout_fusion_list(request,id=0,message='',successmessage='', 'name': row.name }, { - 'url':reverse(workout_fusion_list,kwargs={'id':id}), + 'url':reverse('workout_fusion_list',kwargs={'id':id}), 'name': 'Sensor Fusion' } @@ -1703,7 +1532,7 @@ def workout_view(request,id=0): 'name':'Workouts' }, { - 'url':reverse(workout_view,kwargs={'id':id}), + 'url':reverse('workout_view',kwargs={'id':id}), 'name': row.name, } @@ -1745,7 +1574,7 @@ def workout_undo_smoothenpace_view( if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" messages.error(request,message) - url = reverse(workouts_view) + url = reverse('workouts_view') return HttpResponseRedirect(url) @@ -1785,7 +1614,7 @@ def workout_smoothenpace_view(request,id=0,message="",successmessage=""): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" messages.error(request,message) - url = reverse(workouts_view) + url = reverse('workouts_view') return HttpResponseRedirect(url) @@ -1841,7 +1670,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""): 'name': row.name }, { - 'url':reverse(workout_crewnerd_summary_view,kwargs={'id':id}), + 'url':reverse('workout_crewnerd_summary_view',kwargs={'id':id}), 'name': 'CrewNerd Summary' } @@ -1860,7 +1689,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""): os.remove(fname) successmessage = "CrewNerd summary added" messages.info(request,successmessage) - url = reverse(workout_edit_view, + url = reverse('workout_edit_view', kwargs = { 'id':int(id), }) @@ -1873,7 +1702,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""): pass message = "Something went wrong (workout_crewnerd_summary_view)" messages.error(request,message) - url = reverse(workout_edit_view, + url = reverse('workout_edit_view', kwargs = { 'id':int(id), }) @@ -1914,7 +1743,7 @@ def workout_downloadwind_view(request,id=0, if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" messages.error(request,message) - url = reverse(workouts_view) + url = reverse('workouts_view') return HttpResponseRedirect(url) @@ -1954,7 +1783,7 @@ def workout_downloadwind_view(request,id=0, kwargs = { 'id':int(id)} - url = reverse(workout_wind_view,kwargs=kwargs) + url = reverse('workout_wind_view',kwargs=kwargs) response = HttpResponseRedirect(url) except KeyError: message = "No latitude/longitude data" @@ -1962,7 +1791,7 @@ def workout_downloadwind_view(request,id=0, kwargs = { 'id':int(id) } - url = reverse(workout_wind_view,kwargs=kwargs) + url = reverse('workout_wind_view',kwargs=kwargs) response = HttpResponseRedirect(url) @@ -1980,7 +1809,7 @@ def workout_downloadmetar_view(request,id=0, if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" messages.error(request,message) - url = reverse(workouts_view) + url = reverse('workouts_view') return HttpResponseRedirect(url) @@ -2020,7 +1849,7 @@ def workout_downloadmetar_view(request,id=0, kwargs = { 'id':int(id)} - url = reverse(workout_wind_view,kwargs=kwargs) + url = reverse('workout_wind_view',kwargs=kwargs) response = HttpResponseRedirect(url) except KeyError: message = "No latitude/longitude data" @@ -2028,7 +1857,7 @@ def workout_downloadmetar_view(request,id=0, kwargs = { 'id':int(id) } - url = reverse(workout_wind_view,kwargs=kwargs) + url = reverse('workout_wind_view',kwargs=kwargs) response = HttpResponseRedirect(url) @@ -2051,7 +1880,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""): 'name': row.name }, { - 'url':reverse(workout_wind_view,kwargs={'id':id}), + 'url':reverse('workout_wind_view',kwargs={'id':id}), 'name': 'Wind' } @@ -2060,7 +1889,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" messages.error(request,message) - url = reverse(workouts_view) + url = reverse('workouts_view') return HttpResponseRedirect(url) @@ -2132,7 +1961,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""): kwargs = { 'id':int(id) } - url = reverse(workout_wind_view,kwargs=kwargs) + url = reverse('workout_wind_view',kwargs=kwargs) response = HttpResponseRedirect(url) else: @@ -2181,7 +2010,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" messages.error(request,message) - url = reverse(workouts_view) + url = reverse('workouts_view') return HttpResponseRedirect(url) @@ -2218,7 +2047,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""): messages.error(request,message) kwargs = { 'id':int(id)} - url = reverse(workout_wind_view,kwargs=kwargs) + url = reverse('workout_wind_view',kwargs=kwargs) response = HttpResponseRedirect(url) else: @@ -2239,7 +2068,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""): 'name': row.name }, { - 'url':reverse(workout_stream_view,kwargs={'id':id}), + 'url':reverse('workout_stream_view',kwargs={'id':id}), 'name': 'Stream' } @@ -2273,7 +2102,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): if (checkworkoutuser(request.user,w)==False): message = "You are not allowed to edit this workout" messages.error(request,message) - url = reverse(workouts_view) + url = reverse('workouts_view') return HttpResponseRedirect(url) @@ -2345,7 +2174,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): try: url = request.session['referer'] except KeyError: - url = reverse(workout_advanced_view,kwargs=kwargs) + url = reverse('workout_edit_view',kwargs=kwargs) response = HttpResponseRedirect(url) return response @@ -2355,7 +2184,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): messages.error(request,message) kwargs = { 'id':int(id)} - url = reverse(workout_otwsetpower_view,kwargs=kwargs) + url = reverse('workout_otwsetpower_view',kwargs=kwargs) response = HttpResponseRedirect(url) else: @@ -2371,7 +2200,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): 'name': w.name }, { - 'url':reverse(workout_otwsetpower_view,kwargs={'id':id}), + 'url':reverse('workout_otwsetpower_view',kwargs={'id':id}), 'name': 'OTW Power' } @@ -2411,7 +2240,7 @@ def instroke_view(request,id=0): 'name': w.name }, { - 'url':reverse(instroke_view,kwargs={'id':id}), + 'url':reverse('instroke_view',kwargs={'id':id}), 'name': 'In-Stroke Metrics' } @@ -2424,7 +2253,7 @@ def instroke_view(request,id=0): if (checkworkoutuser(request.user,w)==False): message = "You are not allowed to edit this workout" messages.error(request,message) - url = reverse(workouts_view) + url = reverse('workouts_view') return HttpResponseRedirect(url) @@ -2456,7 +2285,7 @@ def instroke_chart(request,id=0,metric=''): if (checkworkoutuser(request.user,w)==False): message = "You are not allowed to edit this workout" messages.error(request,message) - url = reverse(workouts_view) + url = reverse('workouts_view') return HttpResponseRedirect(url) @@ -2526,7 +2355,7 @@ def workout_data_view(request, id=0): 'name': w.name }, { - 'url':reverse(workout_data_view,kwargs={'id':id}), + 'url':reverse('workout_data_view',kwargs={'id':id}), 'name': 'Data Explorer' } @@ -2628,7 +2457,7 @@ def workout_stats_view(request,id=0,message="",successmessage=""): 'name': w.name }, { - 'url':reverse(workout_stats_view,kwargs={'id':id}), + 'url':reverse('workout_stats_view',kwargs={'id':id}), 'name': 'Stats' } @@ -2786,19 +2615,10 @@ def workflow_default_view(request): r.save() - url = reverse(workout_workflow_config2_view) + url = reverse('workout_workflow_config2_view') return HttpResponseRedirect(url) -def get_workout_default_page(request,id): - if request.user.is_anonymous(): - return reverse(workout_view,kwargs={'id':str(id)}) - else: - r = Rower.objects.get(user=request.user) - if r.defaultlandingpage == 'workout_edit_view': - return reverse(workout_edit_view,kwargs={'id':str(id)}) - else: - return reverse(workout_workflow_view,kwargs={'id':str(id)}) # Workflow configuration @login_required() @@ -2946,7 +2766,7 @@ def workout_workflow_view(request,id): 'name': row.name }, { - 'url':reverse(workout_workflow_view,kwargs={'id':id}), + 'url':reverse('workout_workflow_view',kwargs={'id':id}), 'name': 'View' } @@ -3232,7 +3052,7 @@ def workout_flexchart3_view(request,*args,**kwargs): 'name': row.name }, { - 'url':reverse(workout_flexchart3_view,kwargs=kwargs), + 'url':reverse('workout_flexchart3_view',kwargs=kwargs), 'name': 'Flex Chart' } @@ -3286,7 +3106,7 @@ def workout_otwpowerplot_view(request,id=0,message="",successmessage=""): 'name': w.name }, { - 'url':reverse(workout_otwpowerplot_view,kwargs={'id':id}), + 'url':reverse('workout_otwpowerplot_view',kwargs={'id':id}), 'name': 'Interactive OTW Power Plot' } @@ -3387,7 +3207,7 @@ def workout_comment_view(request,id=0): c = WorkoutComment(workout=w,user=request.user,comment=comment, notification=notification) c.save() - url = reverse(workout_comment_view, + url = reverse('workout_comment_view', kwargs={ 'id':id }) @@ -3428,8 +3248,9 @@ def workout_comment_view(request,id=0): emailbounced = ocr.emailbounced ) - url = reverse(workout_comment_view,kwargs = { - 'id':id}) + url = reverse('workout_comment_view', + kwargs = { + 'id':id}) return HttpResponseRedirect(url) form = WorkoutCommentForm() @@ -3456,7 +3277,7 @@ def workout_comment_view(request,id=0): 'name': w.name }, { - 'url':reverse(workout_comment_view,kwargs={'id':id}), + 'url':reverse('workout_comment_view',kwargs={'id':id}), 'name': 'Comments' } @@ -3600,7 +3421,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""): dataprep.runcpupdate(row.user,type=row.workouttype) messages.info(request,successmessage) - url = reverse(workout_edit_view, + url = reverse('workout_edit_view', kwargs = { 'id':str(row.id), }) @@ -3665,7 +3486,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""): 'name': row.name }, { - 'url':reverse(workout_edit_view,kwargs={'id':id}), + 'url':reverse('workout_edit_view',kwargs={'id':id}), 'name': 'Edit' } @@ -3713,7 +3534,7 @@ def workout_map_view(request,id=0): 'name': w.name }, { - 'url':reverse(workout_map_view,kwargs={'id':id}), + 'url':reverse('workout_map_view',kwargs={'id':id}), 'name': 'Map' } @@ -3789,7 +3610,7 @@ def workout_uploadimage_view(request,id): 'name': w.name }, { - 'url':reverse(workout_uploadimage_view,kwargs={'id':id}), + 'url':reverse('workout_uploadimage_view',kwargs={'id':id}), 'name': 'Upload Image' } @@ -3825,7 +3646,7 @@ def workout_uploadimage_view(request,id): message = "Not a valid image" messages.error(request,message) os.remove(path_and_filename) - url = reverse(workout_uploadimage_view, + url = reverse('workout_uploadimage_view', kwargs = {'id':id}) if is_ajax: @@ -3847,7 +3668,7 @@ def workout_uploadimage_view(request,id): return HttpResponseRedirect(url) else: messages.error(request,'Something went wrong - no file attached') - url = reverse(workout_uploadimage_view, + url = reverse('workout_uploadimage_view', kwargs = {'id':id}) if is_ajax: @@ -3929,7 +3750,7 @@ def workout_toggle_ranking(request,id=0): return response else: - url = reverse(workouts_view) + url = reverse('workouts_view') response = HttpResponseRedirect(url) return response @@ -3961,7 +3782,7 @@ def workout_upload_view(request, 'name':'Workouts' }, { - 'url': reverse(workout_upload_view), + 'url': reverse('workout_upload_view'), 'name': 'Upload' } ] @@ -4063,7 +3884,7 @@ def workout_upload_view(request, else: messages.error(request, "Something went wrong - no file attached") - url = reverse(workout_upload_view) + url = reverse('workout_upload_view') if is_ajax: return JSONResponse({'result':0,'url':0}) else: @@ -4151,7 +3972,7 @@ def workout_upload_view(request, messages.info( request, "The file was too large to process in real time. It will be processed in a background process. You will receive an email when it is ready") - url = reverse(workout_upload_view) + url = reverse('workout_upload_view') if is_ajax: return JSONResponse({'result':1,'url':url}) else: @@ -4160,7 +3981,7 @@ def workout_upload_view(request, if not id: messages.error(request,message) - url = reverse(workout_upload_view) + url = reverse('workout_upload_view') if is_ajax: return JSONResponse({'result':0,'url':url}) else: @@ -4169,7 +3990,7 @@ def workout_upload_view(request, elif id == -1: message = 'The zip archive will be processed in the background. The files in the archive will only be uploaded without the extra actions. You will receive email when the workouts are ready.' messages.info(request,message) - url = reverse(workout_upload_view) + url = reverse('workout_upload_view') if is_ajax: return JSONResponse({'result':1,'url':url}) else: @@ -4179,7 +4000,7 @@ def workout_upload_view(request, if message: messages.error(request,message) - url = reverse(workout_edit_view, + url = reverse('workout_edit_view', kwargs = { 'id':int(id), }) @@ -4387,7 +4208,7 @@ def team_workout_upload_view(request,message="", 'name':'Workouts' }, { - 'url': reverse(team_workout_upload_view), + 'url': reverse('team_workout_upload_view'), 'name': 'Team Upload' } ] @@ -4477,20 +4298,20 @@ def team_workout_upload_view(request,message="", ) - url = reverse(team_workout_upload_view) + url = reverse('team_workout_upload_view') response = HttpResponseRedirect(url) return response if not id: messages.error(request,message) - url = reverse(team_workout_upload_view) + url = reverse('team_workout_upload_view') response = HttpResponseRedirect(url) return response elif id == -1: message = 'The zip archive will be processed in the background. The files in the archive will only be uploaded without the extra actions. You will receive email when the workouts are ready.' messages.info(request,message) - url = reverse(team_workout_upload_view) + url = reverse('team_workout_upload_view') response = HttpResponseRedirect(url) return response @@ -4498,7 +4319,7 @@ def team_workout_upload_view(request,message="", successmessage = "The workout was added to the user's account" messages.info(request,successmessage) - url = reverse(team_workout_upload_view) + url = reverse('team_workout_upload_view') response = HttpResponseRedirect(url) w = Workout.objects.get(id=id) @@ -4546,7 +4367,7 @@ def team_workout_upload_view(request,message="", # A page with all the recent graphs (searchable on workout name) @login_required() def graphs_view(request): - request.session['referer'] = reverse(graphs_view) + request.session['referer'] = reverse('graphs_view') try: r = getrower(request.user) workouts = Workout.objects.filter(user=r).order_by("-date", "-starttime") @@ -4611,7 +4432,7 @@ def graph_show_view(request,id): 'name': w.name }, { - 'url':reverse(graph_show_view,kwargs={'id':id}), + 'url':reverse('graph_show_view',kwargs={'id':id}), 'name': 'Chart' } @@ -4679,7 +4500,7 @@ def workout_summary_restore_view(request,id,message="",successmessage=""): messages.info(request,'Original Interval Data Restored') - url = reverse(workout_summary_edit_view, + url = reverse('workout_summary_edit_view', kwargs={ 'id':int(id), } @@ -4703,7 +4524,8 @@ def workout_split_view(request,id=id): 'name': row.name }, { - 'url':reverse(graph_show_view,kwargs={'id':id}), + 'url':reverse('graph_show_view', + kwargs={'id':id}), 'name': 'Chart' } @@ -4729,7 +4551,7 @@ def workout_split_view(request,id=id): if request.user == r: - url = reverse(workouts_view) + url = reverse('workouts_view') else: mgrids = [team.id for team in Team.objects.filter(manager=request.user)] rwrids = [team.id for team in r.team.all()] @@ -4737,13 +4559,13 @@ def workout_split_view(request,id=id): if len(teamids) > 0: teamid = teamids[0] - url = reverse(workouts_view, + url = reverse('workouts_view', kwargs={ 'teamid':int(teamid), } ) else: - url = reverse(workouts_view) + url = reverse('workouts_view') rowname = row.name if isinstance(rowname,unicode): @@ -4817,7 +4639,7 @@ def workout_fusion_view(request,id1=0,id2=1): successmessage = 'Data fused' messages.info(request,message) - url = reverse(workout_edit_view, + url = reverse('workout_edit_view', kwargs={ 'id':idnew, }) @@ -4836,11 +4658,12 @@ def workout_fusion_view(request,id1=0,id2=1): 'name': str(w1.id) }, { - 'url':reverse(workout_fusion_list,kwargs={'id':id1}), + 'url':reverse('workout_fusion_list',kwargs={'id':id1}), 'name': 'Sensor Fusion' }, { - 'url':reverse(workout_fusion_view,kwargs={'id1':id1,'id2':id2}), + 'url':reverse('workout_fusion_view', + kwargs={'id1':id1,'id2':id2}), 'name': str(w2.id) } @@ -4874,7 +4697,7 @@ def workout_summary_edit_view(request,id,message="",successmessage="" 'name': row.name }, { - 'url':reverse(workout_summary_edit_view,kwargs={'id':id}), + 'url':reverse('workout_summary_edit_view',kwargs={'id':id}), 'name': 'Edit Intervals' } @@ -5296,7 +5119,7 @@ class GraphDelete(DeleteView): 'name': str(self.object.workout.id) }, { - 'url':reverse(graph_show_view,kwargs={'id':self.object.pk}), + 'url':reverse('graph_show_view',kwargs={'id':self.object.pk}), 'name': 'Chart' }, { 'url':reverse('graph_delete',kwargs={'pk':str(self.object.pk)}), @@ -5314,7 +5137,7 @@ class GraphDelete(DeleteView): def get_success_url(self): w = self.object.workout - return reverse(workout_edit_view,kwargs={'id':str(w.id)}) + return reverse('workout_edit_view',kwargs={'id':str(w.id)}) def get_object(self, *args, **kwargs): obj = super(GraphDelete, self).get_object(*args, **kwargs) @@ -5368,7 +5191,7 @@ class WorkoutDelete(DeleteView): def get_success_url(self): - return reverse(workouts_view) + return reverse('workouts_view') def get_object(self, *args, **kwargs): obj = super(WorkoutDelete, self).get_object(*args, **kwargs)