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