From 1e3f3844f742ded52068ed36221b4070cf156e2f Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 9 Jan 2019 17:01:36 +0100 Subject: [PATCH] now passes new tests --- rowers/tests/mocks.py | 3 + rowers/tests/test_empower.py | 3 +- rowers/tests/test_imports.py | 2 +- rowers/tests/test_models.py | 5 +- rowers/tests/test_urls.py | 20 ++-- rowers/tests/testdata/testdata.csv.gz | Bin 11511 -> 11511 bytes rowers/urls.py | 4 +- rowers/views.py | 155 +++++++++++++++++--------- 8 files changed, 124 insertions(+), 68 deletions(-) diff --git a/rowers/tests/mocks.py b/rowers/tests/mocks.py index a3d66153..255344f6 100644 --- a/rowers/tests/mocks.py +++ b/rowers/tests/mocks.py @@ -1,6 +1,9 @@ import pytest pytestmark = pytest.mark.django_db +from rowers.opaque import encoder +encoded1 = str(encoder.encode_hex(1)) +encoded2 = str(encoder.encode_hex(2)) from bs4 import BeautifulSoup import re diff --git a/rowers/tests/test_empower.py b/rowers/tests/test_empower.py index 5bd1feb5..f85712fd 100644 --- a/rowers/tests/test_empower.py +++ b/rowers/tests/test_empower.py @@ -112,9 +112,10 @@ class EmpowerTest(TestCase): def test_workflow_map_view(self, mocked_sqlalchemy): login = self.c.login(username='john',password='koeinsloot') self.assertTrue(login) + encodedid = str(encoder.encode_hex(self.wote.id)) url = '/rowers/workout/{id}/workflow/'.format( - id = self.wote.id + id = encodedid ) response = self.c.get(url) diff --git a/rowers/tests/test_imports.py b/rowers/tests/test_imports.py index 02c87140..a21fb19d 100644 --- a/rowers/tests/test_imports.py +++ b/rowers/tests/test_imports.py @@ -350,7 +350,7 @@ class StravaObjects(DjangoTestCase): response = self.c.get('/rowers/workout/stravaimport/12',follow=True) self.assertRedirects(response, - expected_url='/rowers/workout/'+encoded1+'/edit/', + expected_url='/rowers/workout/'+encoded2+'/edit/', status_code=301,target_status_code=200) self.assertEqual(response.status_code, 200) diff --git a/rowers/tests/test_models.py b/rowers/tests/test_models.py index 84e0e720..6c95c192 100644 --- a/rowers/tests/test_models.py +++ b/rowers/tests/test_models.py @@ -144,7 +144,7 @@ class WorkoutCompareTest(TestCase): login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) - url = '/rowers/team-compare-select/workout/1/team/0/user/1/' + url = '/rowers/team-compare-select/workout/'+encoded1+'/team/0/user/1/' response = self.c.get(url) self.assertEqual(response.status_code,200) @@ -374,7 +374,8 @@ class ForcecurveTest(TestCase): login = self.c.login(username=self.u.username, password = self.password) self.assertTrue(login) - url = '/rowers/workout/1/forcecurve/' + encoded1 = str(encoder.encode_hex(1)) + url = '/rowers/workout/'+encoded1+'/forcecurve/' response = self.c.get(url) self.assertEqual(response.status_code,200) diff --git a/rowers/tests/test_urls.py b/rowers/tests/test_urls.py index 29430e23..cf228533 100644 --- a/rowers/tests/test_urls.py +++ b/rowers/tests/test_urls.py @@ -206,7 +206,7 @@ class URLTests(TestCase): '/rowers/sessions/teamcreate/', '/rowers/sessions/user/1/', '/rowers/team-compare-select/', - '/rowers/team-compare-select/workout/1/', + '/rowers/team-compare-select/workout/'+encoded1+'/', '/rowers/team-compare-select/2016-01-01/2016-12-31/', '/rowers/test-job/2/', '/rowers/test-job2/2/', @@ -216,17 +216,17 @@ class URLTests(TestCase): # '/rowers/updatefitness/rower/50/', # '/rowers/user-boxplot/', # '/rowers/user-boxplot-data/', -# '/rowers/user-boxplot-select//', -# '/rowers/user-boxplot-select/user/1//', +# '/rowers/user-boxplot-select/', +# '/rowers/user-boxplot-select/user/1/', # '/rowers/user-boxplot/user/1/', # '/rowers/user-multiflex-data/', -# '/rowers/user-multiflex-select//', +# '/rowers/user-multiflex-select/', # '/rowers/user-multiflex-select/2016-01-01/2016-12-31/', -# '/rowers/user-multiflex-select/user/1//', +# '/rowers/user-multiflex-select/user/1/', # '/rowers/user-multiflex-select/user/1/2016-01-01/2016-12-31/', -# '/rowers/user-multiflex//', +# '/rowers/user-multiflex/', # '/rowers/user-multiflex/user/1/', - '/rowers/workout/'+encoded1+'//', + '/rowers/workout/'+encoded1+'/', '/rowers/workout/'+encoded1+'/adddistanceplot/', '/rowers/workout/'+encoded1+'/adddistanceplot2/', '/rowers/workout/'+encoded1+'/addotwpowerplot/', @@ -251,14 +251,14 @@ class URLTests(TestCase): '/rowers/workout/'+encoded1+'/interactiveotwplot/', '/rowers/workout/'+encoded1+'/map/', '/rowers/workout/'+encoded1+'/otwsetpower/', - '/rowers/workout/'+encoded1+'/recalcsummary//', + '/rowers/workout/'+encoded1+'/recalcsummary/', '/rowers/workout/'+encoded1+'/restore/', '/rowers/workout/'+encoded1+'/smoothenpace/', '/rowers/workout/'+encoded1+'/split/', '/rowers/workout/'+encoded1+'/stats/', '/rowers/workout/'+encoded1+'/stream/', '/rowers/workout/'+encoded1+'/task/', - '/rowers/workout/'+encoded1+'/test_strokedata/', + '/rowers/workout/'+encoded1+'/teststrokedata/', '/rowers/workout/'+encoded1+'/toggle-ranking/', '/rowers/workout/'+encoded1+'/undosmoothenpace/', '/rowers/workout/'+encoded1+'/unsubscribe/', @@ -267,7 +267,7 @@ class URLTests(TestCase): '/rowers/workout/'+encoded1+'/wind/', '/rowers/workout/'+encoded1+'/workflow/', '/rowers/workout/compare/'+encoded1+'/2016-01-01/2016-12-31/', - '/rowers/workout/fusion/'+encoded1+'//', + '/rowers/workout/fusion/'+encoded1+'/', '/rowers/workout/fusion/'+encoded1+'/2016-01-01/2016-12-31/', '/rowers/workout/upload/', '/rowers/workout/upload/team/', diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz index 6e920ea03370e26b4dfc373a17311ef732a8dc63..ad61fd145099f80c817a0c2a644d19a244f79539 100644 GIT binary patch delta 16 Xcmew!`8|?dzMF$%g_PMw_76G$IfMo- delta 16 Xcmew!`8|?dzMF$1=!oe?_76G$J0S*v diff --git a/rowers/urls.py b/rowers/urls.py index 1702b506..d76adbc3 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -175,7 +175,7 @@ urlpatterns = [ url(r'^team-compare-select/workout/(?P\b[0-9A-Fa-f]+\b)/team/(?P\d+)/$',views.team_comparison_select), url(r'^team-compare-select/workout/(?P\b[0-9A-Fa-f]+\b)/team/(?P\d+)/user/(?P\d+)/$',views.team_comparison_select), url(r'^team-compare-select/workout/(?P\b[0-9A-Fa-f]+\b)/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)/$',views.team_comparison_select), - url(r'^team-compare-select/workout/(?P\d+)/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)/user/(?P\d+)/$',views.team_comparison_select), + url(r'^team-compare-select/workout/(?P\b[0-9A-Fa-f]+\b)/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)/user/(?P\d+)/$',views.team_comparison_select), url(r'^team-compare-select/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)/user/(?P\d+)/$',views.team_comparison_select), url(r'^team-compare-select/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)/$',views.team_comparison_select), url(r'^team-compare-select/workout/(?P\b[0-9A-Fa-f]+\b)/user/(?P\d+)/$',views.team_comparison_select), @@ -510,7 +510,7 @@ urlpatterns = [ url(r'^edittarget/(?P\d+)/$',login_required( views.TrainingTargetUpdate.as_view()), name='trainingtarget_update_view'), - url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/test\_strokedata/$',views.strokedataform), + url(r'^workout/(?P\b[0-9A-Fa-f]+\b)/teststrokedata/$',views.strokedataform), url(r'^sessions/teamcreate/user/(?P\d+)/$',views.plannedsession_teamcreate_view), url(r'^sessions/teamcreate/team/(?P\d+)/user/(?P\d+)/$', views.plannedsession_teamcreate_view), diff --git a/rowers/views.py b/rowers/views.py index 176e1d47..54fd3c94 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -1866,7 +1866,8 @@ def add_workout_from_strokedata(user,importid,data,strokedata, # Export workout to TCX and send to user's email address @login_required() def workout_tcxemail_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) message = "" successmessage = "" r = getrower(request.user) @@ -2019,7 +2020,8 @@ def course_kmldownload_view(request,id=0): # Export workout to GPX and send to user's email address @login_required() def workout_gpxemail_view(request,id=0): - id = encoder.decode_hex(id) + if id != 0: + id = encoder.decode_hex(id) message = "" successmessage = "" r = Rower.objects.get(user=request.user) @@ -2110,7 +2112,8 @@ def workouts_summaries_email_view(request): # Get Workout CSV file and send it to user's email address @login_required() def workout_csvemail_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) message = "" r = getrower(request.user) if r.emailbounced: @@ -2155,7 +2158,8 @@ def workout_csvemail_view(request,id=0): # Get Workout CSV file and send it to user's email address @login_required() def workout_csvtoadmin_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) message = "" r = getrower(request.user) w = get_workout(id) @@ -2182,7 +2186,8 @@ def workout_csvtoadmin_view(request,id=0): # Send workout to TP @login_required() def workout_tp_upload_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) message = "" r = getrower(request.user) @@ -2240,7 +2245,8 @@ def workout_tp_upload_view(request,id=0): # abundance of error logging here because there were/are some bugs @login_required() def workout_strava_upload_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) message = "" r = getrower(request.user) res = -1 @@ -2345,7 +2351,8 @@ def workout_strava_upload_view(request,id=0): # Upload workout to Concept2 logbook @login_required() def workout_c2_upload_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) message = "" # ready to upload. Hurray w = get_workout(id) @@ -2375,7 +2382,8 @@ def workout_c2_upload_view(request,id=0): # Upload workout to RunKeeper @login_required() def workout_runkeeper_upload_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) message = "" w = get_workout(id) r = w.user @@ -2439,7 +2447,8 @@ def workout_runkeeper_upload_view(request,id=0): # Upload workout to Underarmour @login_required() def workout_underarmour_upload_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) message = "" w = get_workout(id) r = w.user @@ -2505,7 +2514,8 @@ def workout_underarmour_upload_view(request,id=0): # Upload workout to SportTracks @login_required() def workout_sporttracks_upload_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) message = "" # ready to upload. Hurray w = get_workout(id) @@ -3561,7 +3571,8 @@ def fitnessmetric_view(request,id=0,mode='rower', message="This functionality requires a Pro plan or higher", redirect_field_name=None) def workout_forcecurve_view(request,id=0,workstrokesonly=False): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) promember=0 @@ -3625,7 +3636,8 @@ def workout_forcecurve_view(request,id=0,workstrokesonly=False): # Test asynchronous tasking and messaging @login_required() def workout_test_task_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = Workout.objects.get(id=id) res = myqueue(queuehigh,addcomment2,request.user.id,row.id) @@ -3639,7 +3651,8 @@ def workout_test_task_view(request,id=0): # Show Stroke power histogram for a workout @login_required() def workout_histo_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) w = get_workout(id) promember=0 @@ -4815,7 +4828,8 @@ def rankings_view2(request,theuser=0, message="This functionality requires a Pro plan or higher", redirect_field_name=None) def workout_update_cp_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) if (checkworkoutuser(request.user,row)==False): @@ -5596,7 +5610,8 @@ def oterankings_view(request,theuser=0, # Reload the workout and calculate the summary from the stroke data (lapIDx) @login_required() def workout_recalcsummary_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) if (checkworkoutuser(request.user,row)==False): @@ -5908,7 +5923,8 @@ def team_comparison_select(request, teamid=0): - id = encoder.decode_hex(id) + if id != 0: + id = encoder.decode_hex(id) r = getrequestrower(request,userid=userid) requestrower = getrower(request.user) @@ -7765,7 +7781,8 @@ def workout_comparison_list(request,id=0,message='',successmessage='', startdate=timezone.now()-datetime.timedelta(days=365), enddate=timezone.now()): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) try: r = getrower(request.user) except Rower.DoesNotExist: @@ -7852,7 +7869,8 @@ def workout_fusion_list(request,id=0,message='',successmessage='', startdate=timezone.now()-datetime.timedelta(days=365), enddate=timezone.now()): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) try: r = getrower(request.user) except Rower.DoesNotExist: @@ -7951,7 +7969,8 @@ def workout_fusion_list(request,id=0,message='',successmessage='', def workout_view(request,id=0): request.session['referer'] = absolute(request)['PATH'] - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) if not request.user.is_anonymous(): rower = getrower(request.user) @@ -8056,7 +8075,8 @@ def workout_view(request,id=0): def workout_undo_smoothenpace_view( request,id=0,message="",successmessage="" ): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) r = getrower(request.user) @@ -8094,7 +8114,8 @@ def workout_undo_smoothenpace_view( message="This functionality requires a Pro plan or higher", redirect_field_name=None) def workout_smoothenpace_view(request,id=0,message="",successmessage=""): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) previousurl = request.META.get('HTTP_REFERER') @@ -8148,7 +8169,8 @@ def workout_smoothenpace_view(request,id=0,message="",successmessage=""): message="This functionality requires a Pro plan or higher", redirect_field_name=None) def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) r = getrower(request.user) breadcrumbs = [ @@ -8228,7 +8250,8 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""): def workout_downloadwind_view(request,id=0, airportcode=None, message="",successmessage=""): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) f1 = row.csvfilename @@ -8295,7 +8318,8 @@ def workout_downloadwind_view(request,id=0, def workout_downloadmetar_view(request,id=0, airportcode=None, message="",successmessage=""): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) f1 = row.csvfilename @@ -8361,7 +8385,8 @@ def workout_downloadmetar_view(request,id=0, # Show form to update wind data @user_passes_test(ispromember,login_url="/rowers/paidplans",message="This functionality requires a Pro plan or higher",redirect_field_name=None) def workout_wind_view(request,id=0,message="",successmessage=""): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) r = getrower(request.user) breadcrumbs = [ @@ -8498,7 +8523,8 @@ def workout_wind_view(request,id=0,message="",successmessage=""): # Show form to update River stream data (for river dwellers) @user_passes_test(ispromember,login_url="/rowers/paidplans",message="This functionality requires a Pro plan or higher",redirect_field_name=None) def workout_stream_view(request,id=0,message="",successmessage=""): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) r = getrower(request.user) @@ -8585,7 +8611,8 @@ def workout_stream_view(request,id=0,message="",successmessage=""): # Form to set average crew weight and boat type, then run power calcs @user_passes_test(ispromember, login_url="/rowers/paidplans",redirect_field_name=None) def workout_otwsetpower_view(request,id=0,message="",successmessage=""): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) w = get_workout(id) r = getrower(request.user) @@ -8718,7 +8745,8 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): @login_required() def instroke_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) w = get_workout(id) r = getrower(request.user) mayedit = 0 @@ -8777,7 +8805,8 @@ def instroke_view(request,id=0): # A special Edit page with all the Geeky functionality for the workout @login_required() def workout_geeky_view(request,id=0,message="",successmessage=""): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) # form = WorkoutForm(instance=row) @@ -8840,7 +8869,8 @@ def workout_geeky_view(request,id=0,message="",successmessage=""): # generate instroke chart @login_required() def instroke_chart(request,id=0,metric=''): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) w = get_workout(id) if (checkworkoutuser(request.user,w)==False): @@ -9200,7 +9230,8 @@ def cumstats(request,theuser=0, # data explorer @login_required() def workout_data_view(request, id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) r = getrower(request.user) w = get_workout(id) @@ -9300,7 +9331,8 @@ def workout_data_view(request, id=0): # Stats page @login_required() def workout_stats_view(request,id=0,message="",successmessage=""): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) r = getrower(request.user) w = get_workout(id) @@ -9469,7 +9501,8 @@ def workout_stats_view(request,id=0,message="",successmessage=""): # The Advanced edit page @login_required() def workout_advanced_view(request,id=0,message="",successmessage=""): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) # form = WorkoutForm(instance=row) @@ -9527,8 +9560,10 @@ def workout_advanced_view(request,id=0,message="",successmessage=""): # The interactive plot comparing two workouts (obsolete version) def workout_comparison_view(request,id1=0,id2=0,xparam='distance',yparam='spm'): - id1 = encoder.decode_hex(id1) - id2 = encoder.decode_hex(id2) + if id1: + id1 = encoder.decode_hex(id1) + if id2: + id2 = encoder.decode_hex(id2) promember=0 if not request.user.is_anonymous(): r = getrower(request.user) @@ -9564,8 +9599,10 @@ def workout_comparison_view(request,id1=0,id2=0,xparam='distance',yparam='spm'): # Updated version of comparison plot def workout_comparison_view2(request,id1=0,id2=0,xparam='distance', yparam='spm',plottype='line'): - id1 = encoder.decode_hex(id1) - id2 = encoder.decode_hex(id2) + if id1: + id1 = encoder.decode_hex(id1) + if id2: + id2 = encoder.decode_hex(id2) promember=0 if not request.user.is_anonymous(): r = getrower(request.user) @@ -10191,7 +10228,8 @@ def workout_flexchart3_view(request,*args,**kwargs): # The interactive plot with the colored Heart rate zones def workout_biginteractive_view(request,id=0,message="",successmessage=""): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) # check if user is owner of this workout @@ -10233,7 +10271,8 @@ def workout_biginteractive_view(request,id=0,message="",successmessage=""): # The interactive plot with wind corrected pace for OTW outings def workout_otwpowerplot_view(request,id=0,message="",successmessage=""): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) w = get_workout(id) r = getrower(request.user) @@ -10294,7 +10333,8 @@ def workout_otwpowerplot_view(request,id=0,message="",successmessage=""): @login_required() def workout_export_view(request,id=0, message="", successmessage=""): request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) try: @@ -10352,7 +10392,8 @@ def workout_export_view(request,id=0, message="", successmessage=""): # @login_required() def workout_unsubscribe_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) w = get_workout(id) if w.privacy == 'private' and w.user.user != request.user: @@ -10383,7 +10424,8 @@ def workout_unsubscribe_view(request,id=0): # list of comments to a workout @login_required() def workout_comment_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) w = get_workout(id) if w.privacy == 'private' and w.user.user != request.user: @@ -10735,7 +10777,8 @@ def workout_edit_view(request,id=0,message="",successmessage=""): request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE request.session['referer'] = absolute(request)['PATH'] - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) row = get_workout(id) @@ -10951,7 +10994,8 @@ def workout_edit_view(request,id=0,message="",successmessage=""): @login_required() def workout_map_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE request.session['referer'] = absolute(request)['PATH'] @@ -12098,7 +12142,8 @@ def workout_getstravaworkout_next(request): @login_required def workout_toggle_ranking(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) is_ajax = False if request.is_ajax(): is_ajax = True @@ -12366,7 +12411,7 @@ def workout_upload_view(request, url = reverse(workout_edit_view, kwargs = { - 'id':encoder.decode_hex(id), + 'id':str(id), }) if is_ajax: @@ -12729,7 +12774,8 @@ def team_workout_upload_view(request,message="", # Ask the user if he really wants to delete the workout @login_required() def workout_delete_confirm_view(request, id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) try: row = Workout.objects.get(id=id) if (checkworkoutuser(request.user,row)==False): @@ -12748,7 +12794,8 @@ def workout_delete_confirm_view(request, id=0): # Really deleting the workout @login_required() def workout_delete_view(request,id=0): - id = encoder.decode_hex(id) + if id: + id = encoder.decode_hex(id) try: row = Workout.objects.get(id=id) if (checkworkoutuser(request.user,row)==False): @@ -12964,8 +13011,9 @@ def workout_summary_restore_view(request,id,message="",successmessage=""): # 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): - id = encoder.decode_hex(id) +def workout_split_view(request,id=0): + if id: + id = encoder.decode_hex(id) row = get_workout_permitted(request.user,id) r = row.user @@ -13057,8 +13105,10 @@ def workout_split_view(request,id=id): # Fuse two workouts @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): - id1 = encoder.decode_hex(id1) - id2 = encoder.decode_hex(id2) + if id1: + id1 = encoder.decode_hex(id1) + if id2: + id2 = encoder.decode_hex(id2) r = getrower(request.user) @@ -14313,6 +14363,7 @@ def trydf(df,aantal,column): # Stroke data form to test API upload @login_required() def strokedataform(request,id=0): + id = encoder.decode_hex(id) try: id=int(id)