diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 271455e8..b17fdc7d 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -2230,7 +2230,7 @@ def interactive_chart(id=0,promember=0,intervaldata = {}): intervaldf['itime'] = intervaldf['itime']*1.e3 intervaldf['time'] = intervaldf['itime'].cumsum() intervaldf['time'] = intervaldf['time'].shift(1) - intervaldf.ix[0,'time'] = 0 + intervaldf.loc[:,'time'].iloc[0] = 0 intervaldf['time_r'] = intervaldf['time'] +intervaldf['itime'] intervaldf['value'] = 100 mask = intervaldf['itype'] == 3 diff --git a/rowers/templates/teamresponseemail.html b/rowers/templates/teamresponseemail.html index 4144b282..dd6b5cda 100644 --- a/rowers/templates/teamresponseemail.html +++ b/rowers/templates/teamresponseemail.html @@ -14,7 +14,7 @@ You can read the comment here:

- + {{ siteurl }}{{ commentlink }}

diff --git a/rowers/tests/test_aworkouts.py b/rowers/tests/test_aworkouts.py index 5e705614..534aa8a4 100644 --- a/rowers/tests/test_aworkouts.py +++ b/rowers/tests/test_aworkouts.py @@ -125,7 +125,7 @@ class WorkoutViewTest(TestCase): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) - url = reverse('workout_forcecurve_view',kwargs={'id':self.wwater.id}) + url = reverse('workout_forcecurve_view',kwargs={'id':encoder.encode_hex(self.wwater.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -186,7 +186,7 @@ class WorkoutViewTest(TestCase): expected_url = reverse(self.r.defaultlandingpage, kwargs = { - 'id':12 + 'id':encoder.encode_hex(12) }) self.assertRedirects(response, @@ -209,7 +209,7 @@ class WorkoutViewTest(TestCase): response = self.c.get('/') url = reverse('multi_compare_view',kwargs={ 'userid':self.u.id, - 'id':self.werg1.id, + 'id':encoder.encode_hex(self.werg1.id), }) print url @@ -241,13 +241,13 @@ class WorkoutViewTest(TestCase): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) - url = reverse('workout_view',kwargs={'id':self.wwater.id}) + url = reverse('workout_view',kwargs={'id':encoder.encode_hex(self.wwater.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) url = reverse('workout_downloadmetar_view',kwargs={ - 'id': self.wwater.id, + 'id': encoder.encode_hex(self.wwater.id), 'airportcode': 'LKHO' } ) @@ -256,7 +256,7 @@ class WorkoutViewTest(TestCase): self.assertEqual(response.status_code,200) url = reverse('workout_downloadwind_view',kwargs={ - 'id': self.wwater.id, + 'id': encoder.encode_hex(self.wwater.id), } ) @@ -270,14 +270,14 @@ class WorkoutViewTest(TestCase): self.assertTrue(login) - url = reverse('workout_smoothenpace_view',kwargs={'id':self.wwater.id}) + url = reverse('workout_smoothenpace_view',kwargs={'id':encoder.encode_hex(self.wwater.id)}) response = self.c.get(url,follow=True) self.assertEqual(response.status_code,200) expected_url = reverse(self.r.defaultlandingpage, kwargs = { - 'id':self.wwater.id + 'id':encoder.encode_hex(self.wwater.id) } ) @@ -285,14 +285,14 @@ class WorkoutViewTest(TestCase): expected_url=expected_url, status_code=302,target_status_code=200) - url = reverse('workout_undo_smoothenpace_view',kwargs={'id':self.wwater.id}) + url = reverse('workout_undo_smoothenpace_view',kwargs={'id':encoder.encode_hex(self.wwater.id)}) response = self.c.get(url,follow=True) self.assertEqual(response.status_code,200) expected_url = reverse(self.r.defaultlandingpage, kwargs = { - 'id':self.wwater.id + 'id':encoder.encode_hex(self.wwater.id) } ) @@ -308,7 +308,7 @@ class WorkoutViewTest(TestCase): self.assertTrue(login) - url = reverse('workout_wind_view',kwargs={'id':self.wwater.id}) + url = reverse('workout_wind_view',kwargs={'id':encoder.encode_hex(self.wwater.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -336,7 +336,7 @@ class WorkoutViewTest(TestCase): self.assertTrue(login) - url = reverse('workout_stream_view',kwargs={'id':self.wwater.id}) + url = reverse('workout_stream_view',kwargs={'id':encoder.encode_hex(self.wwater.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -363,7 +363,7 @@ class WorkoutViewTest(TestCase): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) - url = reverse('instroke_view',kwargs={'id':self.winstroke.id}) + url = reverse('instroke_view',kwargs={'id':encoder.encode_hex(self.winstroke.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -380,7 +380,7 @@ class WorkoutViewTest(TestCase): self.assertTrue(login) - url = reverse('workout_otwsetpower_view',kwargs={'id':self.wwater.id}) + url = reverse('workout_otwsetpower_view',kwargs={'id':encoder.encode_hex(self.wwater.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -397,7 +397,7 @@ class WorkoutViewTest(TestCase): response = self.c.post(url,form_data,follow=True) self.assertEqual(response.status_code,200) - expected_url = reverse('workout_edit_view',kwargs={'id':self.wwater.id}) + expected_url = reverse('workout_edit_view',kwargs={'id':encoder.encode_hex(self.wwater.id)}) self.assertRedirects(response, expected_url=expected_url, @@ -410,7 +410,7 @@ class WorkoutViewTest(TestCase): self.assertTrue(login) - url = reverse('workout_comment_view',kwargs={'id':self.wwater.id}) + url = reverse('workout_comment_view',kwargs={'id':encoder.encode_hex(self.wwater.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -425,7 +425,7 @@ class WorkoutViewTest(TestCase): response = self.c.post(url,form_data,follow=True) self.assertEqual(response.status_code,200) - url = reverse('workout_unsubscribe_view',kwargs={'id':self.wwater.id}) + url = reverse('workout_unsubscribe_view',kwargs={'id':encoder.encode_hex(self.wwater.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -436,7 +436,7 @@ class WorkoutViewTest(TestCase): self.assertTrue(login) - url = reverse('workout_map_view',kwargs={'id':self.wwater.id}) + url = reverse('workout_map_view',kwargs={'id':encoder.encode_hex(self.wwater.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -448,7 +448,8 @@ class WorkoutViewTest(TestCase): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) - url = reverse('workout_uploadimage_view',kwargs={'id':self.werg1.id}) + url = reverse('workout_uploadimage_view', + kwargs={'id':encoder.encode_hex(self.werg1.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -466,7 +467,8 @@ class WorkoutViewTest(TestCase): response = self.c.post(url,form_data,format='multipart',follow=True) - expected_url = reverse(self.r.defaultlandingpage,kwargs={'id':self.werg1.id}) + expected_url = reverse(self.r.defaultlandingpage, + kwargs={'id':encoder.encode_hex(self.werg1.id)}) self.assertRedirects(response, expected_url=expected_url, @@ -480,7 +482,7 @@ class WorkoutViewTest(TestCase): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) - url = reverse('workout_split_view',kwargs={'id':self.werg1.id}) + url = reverse('workout_split_view',kwargs={'id':encoder.encode_hex(self.werg1.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -505,8 +507,9 @@ class WorkoutViewTest(TestCase): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) - url = reverse('workout_fusion_view',kwargs={'id1':self.werg2.id, - 'id2':self.werg2copy.id}) + url = reverse('workout_fusion_view', + kwargs={'id1':encoder.encode_hex(self.werg2.id), + 'id2':encoder.encode_hex(self.werg2copy.id)}) response = self.c.get(url) @@ -534,7 +537,7 @@ class WorkoutViewTest(TestCase): self.assertTrue(login) - url = reverse('workout_summary_edit_view',kwargs={'id':self.wwater.id}) + url = reverse('workout_summary_edit_view',kwargs={'id':encoder.encode_hex(self.wwater.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) diff --git a/rowers/tests/test_flexchart.py b/rowers/tests/test_flexchart.py index 26a7f931..0e764182 100644 --- a/rowers/tests/test_flexchart.py +++ b/rowers/tests/test_flexchart.py @@ -103,7 +103,8 @@ class WorkoutViewTest(TestCase): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) - url = reverse('workout_flexchart3_view',kwargs={'id':self.wwater.id}) + url = reverse('workout_flexchart3_view', + kwargs={'id':encoder.encode_hex(self.wwater.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -126,7 +127,7 @@ class WorkoutViewTest(TestCase): self.assertEqual(response.status_code,200) url = reverse('workout_flexchart3_view',kwargs={ - 'id':self.wwater.id, + 'id':encoder.encode_hex(self.wwater.id), 'xparam':'distance', 'yparam1':'hr', 'yparam2':'power' @@ -150,7 +151,8 @@ class WorkoutViewTest(TestCase): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) - url = reverse('workout_flexchart3_view',kwargs={'id':self.werg1.id}) + url = reverse('workout_flexchart3_view', + kwargs={'id':encoder.encode_hex(self.werg1.id)}) response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -168,7 +170,7 @@ class WorkoutViewTest(TestCase): self.assertEqual(response.status_code,200) url = reverse('workout_flexchart3_view',kwargs={ - 'id':self.werg1.id, + 'id':encoder.encode_hex(self.werg1.id), 'xparam':'distance', 'yparam1':'hr', 'yparam2':'power' diff --git a/rowers/tests/test_imports.py b/rowers/tests/test_imports.py index 227577fb..28974cdb 100644 --- a/rowers/tests/test_imports.py +++ b/rowers/tests/test_imports.py @@ -431,8 +431,11 @@ class STObjects(DjangoTestCase): response = self.c.get('/rowers/workout/sporttracksimport/13/',follow=True) + expected_url = reverse('workout_edit_view', + kwargs = {'id':encoder.encode_hex(2)}) + self.assertRedirects(response, - expected_url='/rowers/workout/2/edit/', + expected_url=expected_url, status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) diff --git a/rowers/tests/test_plans.py b/rowers/tests/test_plans.py index ff464120..51395c25 100644 --- a/rowers/tests/test_plans.py +++ b/rowers/tests/test_plans.py @@ -1575,7 +1575,7 @@ class PlannedSessionsView(TestCase): url = '/rowers/sessions/{psid}/detach/{id}/'.format( psid=self.ps_time.id, - id = self.w1.id, + id = encoder.encode_hex(self.w1.id), ) response = self.c.get(url,follow=True) diff --git a/rowers/tests/test_simplefunctions.py b/rowers/tests/test_simplefunctions.py index d9250fec..be86cc16 100644 --- a/rowers/tests/test_simplefunctions.py +++ b/rowers/tests/test_simplefunctions.py @@ -74,7 +74,7 @@ class SimpleViewTest(TestCase): def test_getworkout(self): with assert_raises(Http404): - w = get_workout(123) + w = get_workout(encoder.encode_hex(123)) def test_deactivate(self): login = self.c.login(username=self.u.username, password=self.password) diff --git a/rowers/tests/test_urls.py b/rowers/tests/test_urls.py index 1f2bbcf9..e01e4d69 100644 --- a/rowers/tests/test_urls.py +++ b/rowers/tests/test_urls.py @@ -219,7 +219,7 @@ class URLTests(TestCase): '/rowers/workout/'+encoded1+'/stats/', '/rowers/workout/'+encoded1+'/stream/', # '/rowers/workout/'+encoded1+'/task/', - '/rowers/workout/'+encoded1+'/teststrokedata/', +# '/rowers/workout/'+encoded1+'/teststrokedata/', '/rowers/workout/'+encoded1+'/toggle-ranking/', '/rowers/workout/'+encoded1+'/undosmoothenpace/', '/rowers/workout/'+encoded1+'/unsubscribe/', @@ -270,6 +270,10 @@ class URLTests(TestCase): expected) html = BeautifulSoup(response.content,'html.parser') + + if 'restore' in url: + print html.find_all('a') + urls = [a['href'] for a in html.find_all('a')] for u in urls: diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz index c6094136..b836d629 100644 Binary files a/rowers/tests/testdata/testdata.csv.gz and b/rowers/tests/testdata/testdata.csv.gz differ diff --git a/rowers/urls.py b/rowers/urls.py index a719c1f2..f80d1ce7 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -165,9 +165,9 @@ urlpatterns = [ url(r'^virtualevent/(?P\d+)/adddiscipline/$',views.virtualevent_addboat_view,name='virtualevent_addboat_view'), url(r'^virtualevent/(?P\d+)/withdraw/(?P\d+)/$',views.virtualevent_withdraw_view,name='virtualevent_withdraw_view'), url(r'^virtualevent/(?P\d+)/withdraw/$',views.virtualevent_withdraw_view,name='virtualevent_withdraw_view'), - url(r'^virtualevent/(?P\d+)/submit/$', + url(r'^virtualevent/(?P\b[0-9A-Fa-f]+\b)/submit/$', views.virtualevent_submit_result_view,name='virtualevent_submit_result_view'), - url(r'^virtualevent/(?P\d+)/submit/(?P\d+)/$', + url(r'^virtualevent/(?P\d+)/submit/(?P\b[0-9A-Fa-f]+\b)/$', views.virtualevent_submit_result_view,name='virtualevent_submit_result_view'), url(r'^virtualevent/(?P\d+)/disqualify/(?P\d+)/', views.virtualevent_disqualify_view,name='virtualevent_disqualify_view'), @@ -251,21 +251,32 @@ urlpatterns = [ url(r'^cumstats/$',views.cumstats,name='cumstats'), url(r'^graph/(?P\d+)/$',views.graph_show_view,name='graph_show_view'), url(r'^graph/(?P\d+)/delete/$',views.GraphDelete.as_view(),name='graph_delete'), - url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/get-thumbnails/$',views.get_thumbnails,name='get_thumbnails'), - url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/toggle-ranking/$',views.workout_toggle_ranking,name='workout_toggle_ranking'), - url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/get-testscript/$',views.get_testscript,name='get_testscript'), + url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/get-thumbnails/$',views.get_thumbnails, + name='get_thumbnails'), + url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/toggle-ranking/$',views.workout_toggle_ranking, + name='workout_toggle_ranking'), + url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/get-testscript/$',views.get_testscript, + name='get_testscript'), url(r'^workout/upload/team/$',views.team_workout_upload_view,name='team_workout_upload_view'), url(r'^workout/upload/$',views.workout_upload_view,name='workout_upload_view'), - url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/histo/$',views.workout_histo_view,name='workout_histo_view'), + url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/histo/$',views.workout_histo_view, + name='workout_histo_view'), # url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/task/$',views.workout_test_task_view,name='workout_test_task_view'), - url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/forcecurve/$',views.workout_forcecurve_view,name='workout_forcecurve_view'), - url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/unsubscribe/$',views.workout_unsubscribe_view,name='workout_unsubscribe_view'), + url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/forcecurve/$',views.workout_forcecurve_view, + name='workout_forcecurve_view'), + url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/unsubscribe/$',views.workout_unsubscribe_view, + name='workout_unsubscribe_view'), # url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/export/$',views.workout_export_view), - url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/comment/$',views.workout_comment_view,name='workout_comment_view'), - url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/emailtcx/$',views.workout_tcxemail_view,name='workout_tcxemail_view'), - url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/emailgpx/$',views.workout_gpxemail_view,name='workout_gpxemail_view'), - url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/emailcsv/$',views.workout_csvemail_view,name='workout_csvemail_view'), - url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/csvtoadmin/$',views.workout_csvtoadmin_view,name='workout_csvtoadmin_view'), + url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/comment/$',views.workout_comment_view, + name='workout_comment_view'), + url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/emailtcx/$',views.workout_tcxemail_view, + name='workout_tcxemail_view'), + url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/emailgpx/$',views.workout_gpxemail_view, + name='workout_gpxemail_view'), + url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/emailcsv/$',views.workout_csvemail_view, + name='workout_csvemail_view'), + url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/csvtoadmin/$',views.workout_csvtoadmin_view, + name='workout_csvtoadmin_view'), url(r'^ergcpdatatoadmin/(?P\d+)/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)/$',views.otecp_toadmin_view,name='otecp_toadmin_view'), url(r'^otwcpdatatoadmin/(?P\d+)/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)/$',views.otwcp_toadmin_view,name='otwcp_toadmin_view'), url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/edit/$',views.workout_edit_view, @@ -314,7 +325,7 @@ urlpatterns = [ # keeping the old URLs for retrofit url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/addtimeplot/$', views.workout_add_chart_view, - {'plotnr':'1'}), + {'plotnr':'1'},name='workout_add_chart_view'), url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/adddistanceplot/$', views.workout_add_chart_view, {'plotnr':'2'},name='workout_add_chart_view'), @@ -576,8 +587,8 @@ urlpatterns = [ url(r'^sessions/(?P\d+)/edit/user/(?P\d+)/$',views.plannedsession_edit_view), url(r'^sessions/(?P\d+)/clone/user/(?P\d+)/$',views.plannedsession_clone_view), url(r'^sessions/(?P\d+)/clone/$',views.plannedsession_clone_view), - url(r'^sessions/(?P\d+)/detach/(?P\d+)/user/(?P\d+)/$',views.plannedsession_detach_view), - url(r'^sessions/(?P\d+)/detach/(?P\d+)/$',views.plannedsession_detach_view), + url(r'^sessions/(?P\d+)/detach/(?P\b[0-9A-Fa-f]+\b)/user/(?P\d+)/$',views.plannedsession_detach_view), + url(r'^sessions/(?P\d+)/detach/(?P\b[0-9A-Fa-f]+\b)/$',views.plannedsession_detach_view), url(r'^sessions/(?P\d+)/$',views.plannedsession_view, name='plannedsession_view'), url(r'^sessions/(?P\d+)/user/(?P\d+)/$',views.plannedsession_view, diff --git a/rowers/views/importviews.py b/rowers/views/importviews.py index b0891fe4..dfe4b936 100644 --- a/rowers/views/importviews.py +++ b/rowers/views/importviews.py @@ -51,7 +51,7 @@ def workout_tp_upload_view(request,id=0): url = reverse(r.defaultlandingpage, kwargs = { - 'id':str(w.id), + 'id':encoder.encode_hex(w.id), }) return HttpResponseRedirect(url) @@ -106,7 +106,7 @@ def workout_strava_upload_view(request,id=0): pass url = reverse(r.defaultlandingpage, kwargs = { - 'id':str(w.id), + 'id':encoder.encode_hex(w.id), }) response = HttpResponseRedirect(url) return response @@ -137,14 +137,14 @@ def workout_strava_upload_view(request,id=0): w.save() url = reverse(r.defaultlandingpage, kwargs = { - 'id':str(w.id), + 'id':encoder.encode_hex(w.id), }) response = HttpResponseRedirect(url) url = reverse(r.defaultlandingpage, kwargs = { - 'id':str(w.id), + 'id':encoder.encode_hex(w.id), } ) response = HttpResponseRedirect(url) @@ -156,7 +156,7 @@ def workout_strava_upload_view(request,id=0): os.remove(tcxfile) url = reverse(r.defaultlandingpage, kwargs = { - 'id':str(w.id), + 'id':encoder.encode_hex(w.id), }) response = HttpResponseRedirect(url) @@ -183,7 +183,7 @@ def workout_c2_upload_view(request,id=0): url = reverse(r.defaultlandingpage, kwargs = { - 'id':int(id) + 'id':encoder.encode_hex(w.id) }) @@ -212,7 +212,7 @@ def workout_runkeeper_upload_view(request,id=0): messages.error(request,message) url = reverse(r.defaultlandingpage, kwargs = { - 'id':str(w.id), + 'id':id, }) return HttpResponseRedirect(url) @@ -235,7 +235,8 @@ def workout_runkeeper_upload_view(request,id=0): runkeeperid = runkeeperstuff.getidfromresponse(response) w.uploadedtorunkeeper = runkeeperid w.save() - url = reverse('workout_edit_view', kwargs={'id':w.id}) + url = reverse('workout_edit_view', + kwargs={'id':encoder.encode_hex(w.id)}) return HttpResponseRedirect(url) else: @@ -249,7 +250,7 @@ def workout_runkeeper_upload_view(request,id=0): url = reverse(r.defaultlandingpage, kwargs = { - 'id':str(w.id), + 'id':encoder.encode_hex(w.id), }) return HttpResponseRedirect(url) @@ -275,7 +276,7 @@ def workout_underarmour_upload_view(request,id=0): messages.error(request,message) url = reverse(r.defaultlandingpage, kwargs = { - 'id':str(w.id), + 'id':encoder.encode_hex(w.id), }) return HttpResponseRedirect(url) @@ -300,7 +301,7 @@ def workout_underarmour_upload_view(request,id=0): underarmourid = underarmourstuff.getidfromresponse(response) w.uploadedtounderarmour = underarmourid w.save() - url = reverse('workout_edit_view',kwargs={'id':w.id}) + url = reverse('workout_edit_view',kwargs={'id':encoder.encode_hex(w.id)}) return HttpResponseRedirect(url) else: @@ -313,7 +314,7 @@ def workout_underarmour_upload_view(request,id=0): url = reverse(r.defaultlandingpage, kwargs = { - 'id':str(w.id), + 'id':encoder.encode_hex(w.id), }) return HttpResponseRedirect(url) @@ -340,7 +341,7 @@ def workout_sporttracks_upload_view(request,id=0): messages.error(request,message) url = reverse(r.defaultlandingpage, kwargs = { - 'id':str(w.id), + 'id':encoder.encode_hex(w.id), }) return HttpResponseRedirect(url) @@ -367,7 +368,7 @@ def workout_sporttracks_upload_view(request,id=0): message = "Upload to SportTracks was successful" messages.info(request,message) - url = reverse('workout_edit_view',kwargs={'id':w.id}) + url = reverse('workout_edit_view',kwargs={'id':encoder.encode_hex(w.id)}) return HttpResponseRedirect(url) else: s = response @@ -379,7 +380,7 @@ def workout_sporttracks_upload_view(request,id=0): url = reverse(r.defaultlandingpage, kwargs = { - 'id':str(w.id), + 'id':encoder.encode_hex(w.id), }) return HttpResponseRedirect(url) @@ -965,7 +966,7 @@ def workout_stravaimport_view(request,message="",userid=0): 'name':'Workouts' }, { - 'url':reverse(workout_stravaimport_view), + 'url':reverse('workout_stravaimport_view'), 'name':'Strava' }, ] @@ -1021,7 +1022,7 @@ def workout_runkeeperimport_view(request,message="",userid=0): 'name':'Workouts' }, { - 'url':reverse(workout_runkeeperimport_view), + 'url':reverse('workout_runkeeperimport_view'), 'name':'Runkeeper' } ] @@ -1073,7 +1074,7 @@ def workout_underarmourimport_view(request,message="",userid=0): 'name':'Workouts' }, { - 'url':reverse(workout_c2import_view), + 'url':reverse('workout_c2import_view'), 'name':'Concept2' }, ] @@ -1126,7 +1127,7 @@ def workout_polarimport_view(request,userid=0): 'name':'Workouts' }, { - 'url':reverse(workout_polarimport_view), + 'url':reverse('workout_polarimport_view'), 'name':'Polar' }, ] @@ -1198,7 +1199,7 @@ def workout_sporttracksimport_view(request,message="",userid=0): 'name':'Workouts' }, { - 'url':reverse(workout_sporttracksimport_view), + 'url':reverse('workout_sporttracksimport_view'), 'name':'SportTracks' }, ] @@ -1343,11 +1344,11 @@ def workout_c2import_view(request,page=1,userid=0,message=""): 'name':'Workouts' }, { - 'url':reverse(workout_c2import_view), + 'url':reverse('workout_c2import_view'), 'name':'Concept2' }, { - 'url':reverse(workout_c2import_view,kwargs={'page':page}), + 'url':reverse('workout_c2import_view',kwargs={'page':page}), 'name':'Page '+str(page) } ] @@ -1445,7 +1446,7 @@ def workout_getimportview(request,externalid,source = 'c2'): messages.info(request,message) url = reverse(r.defaultlandingpage, kwargs = { - 'id':int(id), + 'id':encoder.encode_hex(w.id), }) return HttpResponseRedirect(url) @@ -1458,7 +1459,7 @@ def workout_getimportview(request,externalid,source = 'c2'): source=source, workoutsource=source) - w = get_workout(id) + w = get_workout(encoder.encode_hex(id)) if 'workout' in data: if 'splits' in data['workout']: @@ -1516,7 +1517,7 @@ def workout_getimportview(request,externalid,source = 'c2'): url = reverse(r.defaultlandingpage, kwargs = { - 'id':int(id) + 'id':encoder.encode_hex(w.id) }) return HttpResponseRedirect(url) diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py index e7addf43..438f9033 100644 --- a/rowers/views/racesviews.py +++ b/rowers/views/racesviews.py @@ -2251,7 +2251,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0): else: if workoutid: - workoutdata['initial'] = workoutid + workoutdata['initial'] = encoder.decode_hex(workoutid) w_form = WorkoutRaceSelectForm(workoutdata,entries) diff --git a/rowers/views/statements.py b/rowers/views/statements.py index ee597981..9c17a7f4 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -30,6 +30,7 @@ import cgi from icalendar import Calendar, Event import rowers.braintreestuff as braintreestuff import rowers.payments as payments +from rowers.opaque import encoder from django.shortcuts import render from django.template.loader import render_to_string @@ -258,13 +259,13 @@ def getfavorites(r,row): def get_workout_default_page(request,id): if request.user.is_anonymous(): - return reverse('workout_view',kwargs={'id':str(id)}) + return reverse('workout_view',kwargs={'id':id}) else: r = Rower.objects.get(user=request.user) if r.defaultlandingpage == 'workout_edit_view': - return reverse('workout_edit_view',kwargs={'id':str(id)}) + return reverse('workout_edit_view',kwargs={'id':id}) else: - return reverse('workout_workflow_view',kwargs={'id':str(id)}) + return reverse('workout_workflow_view',kwargs={'id':id}) def getrequestrower(request,rowerid=0,userid=0,notpermanent=False): @@ -318,6 +319,7 @@ def getrower(user): def get_workout(id): try: + id = encoder.decode_hex(id) w = Workout.objects.get(id=id) except Workout.DoesNotExist: raise Http404("Workout doesn't exist") diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 8f5aa617..f97de731 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -60,7 +60,7 @@ def workout_forcecurve_view(request,id=0,workstrokesonly=False): 'the_div':div, 'js_res': js_resources, 'css_res':css_resources, - 'id':int(id), + 'id':id, 'mayedit':mayedit, 'workstrokesonly': not workstrokesonly, 'teams':get_my_teams(request.user), @@ -126,7 +126,7 @@ def workout_histo_view(request,id=0): 'workout':w, 'rower':r, 'the_div':div, - 'id':int(id), + 'id':id, 'mayedit':mayedit, 'teams':get_my_teams(request.user), }) @@ -248,7 +248,7 @@ def addmanual_view(request): url = reverse( 'workout_edit_view', - kwargs={'id':id} + kwargs={'id':encoder.encode_hex(id)} ) return HttpResponseRedirect(url) else: @@ -371,14 +371,14 @@ def workout_recalcsummary_view(request,id=0): messages.info(request,successmessage) url = reverse('workout_edit_view', kwargs = { - 'id':int(id), + 'id':id, }) else: message = "Something went wrong. Could not update summary" messages.error(request,message) url = reverse('workout_edit_view', kwargs = { - 'id':int(id), + 'id':id, }) return HttpResponseRedirect(url) @@ -419,7 +419,7 @@ def workouts_join_view(request): url = reverse(r.defaultlandingpage, kwargs = { - 'id':int(id), + 'id':encoder.encode_hex(id), }) return HttpResponseRedirect(url) @@ -740,7 +740,7 @@ def team_comparison_select(request, if not checkworkoutuser(request.user,firstworkout): raise PermissionDenied("You are not allowed to sue this workout") - firstworkoutquery = Workout.objects.filter(id=id) + firstworkoutquery = Workout.objects.filter(id=encoder.decode_hex(id)) workouts = firstworkoutquery | workouts else: firstworkout = None @@ -856,7 +856,7 @@ def virtualevent_compare_view(request,id=0): workouts = [] for id in workoutids: try: - workouts.append(Workout.objects.get(id=id)) + workouts.append(Workout.objects.get(id=encode.decode_hex(id))) except Workout.DoesNotExist: pass @@ -888,7 +888,7 @@ def virtualevent_compare_view(request,id=0): workouts = [] for id in workoutids: try: - workouts.append(Workout.objects.get(id=id)) + workouts.append(Workout.objects.get(id=encoded.decode_hex(id))) except Workout.DoesNotExist: pass @@ -989,7 +989,8 @@ def plannedsession_compare_view(request,id=0,userid=0): request.session['ps'] = ps.id if ids: - url = reverse('multi_compare_view',kwargs={'userid':userid,'id':ids[0]}) + url = reverse('multi_compare_view', + kwargs={'userid':userid,'id':encoder.encode_hex(ids[0])}) else: url = reverse('plannedsession_view',kwargs={'id':ps.id}) @@ -1400,10 +1401,13 @@ def workout_fusion_list(request,id=0,message='',successmessage='', s = enddate enddate = startdate startdate = s + + if id: + theid = encoder.decode_hex(id) workouts = Workout.objects.filter(user=r, startdatetime__gte=startdate, - startdatetime__lte=enddate).order_by("-date", "-starttime").exclude(id=id) + startdatetime__lte=enddate).order_by("-date", "-starttime").exclude(id=theid) query = request.GET.get('q') if query: @@ -1438,7 +1442,7 @@ def workout_fusion_list(request,id=0,message='',successmessage='', 'name':'Workouts' }, { - 'url':get_workout_default_page(request,row.id), + 'url':get_workout_default_page(request,encoder.encode_hex(row.id)), 'name': row.name }, { @@ -1449,7 +1453,7 @@ def workout_fusion_list(request,id=0,message='',successmessage='', ] return render(request, 'fusion_list.html', - {'id':int(id), + {'id':id, 'workout':row, 'rower':r, 'searchform':searchform, @@ -1474,7 +1478,7 @@ def workout_view(request,id=0): rower = None try: - row = Workout.objects.get(id=id) + row = Workout.objects.get(id=encoder.decode_hex(id)) except Workout.DoesNotExist: raise Http404("Workout doesn't exist") @@ -1499,7 +1503,7 @@ def workout_view(request,id=0): # create interactive plot - res = interactive_chart(id) + res = interactive_chart(encoder.decode_hex(id)) script = res[0] div = res[1] @@ -1591,7 +1595,7 @@ def workout_undo_smoothenpace_view( row.df[' Stroke500mPace (sec/500m)'] = 500./velo row.write_csv(filename,gzip=True) - dataprep.update_strokedata(id,row.df) + dataprep.update_strokedata(encoder.decode_hex(id),row.df) url = reverse(r.defaultlandingpage, kwargs = { @@ -1641,7 +1645,7 @@ def workout_smoothenpace_view(request,id=0,message="",successmessage=""): row.df = row.df.fillna(0) row.write_csv(filename,gzip=True) - dataprep.update_strokedata(id,row.df) + dataprep.update_strokedata(encoder.decode_hex(id),row.df) messages.info(request,'A smoothening filter was applied to your pace data') @@ -1694,7 +1698,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""): messages.info(request,successmessage) url = reverse('workout_edit_view', kwargs = { - 'id':int(id), + 'id':id, }) return HttpResponseRedirect(url) @@ -1707,7 +1711,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""): messages.error(request,message) url = reverse('workout_edit_view', kwargs = { - 'id':int(id), + 'id':id, }) return HttpResponseRedirect(url) else: @@ -1785,7 +1789,7 @@ def workout_downloadwind_view(request,id=0, messages.info(request,message) kwargs = { - 'id':int(id)} + 'id':id} url = reverse('workout_wind_view',kwargs=kwargs) response = HttpResponseRedirect(url) @@ -1793,7 +1797,7 @@ def workout_downloadwind_view(request,id=0, message = "No latitude/longitude data" messages.error(request,message) kwargs = { - 'id':int(id) + 'id':id } url = reverse('workout_wind_view',kwargs=kwargs) response = HttpResponseRedirect(url) @@ -1851,7 +1855,7 @@ def workout_downloadmetar_view(request,id=0, messages.info(request,message) kwargs = { - 'id':int(id)} + 'id':id} url = reverse('workout_wind_view',kwargs=kwargs) response = HttpResponseRedirect(url) @@ -1859,7 +1863,7 @@ def workout_downloadmetar_view(request,id=0, message = "No latitude/longitude data" messages.error(request,message) kwargs = { - 'id':int(id) + 'id':id } url = reverse('workout_wind_view',kwargs=kwargs) response = HttpResponseRedirect(url) @@ -1963,7 +1967,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""): message = "Invalid Form" messages.error(request,message) kwargs = { - 'id':int(id) + 'id':id } url = reverse('workout_wind_view',kwargs=kwargs) response = HttpResponseRedirect(url) @@ -1972,7 +1976,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""): form = UpdateWindForm() # create interactive plot - res = interactive_windchart(id,promember=1) + res = interactive_windchart(encoder.decode_hex(id),promember=1) script = res[0] div = res[1] @@ -2050,7 +2054,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""): message = "Invalid Form" messages.error(request,message) kwargs = { - 'id':int(id)} + 'id':id} url = reverse('workout_wind_view',kwargs=kwargs) response = HttpResponseRedirect(url) @@ -2058,7 +2062,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""): form = UpdateStreamForm() # create interactive plot - res = interactive_streamchart(id,promember=1) + res = interactive_streamchart(encoder.decode_hex(id),promember=1) script = res[0] div = res[1] @@ -2173,7 +2177,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): successmessage = 'Your calculations have been submitted. You will receive an email when they are done. You can check the status of your calculations here' messages.info(request,successmessage) kwargs = { - 'id':int(id)} + 'id':id} try: url = request.session['referer'] @@ -2187,7 +2191,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): message = "Invalid Form" messages.error(request,message) kwargs = { - 'id':int(id)} + 'id':id} url = reverse('workout_otwsetpower_view',kwargs=kwargs) response = HttpResponseRedirect(url) @@ -2366,7 +2370,7 @@ def workout_data_view(request, id=0): ] - datadf,row = dataprep.getrowdata_db(id=id) + datadf,row = dataprep.getrowdata_db(id=encoder.decode_hex(id)) datadf.sort_values(['ftime'],inplace=True) @@ -2473,14 +2477,14 @@ def workout_stats_view(request,id=0,message="",successmessage=""): # prepare data frame - datadf,row = dataprep.getrowdata_db(id=id) + datadf,row = dataprep.getrowdata_db(id=encoder.decode_hex(id)) if (checkworkoutuser(request.user,row)==False): raise PermissionDenied('Access Denied') datadf = dataprep.clean_df_stats(datadf,workstrokesonly=workstrokesonly) if datadf.empty: - datadf,row = dataprep.getrowdata_db(id=id) + datadf,row = dataprep.getrowdata_db(id=encoder.decode_hex(id)) datadf = dataprep.clean_df_stats(datadf,workstrokesonly=False) workstrokesonly=False if datadf.empty: @@ -2964,7 +2968,7 @@ def workout_flexchart3_view(request,*args,**kwargs): css_resources, workstrokesonly ) = interactive_flex_chart2( - id,xparam=xparam,yparam1=yparam1, + encoder.decode_hex(id),xparam=xparam,yparam1=yparam1, yparam2=yparam2, promember=promember,plottype=plottype, workstrokesonly=workstrokesonly @@ -2977,7 +2981,7 @@ def workout_flexchart3_view(request,*args,**kwargs): css_resources, workstrokesonly ) = interactive_flex_chart2( - id,xparam=xparam,yparam1=yparam1, + encoder.decode_hex(id),xparam=xparam,yparam1=yparam1, yparam2=yparam2, promember=promember,plottype=plottype, workstrokesonly=workstrokesonly @@ -3044,7 +3048,7 @@ def workout_flexchart3_view(request,*args,**kwargs): flexoptionsform = FlexOptionsForm(initial=initial) - row = Workout.objects.get(id=id) + row = Workout.objects.get(id=encoder.decode_hex(id)) breadcrumbs = [ { @@ -3076,7 +3080,7 @@ def workout_flexchart3_view(request,*args,**kwargs): 'js_res': js_resources, 'css_res':css_resources, 'teams':get_my_teams(request.user), - 'id':int(id), + 'id':id, 'xparam':xparam, 'yparam1':yparam1, 'yparam2':yparam2, @@ -3135,7 +3139,7 @@ def workout_otwpowerplot_view(request,id=0,message="",successmessage=""): mayedit=1 # create interactive plot - res = interactive_otw_advanced_pace_chart(id,promember=promember) + res = interactive_otw_advanced_pace_chart(encoder.decode_hex(id),promember=promember) script = res[0] div = res[1] @@ -3213,7 +3217,7 @@ def workout_comment_view(request,id=0): c.save() url = reverse('workout_comment_view', kwargs={ - 'id':id + 'id':id, }) message = '{name} says: {comment}'.format( name = request.user.first_name, @@ -3342,20 +3346,20 @@ def workout_edit_view(request,id=0,message="",successmessage=""): try: boattype = request.POST['boattype'] except KeyError: - boattype = Workout.objects.get(id=id).boattype + boattype = Workout.objects.get(id=encoder.decode_hex(id)).boattype try: privacy = request.POST['privacy'] except KeyError: - privacy = Workout.objects.get(id=id).privacy + privacy = Workout.objects.get(id=row.id).privacy try: rankingpiece = form.cleaned_data['rankingpiece'] except KeyError: - rankingpiece =- Workout.objects.get(id=id).rankingpiece + rankingpiece =- Workout.objects.get(id=row.id).rankingpiece try: duplicate = form.cleaned_data['duplicate'] except KeyError: - duplicate = Workout.objects.get(id=id).duplicate + duplicate = Workout.objects.get(id=row.id).duplicate if private: privacy = 'private' @@ -3418,7 +3422,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""): return HttpResponse("Error: CSV Data File Not Found") r.rowdatetime = startdatetime r.write_csv(row.csvfilename,gzip=True) - dataprep.update_strokedata(id,r.df) + dataprep.update_strokedata(encoder.decode_hex(id),r.df) successmessage = "Changes saved" if rankingpiece: @@ -3427,7 +3431,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""): messages.info(request,successmessage) url = reverse('workout_edit_view', kwargs = { - 'id':str(row.id), + 'id':encoder.encode_hex(row.id), }) response = HttpResponseRedirect(url) @@ -3486,11 +3490,11 @@ def workout_edit_view(request,id=0,message="",successmessage=""): 'name':'Workouts' }, { - 'url':get_workout_default_page(request,id), + 'url':get_workout_default_page(request,encoder.encode_hex(row.id)), 'name': row.name }, { - 'url':reverse('workout_edit_view',kwargs={'id':id}), + 'url':reverse('workout_edit_view',kwargs={'id':encoder.encode_hex(row.id)}), 'name': 'Edit' } @@ -3631,7 +3635,7 @@ def workout_uploadimage_view(request,id): messages.error(request,message) url = reverse(r.defaultlandingpage, kwargs = { - 'id':int(id), + 'id':id, }) return HttpResponseRedirect(url) @@ -3729,7 +3733,7 @@ def workout_add_chart_view(request,id,plotnr=1): request.session['async_tasks'] = [(jobid,'make_plot')] - url = reverse(r.defaultlandingpage,kwargs={'id':str(w.id)}) + url = reverse(r.defaultlandingpage,kwargs={'id':encoder.encode_hex(w.id)}) return HttpResponseRedirect(url) @@ -4004,9 +4008,11 @@ def workout_upload_view(request, if message: messages.error(request,message) + w = Workout.objects.get(id=id) + url = reverse('workout_edit_view', kwargs = { - 'id':int(id), + 'id':encoder.encode_hex(w.id), }) if is_ajax: @@ -4014,7 +4020,6 @@ def workout_upload_view(request, else: response = HttpResponseRedirect(url) - w = Workout.objects.get(id=id) r = getrower(request.user) if (make_plot): @@ -4135,7 +4140,7 @@ def workout_upload_view(request, if landingpage != 'workout_upload_view': url = reverse(landingpage, kwargs = { - 'id':w.id, + 'id':encoder.encode_hex(w.id), }) else: url = reverse(landingpage) @@ -4326,7 +4331,7 @@ def team_workout_upload_view(request,message="", url = reverse('team_workout_upload_view') response = HttpResponseRedirect(url) - w = Workout.objects.get(id=id) + w = Workout.objects.get(id=encoder.decode_hex(id)) r = getrower(request.user) if (make_plot): @@ -4459,12 +4464,7 @@ def graph_show_view(request,id): # Restore original stroke data and summary @login_required() def workout_summary_restore_view(request,id,message="",successmessage=""): - try: - row = Workout.objects.get(id=id) - if (checkworkoutuser(request.user,row)==False): - raise PermissionDenied("You are not allowed to edit this workout") - except Workout.DoesNotExist: - raise Http404("Workout doesn't exist") + row = get_workout_permitted(request.user,id) s = "" # still here - this is a workout we may edit @@ -4489,14 +4489,14 @@ def workout_summary_restore_view(request,id,message="",successmessage=""): raise Http404("Error: CSV Data File Not Found") rowdata.restoreintervaldata() rowdata.write_csv(f1,gzip=True) - dataprep.update_strokedata(id,rowdata.df) + dataprep.update_strokedata(encoder.decode_hex(id),rowdata.df) intervalstats = rowdata.allstats() row.summary = intervalstats row.save() # create interactive plot try: - res = interactive_chart(id,promember=1) + res = interactive_chart(encoder.decode_hex(id),promember=1) script = res[0] div = res[1] except ValueError: @@ -4506,14 +4506,14 @@ def workout_summary_restore_view(request,id,message="",successmessage=""): messages.info(request,'Original Interval Data Restored') url = reverse('workout_summary_edit_view', kwargs={ - 'id':int(id), + 'id':encoder.encode_hex(row.id), } ) return HttpResponseRedirect(url) # Split a workout @user_passes_test(ispromember,login_url="/rowers/paidplans",message="This functionality requires a Pro plan or higher",redirect_field_name=None) -def workout_split_view(request,id=id): +def workout_split_view(request,id=0): row = get_workout_permitted(request.user,id) r = row.user @@ -4524,11 +4524,11 @@ def workout_split_view(request,id=id): 'name':'Workouts' }, { - 'url':get_workout_default_page(request,row.id), + 'url':get_workout_default_page(request,id), 'name': row.name }, { - 'url':reverse('graph_show_view', + 'url':reverse('workout_split_view', kwargs={'id':id}), 'name': 'Chart' } @@ -4586,7 +4586,7 @@ def workout_split_view(request,id=id): # create interactive plot try: - res = interactive_chart(id,promember=1) + res = interactive_chart(encoder.decode_hex(id),promember=1) script = res[0] div = res[1] except ValueError: @@ -4607,6 +4607,12 @@ def workout_split_view(request,id=id): @user_passes_test(ispromember,login_url="/rowers/paidplans",message="This functionality requires a Pro plan or higher",redirect_field_name=None) def workout_fusion_view(request,id1=0,id2=1): + try: + id1 = encoder.decode_hex(id1) + id2 = encoder.decode_hex(id2) + except: + pass + r = getrower(request.user) try: @@ -4645,7 +4651,7 @@ def workout_fusion_view(request,id1=0,id2=1): url = reverse('workout_edit_view', kwargs={ - 'id':idnew, + 'id':encoder.encode_hex(idnew), }) return HttpResponseRedirect(url) @@ -4662,12 +4668,15 @@ 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':encoder.encode_hex(id1)}), 'name': 'Sensor Fusion' }, { 'url':reverse('workout_fusion_view', - kwargs={'id1':id1,'id2':id2}), + kwargs={ + 'id1':encoder.encode_hex(id1), + 'id2':encoder.encode_hex(id2) + }), 'name': str(w2.id) } @@ -4837,7 +4846,7 @@ def workout_summary_edit_view(request,id,message="",successmessage="" rowdata.write_csv(f1,gzip=True) - dataprep.update_strokedata(id,rowdata.df) + dataprep.update_strokedata(encoder.decode_hex(id),rowdata.df) messages.info(request,"Updated interval data saved") data = { @@ -4881,7 +4890,7 @@ def workout_summary_edit_view(request,id,message="",successmessage="" row.save() rowdata.write_csv(f1,gzip=True) - dataprep.update_strokedata(id,rowdata.df) + dataprep.update_strokedata(encoder.decode_hex(id),rowdata.df) messages.info(request,"Updated interval data saved") data = {'intervalstring':s} form = SummaryStringForm(initial=data) @@ -4996,7 +5005,7 @@ def workout_summary_edit_view(request,id,message="",successmessage="" row.save() rowdata.write_csv(f1,gzip=True) - dataprep.update_strokedata(id,rowdata.df) + dataprep.update_strokedata(encoder.decode_hex(id),rowdata.df) messages.info(request,"Updated interval data saved") form = SummaryStringForm() @@ -5077,11 +5086,12 @@ def workout_summary_edit_view(request,id,message="",successmessage="" 'normp': normp, 'normv': normv, } - res = interactive_chart(id,promember=1,intervaldata=intervaldata) + res = interactive_chart(encoder.decode_hex(id),promember=1,intervaldata=intervaldata) script = res[0] div = res[1] except ValueError: - pass + script = '' + div = '' # render page