diff --git a/rowers/c2stuff.py b/rowers/c2stuff.py index 745ca19f..2a2021e5 100644 --- a/rowers/c2stuff.py +++ b/rowers/c2stuff.py @@ -541,7 +541,7 @@ def process_callback(request): # Uploading workout def workout_c2_upload(user,w): - response = 'trying C2 upload' + message = 'trying C2 upload' thetoken = c2_open(user) r = Rower.objects.get(user=user) @@ -565,7 +565,7 @@ def workout_c2_upload(user,w): response = requests.post(url,headers=headers,data=json.dumps(data)) if (response.status_code == 409 ): - message = "Duplicate error" + message = "Concept2 Duplicate error" w.uploadedtoc2 = -1 c2id = -1 w.save() @@ -581,7 +581,7 @@ def workout_c2_upload(user,w): c2id = 0 else: - message = "You are not authorized to upload this workout" + message = "You are not authorized to upload this workout to Concept2" c2id = 0 return message,c2id diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index e17bd3e4..f79b9ce2 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -997,11 +997,20 @@ def interactive_cum_flex_chart2(theworkouts,promember=0, if datadf.empty: return ['','

No non-zero data in selection

','',''] - - datadf['x1'] = datadf.ix[:,xparam] - datadf['y1'] = datadf.ix[:,yparam1] + + try: + datadf['x1'] = datadf.ix[:,xparam] + except KeyError: + datadf['x1'] = datadf['distance'] + try: + datadf['y1'] = datadf.ix[:,yparam1] + except KeyError: + datadf['y1'] = datadf['pace'] if yparam2 != 'None': - datadf['y2'] = datadf.ix[:,yparam2] + try: + datadf['y2'] = datadf.ix[:,yparam2] + except KeyError: + datadf['y2'] = datadf['y1'] else: datadf['y2'] = datadf['y1'] diff --git a/rowers/models.py b/rowers/models.py index 241df8fb..2b6a1531 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -327,9 +327,9 @@ class BaseFavoriteFormSet(BaseFormSet): def checkworkoutuser(user,workout): try: r = Rower.objects.get(user=user) - return (workout.user == r) + return workout.user == r except Rower.DoesNotExist: - return(False) + return False # Workout diff --git a/rowers/runkeeperstuff.py b/rowers/runkeeperstuff.py index bcc0edee..2d025ce4 100644 --- a/rowers/runkeeperstuff.py +++ b/rowers/runkeeperstuff.py @@ -319,7 +319,7 @@ def get_userid(access_token): return str(res) def workout_runkeeper_upload(user,w): - message = "" + message = "Uploading to Runkeeper" rkid = 0 r = w.user @@ -332,7 +332,7 @@ def workout_runkeeper_upload(user,w): if (checkworkoutuser(user,w)): data = createrunkeeperworkoutdata(w) if not data: - message = "Data error" + message = "Data error in Runkeeper Upload" rkid = 0 return message, rkid @@ -357,7 +357,7 @@ def workout_runkeeper_upload(user,w): rkuri = geturifromid(thetoken,rkid) w.uploadedtorunkeeper = rkid w.save() - return '',rkid + return 'Successfully synchronized to Runkeeper',rkid else: s = response message = "Something went wrong in workout_runkeeper_upload_view: %s - %s" % (s.reason,s.text) diff --git a/rowers/sporttracksstuff.py b/rowers/sporttracksstuff.py index 053f6915..629f166e 100644 --- a/rowers/sporttracksstuff.py +++ b/rowers/sporttracksstuff.py @@ -319,7 +319,7 @@ def getidfromresponse(response): def workout_sporttracks_upload(user,w): - message = "" + message = "Uploading to SportTracks" stid = 0 # ready to upload. Hurray r = w.user @@ -353,7 +353,7 @@ def workout_sporttracks_upload(user,w): stid = getidfromresponse(response) w.uploadedtosporttracks = stid w.save() - return '',stid + return 'Successfully synced to SportTracks',stid else: s = response message = "Something went wrong in workout_sporttracks_upload_view: %s" % s.reason diff --git a/rowers/stravastuff.py b/rowers/stravastuff.py index 270ff2cd..75fdc740 100644 --- a/rowers/stravastuff.py +++ b/rowers/stravastuff.py @@ -275,7 +275,7 @@ def handle_stravaexport(f2,workoutname,stravatoken,description=''): message = 'Workout successfully synchronized to Strava' except: res = 0 - + message = 'Strava upload timed out' # description doesn't work yet. Have to wait for stravalib to update @@ -289,7 +289,7 @@ def handle_stravaexport(f2,workoutname,stravatoken,description=''): def workout_strava_upload(user,w): - message = "" + message = "Uploading to Strava" stravaid=-1 r = Rower.objects.get(user=user) res = -1 @@ -322,7 +322,7 @@ def workout_strava_upload(user,w): os.remove(tcxfile) except WindowsError: pass - message = '' + message = mes stravaid = res return message,stravaid else: diff --git a/rowers/tasks.py b/rowers/tasks.py index d4009972..34e33726 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -271,6 +271,7 @@ def handle_makeplot(f1,f2,t,hrdata,plotnr,imagename): plt.close(fig1) fig1.clf() gc.collect() + return imagename # Team related remote tasks diff --git a/rowers/templates/summary_edit.html b/rowers/templates/summary_edit.html index 5d7c98e3..8c3cf177 100644 --- a/rowers/templates/summary_edit.html +++ b/rowers/templates/summary_edit.html @@ -136,7 +136,7 @@

Updated Summary

-
+ {% csrf_token %} @@ -200,4 +200,4 @@
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/rowers/tests.py b/rowers/tests.py index 7eb5a4b2..8ddbfaed 100644 --- a/rowers/tests.py +++ b/rowers/tests.py @@ -702,7 +702,8 @@ class ViewTest(TestCase): f.close() - self.assertRedirects(response, expected_url='/rowers/workout/upload/c/This%20C2%20logbook%20summary%20does%20not%20contain%20stroke%20data.%20Please%20download%20the%20Export%20Stroke%20Data%20file%20from%20the%20workout%20details%20on%20the%20C2%20logbook.', + self.assertRedirects(response, + expected_url='/rowers/workout/upload/', status_code=302,target_status_code=200) self.assertEqual(response.status_code, 200) diff --git a/rowers/tpstuff.py b/rowers/tpstuff.py index 7331a512..efff14bb 100644 --- a/rowers/tpstuff.py +++ b/rowers/tpstuff.py @@ -283,7 +283,6 @@ def uploadactivity(access_token,filename,description='', with open("media/tperrors.log","a") as errorlog: errorlog.write(str(resp.status_code)) errorlog.write("\r\n") - print "noot" timestr = strftime("%Y%m%d-%H%M%S") errorlog.write(timestr+"\r\n") errorlog.write("\r\n") @@ -296,14 +295,13 @@ def uploadactivity(access_token,filename,description='', errorlog.write("\r\n") return 0,resp.reason,resp.status_code,headers else: - print resp.json() return resp.json()[0]["Id"],"ok",200,"" return 0 def workout_tp_upload(user,w): - message = "" + message = "Uploading to TrainingPeaks" tpid = 0 r = w.user @@ -333,7 +331,7 @@ def workout_tp_upload(user,w): tpid = res w.save() os.remove(tcxfile) - return '',tpid + return 'Successfully synchronized to TrainingPeaks',tpid else: # no tcxfile message = "Upload to TrainingPeaks failed" diff --git a/rowers/underarmourstuff.py b/rowers/underarmourstuff.py index 6dfbbc97..277b72bb 100644 --- a/rowers/underarmourstuff.py +++ b/rowers/underarmourstuff.py @@ -401,7 +401,7 @@ def get_userid(access_token): return res def workout_ua_upload(user,w): - message = "" + message = "Uploading to MapMyFitness" uaid = 0 r = w.user @@ -438,7 +438,7 @@ def workout_ua_upload(user,w): uaid = getidfromresponse(response) w.uploadedtounderarmour = uaid w.save() - return '',uaid + return 'Successfully synchronized with MapMyFitness',uaid else: s = response message = "Something went wrong in workout_underarmour_upload_view: %s - %s" % (s.reason,s.text) diff --git a/rowers/urls.py b/rowers/urls.py index ac183622..f4ce2529 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -115,18 +115,11 @@ urlpatterns = [ url(r'^404/$', TemplateView.as_view(template_name='404.html'),name='404'), url(r'^400/$', TemplateView.as_view(template_name='400.html'),name='400'), url(r'^403/$', TemplateView.as_view(template_name='403.html'),name='403'), - url(r'^imports/s/(?P\w+.*)/$', TemplateView.as_view(template_name='imports.html'), name='imports'), url(r'^imports/$', TemplateView.as_view(template_name='imports.html'), name='imports'), - url(r'^list-workouts/c/(?P\w+.*)/$',views.workouts_view), - url(r'^list-workouts/s/(?P\w+.*)/$',views.workouts_view), - url(r'^list-workouts/c/(?P\w+.*)/s/(?P\w+.*)$',views.workouts_view), url(r'^list-workouts/team/(?P\d+)/(?P\w+.*)/(?P\w+.*)$',views.workouts_view), url(r'^list-workouts/team/(?P\d+)/$',views.workouts_view), url(r'^list-workouts/(?P\w+.*)/(?P\w+.*)$',views.workouts_view), url(r'^list-workouts/$',views.workouts_view), - url(r'^team-compare-select/c/(?P\w+.*)/$',views.team_comparison_select), - url(r'^team-compare-select/s/(?P\w+.*)/$',views.team_comparison_select), - url(r'^team-compare-select/c/(?P\w+.*)/s/(?P\w+.*)$',views.team_comparison_select), url(r'^team-compare-select/team/(?P\d+)/(?P\w+.*)/(?P\w+.*)$',views.team_comparison_select), url(r'^team-compare-select/team/(?P\d+)/$',views.team_comparison_select), url(r'^team-compare-select/(?P\w+.*)/(?P\w+.*)$',views.team_comparison_select), @@ -155,124 +148,98 @@ urlpatterns = [ url(r'^cumstats/$',views.cumstats), url(r'^histo-all/$',views.histo_all), url(r'^(?P\d+)/histo-all/$',views.histo_all), - url(r'^graph/(\d+)/$',views.graph_show_view), - url(r'^graph/(\d+)/deleteconfirm$',views.graph_delete_confirm_view), - url(r'^graph/(\d+)/delete$',views.graph_delete_view), - url(r'^workout/upload/team/s/(?P\w+.*)/c/(?P\w+.*)/$',views.team_workout_upload_view), - url(r'^workout/upload/team/c/(?P\w+.*)/$',views.team_workout_upload_view), - url(r'^workout/upload/team/s/(?P\w+.*)/$',views.team_workout_upload_view), + url(r'^graph/(?P\d+)/$',views.graph_show_view), + url(r'^graph/(?P\d+)/deleteconfirm$',views.graph_delete_confirm_view), + url(r'^graph/(?P\d+)/delete$',views.graph_delete_view), url(r'^workout/upload/team/$',views.team_workout_upload_view), url(r'^workout/upload/$',views.workout_upload_view), - url(r'^workout/upload/c/(?P\w+.*)$',views.workout_upload_view), url(r'^workout/(?P\d+)/histo$',views.workout_histo_view), url(r'^workout/(?P\d+)/task$',views.workout_test_task_view), url(r'^workout/(?P\d+)/forcecurve$',views.workout_forcecurve_view), url(r'^workout/(?P\d+)/unsubscribe$',views.workout_unsubscribe_view), - url(r'^workout/(?P\d+)/export/c/(?P\w+.*)/s/(?P\w+.*)$',views.workout_export_view), - url(r'^workout/(?P\d+)/export/c/(?P\w+.*)$',views.workout_export_view), - url(r'^workout/(?P\d+)/export/s/(?P\w+.*)$',views.workout_export_view), url(r'^workout/(?P\d+)/export$',views.workout_export_view), url(r'^workout/(?P\d+)/comment$',views.workout_comment_view), - url(r'^workout/(\d+)/emailtcx$',views.workout_tcxemail_view), - url(r'^workout/(\d+)/emailcsv$',views.workout_csvemail_view), - url(r'^workout/compare/(\d+)/$',views.workout_comparison_list), + url(r'^workout/(?P\d+)/emailtcx$',views.workout_tcxemail_view), + url(r'^workout/(?P\d+)/emailcsv$',views.workout_csvemail_view), + url(r'^workout/compare/(?P\d+)/$',views.workout_comparison_list), url(r'^workout/compare2/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P\w+.*)/$',views.workout_comparison_view), url(r'^workout/compare/(?P\d+)/(?P\d+-\d+-\d+)/(?P\w+.*)$',views.workout_comparison_list), - url(r'^workout/(?P\d+)/export/c/(?P\w+.*)/s/(?P\w+.*)$',views.workout_edit_view), - url(r'^workout/(?P\d+)/edit/c/(?P.+.*)$',views.workout_edit_view), - url(r'^workout/(?P\d+)/edit/s/(?P.+.*)$',views.workout_edit_view), url(r'^workout/(?P\d+)/edit$',views.workout_edit_view), url(r'^workout/(?P\d+)/setprivate$',views.workout_setprivate_view), url(r'^workout/(?P\d+)/makepublic$',views.workout_makepublic_view), - url(r'^workout/(?P\d+)/advanced/c/(?P.+.*)$',views.workout_advanced_view), - url(r'^workout/(?P\d+)/advanced/s/(?P.+.*)$',views.workout_advanced_view), url(r'^workout/(?P\d+)/geeky$',views.workout_geeky_view), - url(r'^workout/(\d+)/advanced$',views.workout_advanced_view), - url(r'^workout/(\d+)/stats$',views.workout_stats_view), - url(r'^workout/(\d+)/otwsetpower$',views.workout_otwsetpower_view), - url(r'^workout/(\d+)/interactiveotwplot$',views.workout_otwpowerplot_view), - url(r'^workout/(\d+)/wind$',views.workout_wind_view), - url(r'^workout/(?P\d+)/wind/c/(?P\w+.*)$',views.workout_wind_view), - url(r'^workout/(?P\d+)/wind/s/(?P\w+.*)$',views.workout_wind_view), + url(r'^workout/(?P\d+)/advanced$',views.workout_advanced_view), + url(r'^workout/(?P\d+)/stats$',views.workout_stats_view), + url(r'^workout/(?P\d+)/otwsetpower$',views.workout_otwsetpower_view), + url(r'^workout/(?P\d+)/interactiveotwplot$',views.workout_otwpowerplot_view), + url(r'^workout/(?P\d+)/wind$',views.workout_wind_view), url(r'^workout/(?P\d+)/darkskywind$',views.workout_downloadwind_view), url(r'^workout/(?P\d+)/metar/(?P\w+)$',views.workout_downloadmetar_view), - url(r'^workout/(\d+)/stream$',views.workout_stream_view), - url(r'^workout/(?P\d+)/stream/c/(?P\w+.*)$',views.workout_stream_view), - url(r'^workout/(\d+)/crewnerdsummary$',views.workout_crewnerd_summary_view), - url(r'^workout/(?P\d+)/editintervals/(?P\w+.*)$',views.workout_summary_edit_view), - url(r'^workout/(\d+)/editintervals$',views.workout_summary_edit_view), - url(r'^workout/(\d+)/restore$',views.workout_summary_restore_view), - url(r'^workout/(\d+)/interactiveplot$',views.workout_biginteractive_view), - url(r'^workout/(\d+)/view$',views.workout_view), - url(r'^workout/(\d+)$',views.workout_view), + url(r'^workout/(?P\d+)/stream$',views.workout_stream_view), + url(r'^workout/(?P\d+)/crewnerdsummary$',views.workout_crewnerd_summary_view), + url(r'^workout/(?P\d+)/editintervals$',views.workout_summary_edit_view), + url(r'^workout/(?P\d+)/restore$',views.workout_summary_restore_view), + url(r'^workout/(?P\d+)/interactiveplot$',views.workout_biginteractive_view), + url(r'^workout/(?P\d+)/view$',views.workout_view), + url(r'^workout/(?P\d+)$',views.workout_view), url(r'^workout/fusion/(?P\d+)/(?P\d+)$',views.workout_fusion_view), - url(r'^workout/fusion/(\d+)/$',views.workout_fusion_list), + url(r'^workout/fusion/(?P\d+)/$',views.workout_fusion_list), url(r'^workout/fusion/(?P\d+)/(?P\d+-\d+-\d+)/(?P\w+.*)$',views.workout_fusion_list), url(r'^physics$',TemplateView.as_view(template_name='physics.html'),name='physics'), url(r'^partners$',TemplateView.as_view(template_name='partners.html'),name='partners'), - url(r'^workout/(\d+)/$',views.workout_view), - url(r'^workout/(\d+)/addtimeplot$',views.workout_add_timeplot_view), - url(r'^workout/(\d+)/addpiechart$',views.workout_add_piechart_view), - url(r'^workout/(\d+)/addpowerpiechart$',views.workout_add_power_piechart_view), - url(r'^workout/(\d+)/adddistanceplot$',views.workout_add_distanceplot_view), - url(r'^workout/(\d+)/adddistanceplot2$',views.workout_add_distanceplot2_view), - url(r'^workout/(\d+)/addotwpowerplot$',views.workout_add_otw_powerplot_view), - url(r'^workout/(\d+)/addtimeplot2$',views.workout_add_timeplot2_view), - url(r'^workout/(\d+)/delete$',views.workout_delete_view), - url(r'^workout/(\d+)/smoothenpace$',views.workout_smoothenpace_view), - url(r'^workout/(\d+)/undosmoothenpace$',views.workout_undo_smoothenpace_view), - url(r'^workout/c2import/c/(?P\w+.*)$',views.workout_c2import_view), + url(r'^workout/(?P\d+)/$',views.workout_view), + url(r'^workout/(?P\d+)/addtimeplot$',views.workout_add_timeplot_view), + url(r'^workout/(?P\d+)/addpiechart$',views.workout_add_piechart_view), + url(r'^workout/(?P\d+)/addpowerpiechart$',views.workout_add_power_piechart_view), + url(r'^workout/(?P\d+)/adddistanceplot$',views.workout_add_distanceplot_view), + url(r'^workout/(?P\d+)/adddistanceplot2$',views.workout_add_distanceplot2_view), + url(r'^workout/(?P\d+)/addotwpowerplot$',views.workout_add_otw_powerplot_view), + url(r'^workout/(?P\d+)/addtimeplot2$',views.workout_add_timeplot2_view), + url(r'^workout/(?P\d+)/delete$',views.workout_delete_view), + url(r'^workout/(?P\d+)/smoothenpace$',views.workout_smoothenpace_view), + url(r'^workout/(?P\d+)/undosmoothenpace$',views.workout_undo_smoothenpace_view), url(r'^workout/c2import/$',views.workout_c2import_view), url(r'^workout/stravaimport/$',views.workout_stravaimport_view), - url(r'^workout/c2import/(\d+)/$',views.workout_getc2workout_view), - url(r'^workout/stravaimport/(\d+)/$',views.workout_getstravaworkout_view), + url(r'^workout/c2import/(?P\d+)/$',views.workout_getc2workout_view), + url(r'^workout/stravaimport/(?P\d+)/$',views.workout_getstravaworkout_view), url(r'^workout/sporttracksimport/$',views.workout_sporttracksimport_view), - url(r'^workout/sporttracksimport/(\d+)/$',views.workout_getsporttracksworkout_view), + url(r'^workout/sporttracksimport/(?P\d+)/$',views.workout_getsporttracksworkout_view), url(r'^workout/runkeeperimport/$',views.workout_runkeeperimport_view), - url(r'^workout/runkeeperimport/(\d+)/$',views.workout_getrunkeeperworkout_view), + url(r'^workout/runkeeperimport/(?P\d+)/$',views.workout_getrunkeeperworkout_view), url(r'^workout/underarmourimport/$',views.workout_underarmourimport_view), - url(r'^workout/underarmourimport/(\d+)/$',views.workout_getunderarmourworkout_view), - url(r'^workout/(\d+)/deleteconfirm$',views.workout_delete_confirm_view), - url(r'^workout/(\d+)/c2uploadw/$',views.workout_c2_upload_view), - url(r'^workout/(\d+)/stravauploadw/$',views.workout_strava_upload_view), - url(r'^workout/(\d+)/recalcsummary/$',views.workout_recalcsummary_view), - url(r'^workout/(\d+)/sporttracksuploadw/$',views.workout_sporttracks_upload_view), - url(r'^workout/(\d+)/runkeeperuploadw/$',views.workout_runkeeper_upload_view), - url(r'^workout/(\d+)/underarmouruploadw/$',views.workout_underarmour_upload_view), - url(r'^workout/(\d+)/tpuploadw/$',views.workout_tp_upload_view), + url(r'^workout/underarmourimport/(?P\d+)/$',views.workout_getunderarmourworkout_view), + url(r'^workout/(?P\d+)/deleteconfirm$',views.workout_delete_confirm_view), + url(r'^workout/(?P\d+)/c2uploadw/$',views.workout_c2_upload_view), + url(r'^workout/(?P\d+)/stravauploadw/$',views.workout_strava_upload_view), + url(r'^workout/(?P\d+)/recalcsummary/$',views.workout_recalcsummary_view), + url(r'^workout/(?P\d+)/sporttracksuploadw/$',views.workout_sporttracks_upload_view), + url(r'^workout/(?P\d+)/runkeeperuploadw/$',views.workout_runkeeper_upload_view), + url(r'^workout/(?P\d+)/underarmouruploadw/$',views.workout_underarmour_upload_view), + url(r'^workout/(?P\d+)/tpuploadw/$',views.workout_tp_upload_view), url(r'^multi-compare$',views.multi_compare_view), - url(r'^me/teams/c/(?P\w+.*)/s/(?P\w+.*)$',views.rower_teams_view), - url(r'^me/teams/s/(?P\w+.*)$',views.rower_teams_view), - url(r'^me/teams/c/(?P\w+.*)$',views.rower_teams_view), - url(r'^team/(?P\d+)/s/(?P\w+.*)/c/(?P\w+.*)$',views.team_view), url(r'^me/teams/$',views.rower_teams_view), - url(r'^team/(?P\d+)/c/(?P\w+.*)$',views.team_view), - url(r'^team/(?P\d+)/s/(?P\w+.*)$',views.team_view), - url(r'^team/(\d+)/$',views.team_view), - url(r'^team/(\d+)/edit$',views.team_edit_view), - url(r'^team/(\d+)/leaveconfirm/$',views.team_leaveconfirm_view), - url(r'^team/(\d+)/leave/$',views.team_leave_view), - url(r'^team/(\d+)/deleteconfirm/$',views.team_deleteconfirm_view), - url(r'^team/(\d+)/requestmembership/(\d+)$',views.team_requestmembership_view), - url(r'^team/(\d+)/delete/$',views.team_delete_view), + url(r'^team/(?P\d+)/$',views.team_view), + url(r'^team/(?P\d+)/edit$',views.team_edit_view), + url(r'^team/(?P\d+)/leaveconfirm/$',views.team_leaveconfirm_view), + url(r'^team/(?P\d+)/leave/$',views.team_leave_view), + url(r'^team/(?P\d+)/deleteconfirm/$',views.team_deleteconfirm_view), + url(r'^team/(?P\d+)/requestmembership/(?P\d+)$',views.team_requestmembership_view), + url(r'^team/(?P\d+)/delete/$',views.team_delete_view), url(r'^team/create/$',views.team_create_view), - url(r'^me/team/(\d+)/drop/(\d+)$',views.manager_member_drop_view), - url(r'^me/invitation/(\d+)/reject$',views.invitation_reject_view), - url(r'^me/invitation/(\d+)/revoke$',views.invitation_revoke_view), + url(r'^me/team/(?P\d+)/drop/(?P\d+)$',views.manager_member_drop_view), + url(r'^me/invitation/(?P\d+)/reject$',views.invitation_reject_view), + url(r'^me/invitation/(?P\d+)/revoke$',views.invitation_revoke_view), url(r'^me/invitation/$',views.rower_invitations_view), url(r'^me/invitation/(\w+.*)/$',views.rower_invitations_view), - url(r'^me/request/c/(?P\w+.*)/$',views.manager_requests_view), - url(r'^me/request/(\d+)/revoke',views.request_revoke_view), - url(r'^me/request/(\d+)/reject',views.request_reject_view), + url(r'^me/request/(?P\d+)/revoke',views.request_revoke_view), + url(r'^me/request/(?P\d+)/reject',views.request_reject_view), url(r'^me/request/(\w+.*)/$',views.manager_requests_view), url(r'^me/request/$',views.manager_requests_view), - url(r'^me/edit/c/(?P\w+.*)$',views.rower_edit_view), - url(r'^me/edit/s/(?P\w+.*)$',views.rower_edit_view), url(r'^me/edit/$',views.rower_edit_view), url(r'^me/edit/(.+.*)/$',views.rower_edit_view), url(r'^me/c2authorize/$',views.rower_c2_authorize), - url(r'^me/revokeapp/(\d+)$',views.rower_revokeapp_view), + url(r'^me/revokeapp/(?P\d+)$',views.rower_revokeapp_view), url(r'^me/stravaauthorize/$',views.rower_strava_authorize), url(r'^me/sporttracksauthorize/$',views.rower_sporttracks_authorize), url(r'^me/underarmourauthorize/$',views.rower_underarmour_authorize), @@ -304,7 +271,7 @@ urlpatterns = [ url(r'^workout/compare/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P\w+.*)/(?P\w+.*)$',views.workout_comparison_view2), url(r'^workout/compare/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P\w+.*)/$',views.workout_comparison_view2), url(r'^test\_callback',views.rower_process_testcallback), - url(r'^workout/(\d+)/test\_strokedata$',views.strokedataform), + url(r'^workout/(?P\d+)/test\_strokedata$',views.strokedataform), ] if settings.DEBUG: diff --git a/rowers/views.py b/rowers/views.py index 950491c1..cad0bbd4 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -76,6 +76,10 @@ from rowsandall_app.settings import ( TP_CLIENT_ID,TP_REDIRECT_URI,TP_CLIENT_KEY,TP_CLIENT_SECRET, ) +from rowers.tasks_standalone import addcomment2 +from django.contrib import messages +from async_messages import messages as a_messages + import requests import json from rest_framework.renderers import JSONRenderer @@ -1053,10 +1057,10 @@ def workout_tcxemail_view(request,id=0): tcxfile = stravastuff.createstravaworkoutdata(w) if tcxfile == 0: message = "Something went wrong (TCX export)" + messages.error(request,message) url = reverse(workout_export_view, kwargs = { 'id':str(w.id), - 'message':message, }) return HttpResponseRedirect(url) if settings.DEBUG and tcxfile: @@ -1070,10 +1074,10 @@ def workout_tcxemail_view(request,id=0): r.user.email,tcxfile) successmessage = "The TCX file was sent to you per email" + messages.info(request,successmessage) url = reverse(workout_export_view, kwargs = { 'id':str(w.id), - 'successmessage':successmessage, }) except: successmessage = "" @@ -1083,20 +1087,20 @@ def workout_tcxemail_view(request,id=0): timestr = strftime("%Y%m%d-%H%M%S") errorlog.write(timestr+errorstring+"\r\n") + messages.error(request,message) url = reverse(workout_export_view, kwargs = { 'id':str(w.id), - 'message':message, }) response = HttpResponseRedirect(url) else: message = "You are not allowed to export this workout" + messages.error(request,message) url = reverse(workout_export_view, kwargs = { 'id':str(w.id), - 'message':message, }) response = HttpResponseRedirect(url) @@ -1124,19 +1128,19 @@ def workout_csvemail_view(request,id=0): r.user.email,csvfile) successmessage = "The CSV file was sent to you per email" + messages.info(request,successmessage) url = reverse(workout_export_view, kwargs = { 'id':str(w.id), - 'successmessage':successmessage, }) response = HttpResponseRedirect(url) else: message = "You are not allowed to export this workout" + messages.error(request,message) url = reverse(workout_export_view, kwargs = { 'id':str(w.id), - 'message':message, }) response = HttpResponseRedirect(url) @@ -1172,38 +1176,29 @@ def workout_tp_upload_view(request,id=0): os.remove(tcxfile) except WindowsError: pass - url = reverse(workout_export_view, - kwargs = { - 'id':str(w.id), - 'message':message, - }) + + messages.error(request,message) else: # res != 0 w.uploadedtotp = res w.save() os.remove(tcxfile) - url = reverse(workout_export_view, - kwargs = { - 'id':str(w.id), - 'successmessage':'Uploaded to TP', - }) + messages.info(request,'Uploaded to TrainingPeaks') else: # no tcxfile message = "Upload to TrainingPeaks failed" w.uploadedtotp = -1 w.save() - url = reverse(workout_export_view, - kwargs = { - 'id':str(w.id), - 'message':message, - }) + messages.error(request,message) + else: # not allowed to upload message = "You are not allowed to export this workout to TP" - url = reverse(workout_export_view, - kwargs = { - 'id':str(w.id), - 'message':message, - }) + messages.error(request,message) + + url = reverse(workout_export_view, + kwargs = { + 'id':str(w.id), + }) return HttpResponseRedirect(url) @@ -1234,7 +1229,7 @@ def workout_strava_upload_view(request,id=0): r.stravatoken, description=w.notes+'\n from '+w.workoutsource+' via rowsandall.com') if res==0: - message = mes + messages.error(request,mes) w.uploadedtostrava = -1 w.save() try: @@ -1253,7 +1248,8 @@ def workout_strava_upload_view(request,id=0): w.save() os.remove(tcxfile) url = "/rowers/workout/"+str(w.id)+"/edit" - successmessage = mes + + messages.info(request,mes) except: with open("media/stravaerrors.log","a") as errorlog: errorstring = str(sys.exc_info()[0]) @@ -1261,8 +1257,10 @@ def workout_strava_upload_view(request,id=0): errorlog.write(timestr+errorstring+"\r\n") errorlog.write("views.py line 826\r\n") message = 'Error: '+errorstring + messages.error(request,message) else: message = "Strava Upload error" + messages.error(request,message) w.uploadedtostrava = -1 w.save() url = reverse(workout_export_view, @@ -1280,6 +1278,7 @@ def workout_strava_upload_view(request,id=0): response = HttpResponseRedirect(url) except ActivityUploadFailed as e: message = "Strava Upload error: %s" % e + messages.error(request,message) w.uploadedtostrava = -1 w.save() os.remove(tcxfile) @@ -1288,16 +1287,6 @@ def workout_strava_upload_view(request,id=0): 'id':str(w.id), }) response = HttpResponseRedirect(url) - # except TimeoutExceeded as e: - # w.uploadedtostrava = -1 - # w.save() - # url = reverse(workout_export_view, - # kwargs = { - # 'id':str(w.id), - # 'message':'Strava Upload attempted. No response within 10 seconds. You may be OK. Check on Strava', - # }) - # response = HttpResponseRedirect(url) - return response @@ -1318,16 +1307,13 @@ def workout_c2_upload_view(request,id=0): return HttpResponseRedirect("/rowers/me/c2authorize/") if message: - url = reverse(workout_export_view, - kwargs = { - 'message':str(message), - 'id':str(w.id), - }) - else: - url = reverse(workout_export_view, - kwargs = { - 'id':str(w.id), - }) + messages.error(request,message) + + + url = reverse(workout_export_view, + kwargs = { + 'id':str(w.id), + }) return HttpResponseRedirect(url) @@ -1352,9 +1338,9 @@ def workout_runkeeper_upload_view(request,id=0): data = runkeeperstuff.createrunkeeperworkoutdata(w) if not data: message = "Data error" + messages.error(request,message) url = reverse(workout_export_view, kwargs = { - 'message':str(message), 'id':str(w.id), }) return HttpResponseRedirect(url) @@ -1371,6 +1357,7 @@ def workout_runkeeper_upload_view(request,id=0): # check for duplicate error first if (response.status_code == 409 ): message = "Duplicate error" + messages.error(request,message) w.uploadedtorunkeeper = -1 w.save() elif (response.status_code == 201 or response.status_code==200): @@ -1382,13 +1369,14 @@ def workout_runkeeper_upload_view(request,id=0): else: s = response message = "Something went wrong in workout_runkeeper_upload_view: %s - %s" % (s.reason,s.text) + messages.error(request,message) else: message = "You are not authorized to upload this workout" + messages.error(request,message) url = reverse(workout_export_view, kwargs = { - 'message':str(message), 'id':str(w.id), }) @@ -1416,9 +1404,9 @@ def workout_underarmour_upload_view(request,id=0): # return HttpResponse(json.dumps(data)) if not data: message = "Data error" + messages.error(request,message) url = reverse(workout_export_view, kwargs = { - 'message':str(message), 'id':str(w.id), }) return HttpResponseRedirect(url) @@ -1436,6 +1424,7 @@ def workout_underarmour_upload_view(request,id=0): # check for duplicate error first if (response.status_code == 409 ): message = "Duplicate error" + messages.error(request,message) w.uploadedtounderarmour = -1 w.save() elif (response.status_code == 201 or response.status_code==200): @@ -1447,13 +1436,13 @@ def workout_underarmour_upload_view(request,id=0): else: s = response message = "Something went wrong in workout_underarmour_upload_view: %s - %s" % (s.reason,s.text) - + messages.error(request,message) else: message = "You are not authorized to upload this workout" - + messages.error(request,message) + url = reverse(workout_export_view, kwargs = { - 'message':str(message), 'id':str(w.id), }) @@ -1480,9 +1469,9 @@ def workout_sporttracks_upload_view(request,id=0): data = sporttracksstuff.createsporttracksworkoutdata(w) if not data: message = "Data error" + messages.error(request,message) url = reverse(workout_export_view, kwargs = { - 'message':str(message), 'id':str(w.id), }) return HttpResponseRedirect(url) @@ -1498,6 +1487,7 @@ def workout_sporttracks_upload_view(request,id=0): # check for duplicate error first if (response.status_code == 409 ): message = "Duplicate error" + messages.error(request,message) w.uploadedtosporttracks = -1 w.save() elif (response.status_code == 201 or response.status_code==200): @@ -1510,13 +1500,13 @@ def workout_sporttracks_upload_view(request,id=0): else: s = response message = "Something went wrong in workout_sporttracks_upload_view: %s" % s.reason - + messages.error(request,message) else: message = "You are not authorized to upload this workout" - + messages.error(request,message) + url = reverse(workout_export_view, kwargs = { - 'message':str(message), 'id':str(w.id), }) @@ -1642,12 +1632,12 @@ def rower_c2_token_refresh(request): r.save() successmessage = "Tokens refreshed. Good to go" - message = "" + messages.info(request,successmessage) else: - successmessage = "" message = "Something went wrong (refreshing tokens). Please reauthorize:" + messages.error(request,successmessage) - return imports_view(request,successmessage=successmessage,message=message) + return imports_view(request) # Underarmour token refresh. URL for manual refresh. Not visible to users @login_required() @@ -1670,7 +1660,8 @@ def rower_underarmour_token_refresh(request): r.save() successmessage = "Tokens refreshed. Good to go" - return imports_view(request,successmessage=successmessage) + messages.info(request,successmessage) + return imports_view(request) # TrainingPeaks token refresh. URL for manual refresh. Not visible to users @@ -1693,7 +1684,8 @@ def rower_tp_token_refresh(request): r.save() successmessage = "Tokens refreshed. Good to go" - return imports_view(request,successmessage=successmessage) + messages.info(request,successmessage) + return imports_view(request) # SportTracks token refresh. URL for manual refresh. Not visible to users @@ -1716,7 +1708,8 @@ def rower_sporttracks_token_refresh(request): r.save() successmessage = "Tokens refreshed. Good to go" - return imports_view(request,successmessage=successmessage) + messages.info(request,successmessage) + return imports_view(request) # Concept2 Callback @@ -1727,13 +1720,15 @@ def rower_process_callback(request): res = c2stuff.get_token(code) except MultiValueDictKeyError: message = "The resource owner or authorization server denied the request" - return imports_view(request,message=message) + messages.error(request,message) + return imports_view(request) access_token = res[0] if access_token == 0: message = res[1] message += ' Contact info@rowsandall.com if this behavior persists.' - return imports_view(request,message=message) + messages.error(request,message) + return imports_view(request) expires_in = res[1] refresh_token = res[2] @@ -1747,23 +1742,25 @@ def rower_process_callback(request): r.save() successmessage = "Tokens stored. Good to go" - return imports_view(request,successmessage=successmessage) + messages.info(request,successmessage) + return imports_view(request) # The imports page @login_required() def imports_view(request,successmessage="",message=""): + messages.info(request,successmessage) + messages.error(request,message) return render(request,"imports.html", - {'successmessage': successmessage, - 'message': message, - 'teams':get_my_teams(request.user), + { + 'teams':get_my_teams(request.user), }) # Just for testing purposes @login_required() def test_reverse_view(request): successmessage = "Tokens stored. Good to go" - - return imports_view(request,successmessage=successmessage) + messages.info(request,successmessage) + return imports_view(request) # dummy @login_required() @@ -1781,7 +1778,8 @@ def rower_process_stravacallback(request): except MultiValueDictKeyError: message = "access error" - return imports_view(request,message=message) + messages.error(reqeust,message) + return imports_view(request) res = stravastuff.get_token(code) @@ -1794,10 +1792,12 @@ def rower_process_stravacallback(request): r.save() successmessage = "Tokens stored. Good to go" - return imports_view(request,successmessage=successmessage) + messages.info(request,successmessage) + return imports_view(request) else: message = "Something went wrong with the Strava authorization" - return imports_view(request,message=message) + messages.error(request,message) + return imports_view(request) # Process Runkeeper callback @login_required() @@ -1811,7 +1811,8 @@ def rower_process_runkeepercallback(request): r.save() successmessage = "Tokens stored. Good to go" - return imports_view(request,successmessage=successmessage) + messages.info(request,successmessage) + return imports_view(request) # Process SportTracks callback @login_required() @@ -1833,7 +1834,8 @@ def rower_process_sporttrackscallback(request): r.save() successmessage = "Tokens stored. Good to go" - return imports_view(request,successmessage=successmessage) + messages.info(request,successmessage) + return imports_view(request) # Process Underarmour callback @login_required() @@ -1855,7 +1857,8 @@ def rower_process_underarmourcallback(request): r.save() successmessage = "Tokens stored. Good to go" - return imports_view(request,successmessage=successmessage) + messages.info(request,successmessage) + return imports_view(request) # Process TrainingPeaks callback @login_required() @@ -1877,7 +1880,8 @@ def rower_process_tpcallback(request): r.save() successmessage = "Tokens stored. Good to go" - return imports_view(request,successmessage=successmessage) + messages.info(request,successmessage) + return imports_view(request) # Process Own API callback - for API testing purposes @login_required() @@ -2176,15 +2180,12 @@ def workout_forcecurve_view(request,id=0,workstrokesonly=False): 'the_div':div, 'js_res': js_resources, 'css_res':css_resources, - 'id':id, + 'id':int(id), 'mayedit':mayedit, 'workstrokesonly': not workstrokesonly, 'teams':get_my_teams(request.user), }) -from rowers.tasks_standalone import addcomment2 -#from django.contrib import messages -from async_messages import messages # Test asynchronous tasking and messaging @login_required() def workout_test_task_view(request,id=0): @@ -2198,7 +2199,7 @@ def workout_test_task_view(request,id=0): url = reverse(workout_edit_view, kwargs = { - 'id':str(id), + 'id':int(id), }) return HttpResponseRedirect(url) @@ -2231,7 +2232,7 @@ def workout_histo_view(request,id=0): 'histo_single.html', {'interactiveplot':script, 'the_div':div, - 'id':id, + 'id':int(id), 'mayedit':mayedit, 'teams':get_my_teams(request.user), }) @@ -2632,7 +2633,7 @@ def rankings_view(request,theuser=0, cpredictions.append(a) - + messages.error(request,message) return render(request, 'rankings.html', {'rankingworkouts':theworkouts, 'interactiveplot':script, @@ -2645,7 +2646,6 @@ def rankings_view(request,theuser=0, 'deltaform':deltaform, 'id': theuser, 'theuser':uu, - 'message':message, 'startdate':startdate, 'enddate':enddate, 'teams':get_my_teams(request.user), @@ -2661,7 +2661,8 @@ def workout_recalcsummary_view(request,id=0): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) @@ -2671,17 +2672,17 @@ def workout_recalcsummary_view(request,id=0): row.summary = rowdata.allstats() row.save() successmessage = "Summary Updated" + messages.info(request,successmessage) url = reverse(workout_edit_view, kwargs = { - 'id':str(id), - 'successmessage':str(successmessage), + 'id':int(id), }) else: message = "Something went wrong. Could not update summary" + messages.error(request,message) url = reverse(workout_edit_view, kwargs = { - 'id':str(id), - 'message':str(message), + 'id':int(id), }) return HttpResponseRedirect(url) @@ -2697,7 +2698,8 @@ def workout_makepublic_view(request,id, if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) @@ -2711,11 +2713,11 @@ def workout_makepublic_view(request,id, message = "Workout set to public. Your followers and team members will see it" - + messages.info(request,message) + url = reverse(workout_edit_view, kwargs = { - 'id':str(id), - 'successmessage':str(message), + 'id':int(id), }) return HttpResponseRedirect(url) @@ -2730,7 +2732,8 @@ def workout_setprivate_view(request,id, if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) @@ -2741,11 +2744,11 @@ def workout_setprivate_view(request,id, row.team.remove(team) message = "Workout set to private. Only you will see it" - + messages.info(request,message) + url = reverse(workout_edit_view, kwargs = { - 'id':str(id), - 'successmessage':str(message), + 'id':int(id), }) return HttpResponseRedirect(url) @@ -2825,11 +2828,12 @@ def team_comparison_select(request, form.fields["workouts"].queryset = workouts chartform = ChartParamChoiceForm(initial={'teamid':theteam.id}) + + messages.info(request,successmessage) + messages.error(request,message) return render(request, 'team_compare_select.html', {'workouts': workouts, - 'message': message, - 'successmessage':successmessage, 'dateform':dateform, 'startdate':startdate, 'enddate':enddate, @@ -3005,10 +3009,11 @@ def workouts_view(request,message='',successmessage='', "-id" ) + messages.info(request,successmessage) + messages.error(request,message) + return render(request, 'list_workouts.html', {'workouts': workouts, - 'message': message, - 'successmessage':successmessage, 'dateform':dateform, 'startdate':startdate, 'enddate':enddate, @@ -3081,15 +3086,15 @@ def workout_comparison_list(request,id=0,message='',successmessage='', except Workout.DoesNotExist: raise Http404("Workout doesn't exist") + messages.error(request,message) + messages.info(request,successmessage) return render(request, 'comparison_list.html', - {'id':id, + {'id':int(id), 'workout':row, 'workouts': workouts, 'last_name':u.last_name, 'first_name':u.first_name, - 'message': message, - 'successmessage':successmessage, 'dateform':dateform, 'startdate':startdate, 'enddate':enddate, @@ -3161,15 +3166,16 @@ def workout_fusion_list(request,id=0,message='',successmessage='', except Workout.DoesNotExist: raise Http404("Workout doesn't exist") - + + messages.info(request,successmessage) + messages.error(request,message) + return render(request, 'fusion_list.html', - {'id':id, + {'id':int(id), 'workout':row, 'workouts': workouts, 'last_name':u.last_name, 'first_name':u.first_name, - 'message': message, - 'successmessage':successmessage, 'dateform':dateform, 'startdate':startdate, 'enddate':enddate, @@ -3232,7 +3238,8 @@ def workout_undo_smoothenpace_view(request,id=0,message="",successmessage=""): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) @@ -3263,7 +3270,8 @@ def workout_smoothenpace_view(request,id=0,message="",successmessage=""): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) @@ -3313,20 +3321,23 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""): row.save() os.remove(fname) successmessage = "CrewNerd summary added" + messages.info(request,successmessage) url = reverse(workout_edit_view, kwargs = { - 'id':str(id), - 'successmessage':str(successmessage), + 'id':int(id), }) return HttpResponseRedirect(url) except: - os.remove(fname) - message = "Something went wrong (workout_crewnerd_summary_view)" + try: + os.remove(fname) + except: + pass + message = "Something went wrong (workout_crewnerd_summary_view)" + messages.error(request,message) url = reverse(workout_edit_view, kwargs = { - 'id':str(id), - 'message':str(message), + 'id':int(id), }) return HttpResponseRedirect(url) else: @@ -3357,7 +3368,8 @@ def workout_downloadwind_view(request,id=0, f1 = row.csvfilename if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) @@ -3390,16 +3402,20 @@ def workout_downloadwind_view(request,id=0, row.save() rowdata.add_wind(windspeed,windbearing) rowdata.write_csv(f1,gzip=True) - - kwargs = {'successmessage':str(message), - 'id':str(id)} + + messages.info(request,message) + + kwargs = { + 'id':int(id)} url = reverse(workout_wind_view,kwargs=kwargs) response = HttpResponseRedirect(url) except KeyError: message = "No latitude/longitude data" - kwargs = {'message':str(message), - 'id':str(id)} + messages.error(request,message) + kwargs = { + 'id':int(id) + } url = reverse(workout_wind_view,kwargs=kwargs) response = HttpResponseRedirect(url) @@ -3420,7 +3436,8 @@ def workout_downloadmetar_view(request,id=0, f1 = row.csvfilename if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) @@ -3454,16 +3471,19 @@ def workout_downloadmetar_view(request,id=0, row.save() rowdata.add_wind(windspeed,windbearing) rowdata.write_csv(f1,gzip=True) - - kwargs = {'successmessage':str(message), - 'id':str(id)} + messages.info(request,message) + + kwargs = { + 'id':int(id)} url = reverse(workout_wind_view,kwargs=kwargs) response = HttpResponseRedirect(url) except KeyError: message = "No latitude/longitude data" - kwargs = {'message':str(message), - 'id':str(id)} + messages.error(request,message) + kwargs = { + 'id':int(id) + } url = reverse(workout_wind_view,kwargs=kwargs) response = HttpResponseRedirect(url) @@ -3482,7 +3502,8 @@ def workout_wind_view(request,id=0,message="",successmessage=""): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) @@ -3550,8 +3571,10 @@ def workout_wind_view(request,id=0,message="",successmessage=""): else: message = "Invalid Form" - kwargs = {'message':str(message), - 'id':str(id)} + messages.error(request,message) + kwargs = { + 'id':int(id) + } url = reverse(workout_wind_view,kwargs=kwargs) response = HttpResponseRedirect(url) @@ -3573,11 +3596,13 @@ def workout_wind_view(request,id=0,message="",successmessage=""): gmscript = "" gmdiv = "No GPS data available" + + messages.info(request,successmessage) + messages.error(request,message) + return render(request, 'windedit.html', {'workout':row, - 'message': message, - 'successmessage': successmessage, 'teams':get_my_teams(request.user), 'interactiveplot':script, 'form':form, @@ -3598,7 +3623,8 @@ def workout_stream_view(request,id=0,message="",successmessage=""): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) @@ -3632,8 +3658,9 @@ def workout_stream_view(request,id=0,message="",successmessage=""): else: message = "Invalid Form" - kwargs = {'message':str(message), - 'id':str(id)} + messages.error(request,message) + kwargs = { + 'id':int(id)} url = reverse(workout_wind_view,kwargs=kwargs) response = HttpResponseRedirect(url) @@ -3645,12 +3672,12 @@ def workout_stream_view(request,id=0,message="",successmessage=""): script = res[0] div = res[1] + messages.info(request,successmessage) + messages.error(request,message) return render(request, 'streamedit.html', {'workout':row, - 'message': message, 'teams':get_my_teams(request.user), - 'successmessage': successmessage, 'interactiveplot':script, 'form':form, 'the_div':div}) @@ -3665,7 +3692,8 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) @@ -3720,8 +3748,9 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): successmessage = "Your calculations have been submitted. You will receive an email when they are done." - kwargs = {'successmessage':str(successmessage), - 'id':str(id)} + messages.info(request,successmessage) + kwargs = { + 'id':int(id)} url = reverse(workout_advanced_view,kwargs=kwargs) response = HttpResponseRedirect(url) @@ -3729,20 +3758,21 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): else: message = "Invalid Form" - kwargs = {'message':str(message), - 'id':str(id)} + messages.error(request,message) + kwargs = { + 'id':int(id)} url = reverse(workout_otwsetpower_view,kwargs=kwargs) response = HttpResponseRedirect(url) else: form = AdvancedWorkoutForm(instance=row) + messages.error(request,message) + messages.info(request,successmessage) return render(request, 'otwsetpower.html', {'workout':row, 'teams':get_my_teams(request.user), - 'message': message, - 'successmessage': successmessage, 'form':form, }) @@ -3760,7 +3790,8 @@ def workout_geeky_view(request,id=0,message="",successmessage=""): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) @@ -3777,14 +3808,15 @@ def workout_geeky_view(request,id=0,message="",successmessage=""): div = res[1] except ValueError: pass - + + messages.error(request,message) + messages.info(request,successmessage) + if row.workouttype=='water': return render(request, 'otwgeeky.html', {'workout':row, 'teams':get_my_teams(request.user), - 'message': message, - 'successmessage': successmessage, 'interactiveplot':script, 'the_div':div}) else: @@ -3792,8 +3824,6 @@ def workout_geeky_view(request,id=0,message="",successmessage=""): 'advancededit.html', {'workout':row, 'teams':get_my_teams(request.user), - 'message': message, - 'successmessage': successmessage, 'interactiveplot':script, 'the_div':div}) @@ -4011,7 +4041,8 @@ def workout_stats_view(request,id=0,message="",successmessage=""): datadf,row = dataprep.getrowdata_db(id=id) if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to see the stats of this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) datadf = dataprep.clean_df_stats(datadf,workstrokesonly=workstrokesonly) @@ -4081,7 +4112,8 @@ def workout_advanced_view(request,id=0,message="",successmessage=""): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) @@ -4098,14 +4130,16 @@ def workout_advanced_view(request,id=0,message="",successmessage=""): div = res[1] except ValueError: pass - + + messages.error(request,message) + messages.info(request,successmessage) + + if row.workouttype=='water': return render(request, 'advancedotw.html', {'workout':row, 'teams':get_my_teams(request.user), - 'message': message, - 'successmessage': successmessage, 'interactiveplot':script, 'the_div':div}) else: @@ -4113,8 +4147,6 @@ def workout_advanced_view(request,id=0,message="",successmessage=""): 'advancededit.html', {'workout':row, 'teams':get_my_teams(request.user), - 'message': message, - 'successmessage': successmessage, 'interactiveplot':script, 'the_div':div}) @@ -4355,7 +4387,7 @@ def workout_flexchart3_view(request,*args,**kwargs): 'the_div':div, 'js_res': js_resources, 'css_res':css_resources, - 'id':id, + 'id':int(id), 'teams':get_my_teams(request.user), 'xparam':xparam, 'yparam1':yparam1, @@ -4387,7 +4419,7 @@ def workout_flexchart3_view(request,*args,**kwargs): 'js_res': js_resources, 'css_res':css_resources, 'teams':get_my_teams(request.user), - 'id':id, + 'id':int(id), 'xparam':xparam, 'yparam1':yparam1, 'yparam2':yparam2, @@ -4433,13 +4465,15 @@ def workout_biginteractive_view(request,id=0,message="",successmessage=""): res = interactive_bar_chart(id,promember=promember) script = res[0] div = res[1] - + + messages.error(request,message) + messages.info(request,successmessage) + + return render(request, 'biginteractive1.html', {'workout':row, 'teams':get_my_teams(request.user), - 'message': message, - 'successmessage': successmessage, 'interactiveplot':script, 'the_div':div, 'promember':promember, @@ -4475,13 +4509,13 @@ def workout_otwpowerplot_view(request,id=0,message="",successmessage=""): script = res[0] div = res[1] - + messages.error(request,message) + messages.info(request,successmessage) + return render(request, 'otwinteractive.html', {'workout':row, 'teams':get_my_teams(request.user), - 'message': message, - 'successmessage': successmessage, 'interactiveplot':script, 'the_div':div, 'mayedit':mayedit}) @@ -4522,20 +4556,21 @@ def workout_export_view(request,id=0, message="", successmessage=""): if (checkworkoutuser(request.user,row)==False): message = "You are not allowed to edit this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) - else: - return render(request, - 'export.html', - {'workout':row, - 'teams':get_my_teams(request.user), - 'message':message, - 'successmessage':successmessage, - 'c2userid':c2userid, - 'rkuserid':rkuserid, - }) + messages.error(request,message) + messages.info(request,successmessage) + + return render(request, + 'export.html', + {'workout':row, + 'teams':get_my_teams(request.user), + 'c2userid':c2userid, + 'rkuserid':rkuserid, + }) # @login_required() @@ -4557,14 +4592,15 @@ def workout_unsubscribe_view(request,id=0): form = WorkoutCommentForm() - message = 'You have been unsubscribed from new comment notifications for this workout' + successmessage = 'You have been unsubscribed from new comment notifications for this workout' + messages.info(request,successmessage) + return render(request, 'workout_comments.html', {'workout':w, 'teams':get_my_teams(request.user), 'comments':comments, - 'successmessage':message, 'form':form, }) @@ -4722,15 +4758,16 @@ def workout_edit_view(request,id=0,message="",successmessage=""): r.write_csv(row.csvfilename,gzip=True) dataprep.update_strokedata(id,r.df) successmessage = "Changes saved" + messages.info(request,successmessage) url = reverse(workout_edit_view, kwargs = { 'id':str(row.id), - 'successmessage':str(successmessage), }) response = HttpResponseRedirect(url) else: message = "You are not allowed to change this workout" - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) response = HttpResponseRedirect(url) @@ -4785,8 +4822,6 @@ def workout_edit_view(request,id=0,message="",successmessage=""): 'workout':row, 'teams':get_my_teams(request.user), 'graphs1':g[0:3], - 'message': message, - 'successmessage': successmessage, 'gmscript': gmscript, 'gmdiv': gmdiv, }) @@ -4798,8 +4833,6 @@ def workout_edit_view(request,id=0,message="",successmessage=""): 'workout':row, 'graphs1':g[0:3], 'graphs2':g[3:6], - 'message': message, - 'successmessage': successmessage, 'gmscript': gmscript, 'gmdiv': gmdiv, }) @@ -5214,13 +5247,11 @@ def workout_stravaimport_view(request,message=""): s = "Token doesn't exist. Need to authorize" return HttpResponseRedirect("/rowers/me/stravaauthorize/") message = "Something went wrong in workout_stravaimport_view" + messages.error(request,message) if settings.DEBUG: return HttpResponse(res) else: - url = reverse(workouts_view, - kwargs = { - 'message': str(message) - }) + url = reverse(workouts_view) return HttpResponseRedirect(url) else: data = res.json() @@ -5228,7 +5259,6 @@ def workout_stravaimport_view(request,message=""): return render(request,'strava_list_import.html', {'data':data, 'teams':get_my_teams(request.user), - 'message':message, }) return HttpResponse(res) @@ -5244,13 +5274,12 @@ def workout_runkeeperimport_view(request,message=""): s = "Token doesn't exist. Need to authorize" return HttpResponseRedirect("/rowers/me/runkeeperauthorize/") message = "Something went wrong in workout_runkeeperimport_view" + messages.error(request,message) + if settings.DEBUG: return HttpResponse(res) else: - url = reverse(workouts_view, - kwargs = { - 'message': str(message) - }) + url = reverse(workouts_view) return HttpResponseRedirect(url) else: workouts = [] @@ -5267,7 +5296,6 @@ def workout_runkeeperimport_view(request,message=""): return render(request,'runkeeper_list_import.html', {'workouts':workouts, 'teams':get_my_teams(request.user), - 'message':message, }) return HttpResponse(res) @@ -5283,13 +5311,11 @@ def workout_underarmourimport_view(request,message=""): s = "Token doesn't exist. Need to authorize" return HttpResponseRedirect("/rowers/me/underarmourauthorize/") message = "Something went wrong in workout_underarmourimport_view" + messages.error(request,message) if settings.DEBUG: return HttpResponse(res) else: - url = reverse(workouts_view, - kwargs = { - 'message': str(message) - }) + url = reverse(workouts_view) return HttpResponseRedirect(url) else: workouts = [] @@ -5318,7 +5344,6 @@ def workout_underarmourimport_view(request,message=""): return render(request,'underarmour_list_import.html', {'workouts':workouts, 'teams':get_my_teams(request.user), - 'message':message, }) return HttpResponse(res) @@ -5334,13 +5359,11 @@ def workout_sporttracksimport_view(request,message=""): s = "Token doesn't exist. Need to authorize" return HttpResponseRedirect("/rowers/me/sporttracksauthorize/") message = "Something went wrong in workout_sporttracksimport_view" + messages.error(request,message) if settings.DEBUG: return HttpResponse(res) else: - url = reverse(workouts_view, - kwargs = { - 'message': str(message) - }) + url = reverse(workouts_view) return HttpResponseRedirect(url) else: workouts = [] @@ -5358,7 +5381,6 @@ def workout_sporttracksimport_view(request,message=""): return render(request,'sporttracks_list_import.html', {'workouts':workouts, 'teams':get_my_teams(request.user), - 'message':message, }) return HttpResponse(res) @@ -5377,13 +5399,11 @@ def c2listdebug_view(request,message=""): if (res.status_code != 200): message = "Something went wrong in workout_c2import_view (C2 token renewal)" + messages.error(request,message) if settings.DEBUG: return HttpResponse(res) else: - url = reverse(workouts_view, - kwargs = { - 'message': str(message) - }) + url = reverse(workouts_view) return HttpResponseRedirect(url) else: workouts = [] @@ -5405,7 +5425,7 @@ def c2listdebug_view(request,message=""): 'c2_list_import2.html', {'workouts':workouts, 'teams':get_my_teams(request.user), - 'message':message}) + }) # List of workouts available on Concept2 logbook - for import @login_required() @@ -5419,13 +5439,11 @@ def workout_c2import_view(request,message=""): if (res.status_code != 200): message = "Something went wrong in workout_c2import_view (C2 token refresh)" + messages.error(request,message) if settings.DEBUG: return HttpResponse(res) else: - url = reverse(workouts_view, - kwargs = { - 'message': str(message) - }) + url = reverse(workouts_view) return HttpResponseRedirect(url) else: workouts = [] @@ -5447,15 +5465,15 @@ def workout_c2import_view(request,message=""): 'c2_list_import2.html', {'workouts':workouts, 'teams':get_my_teams(request.user), - 'message':message}) + }) # Import a workout from Strava @login_required() def workout_getstravaworkout_view(request,stravaid): res = stravastuff.get_strava_workout(request.user,stravaid) if not res[0]: - message = res[1] - return imports_view(request,message=message) + messages.error(res[1]) + return imports_view(request) strokedata = res[1] data = res[0] @@ -5470,16 +5488,13 @@ def workout_getstravaworkout_view(request,stravaid): w.uploadedtostrava=stravaid w.save() if message: - url = reverse(workout_edit_view, - kwargs = { - 'message':message, - 'id':id, - }) - else: - url = reverse(workout_edit_view, - kwargs = { - 'id':id, - }) + messages.error(request,message) + + + url = reverse(workout_edit_view, + kwargs = { + 'id':int(id), + }) return HttpResponseRedirect(url) @@ -5495,16 +5510,12 @@ def workout_getrunkeeperworkout_view(request,runkeeperid): thetoken = runkeeper_open(request.user) w.save() if message: - url = reverse(workout_edit_view, - kwargs = { - 'id':id, - 'message':message, - }) - else: - url = reverse(workout_edit_view, - kwargs = { - 'id':id, - }) + messages.error(request,message) + + url = reverse(workout_edit_view, + kwargs = { + 'id':int(id), + }) return HttpResponseRedirect(url) # Imports a workout from Underarmour @@ -5518,16 +5529,12 @@ def workout_getunderarmourworkout_view(request,underarmourid): w.uploadedtounderarmour=underarmourid w.save() if message: - url = reverse(workout_edit_view, - kwargs = { - 'id':id, - 'message':message, - }) - else: - url = reverse(workout_edit_view, - kwargs = { - 'id':id, - }) + messages.error(request,message) + + url = reverse(workout_edit_view, + kwargs = { + 'id':int(id), + }) return HttpResponseRedirect(url) @@ -5540,25 +5547,19 @@ def workout_getsporttracksworkout_view(request,sporttracksid): id,message = add_workout_from_stdata(request.user,sporttracksid,data) if id==0: - url = reverse(workouts_view, - kwargs = { - 'message':message, - }) + messages.error(request,message) + url = reverse(workouts_view) return HttpResponseRedirect(url) w = Workout.objects.get(id=id) w.uploadedtosporttracks=sporttracksid w.save() if message: - url = reverse(workout_edit_view, - kwargs = { - 'id':id, - 'message':message, - }) - else: - url = reverse(workout_edit_view, - kwargs = { - 'id':id, - }) + messages.error(request,message) + + url = reverse(workout_edit_view, + kwargs = { + 'id':int(id), + }) return HttpResponseRedirect(url) # Imports a workout from Concept2 @@ -5584,10 +5585,8 @@ def workout_getc2workout_view(request,c2id): res2 = c2stuff.get_c2_workout_strokes(request.user,c2id) else: message = "This workout does not have any stroke data associated with it" - url = reverse(workout_c2import_view, - kwargs={ - 'message':message, - }) + messages.error(request,message) + url = reverse(workout_c2import_view) return HttpResponseRedirect(url) # We have stroke data @@ -5630,47 +5629,34 @@ def workout_getc2workout_view(request,c2id): dataprep.update_strokedata(w.id,rowdata.df) if message: - url = reverse(workout_edit_view, - kwargs = { - 'message':message, - 'id':id, - }) - else: - url = reverse(workout_edit_view, - kwargs = { - 'id':id, - }) + messages.error(request,message) + + url = reverse(workout_edit_view, + kwargs = { + 'id':int(id), + }) return HttpResponseRedirect(url) else: # message = json.loads(s.text)['message'] message = json.loads(res2.text)['message'] - url = reverse(workout_c2import_view, - kwargs={ - 'message':message, - }) - return HttpResponseRedirect(url) + messages.error(request,message) - url = reverse(workout_c2import_view, - kwargs={ - 'message':message, - }) + url = reverse(workout_c2import_view) return HttpResponseRedirect(url) else: message = "Received error code from Concept2" + messages.error(request,message) if settings.DEBUG: return HttpResponse(res) else: - url = reverse(workout_c2import_view, - kwargs={ - 'message':message, - }) + url = reverse(workout_c2import_view) return HttpResponseRedirect(url) # This is the main view for processing uploaded files @login_required() -def workout_upload_view(request,message="", +def workout_upload_view(request, uploadoptions={ 'makeprivate':False, 'make_plot':False, @@ -5776,28 +5762,24 @@ def workout_upload_view(request,message="", title = t, notes='') if not id: - url = reverse(workout_upload_view, - args=[str(message)]) + messages.error(request,message) + url = reverse(workout_upload_view) response = HttpResponseRedirect(url) return response elif id == -1: message = 'The zip archive will be processed in the background. The files in the archive will only be uploaded without the extra actions. You will receive email when the workouts are ready.' - url = reverse(workout_upload_view, - args=[str(message)]) + messages.info(request,message) + url = reverse(workout_upload_view) response = HttpResponseRedirect(url) return response else: if message: - url = reverse(workout_edit_view, - kwargs = { - 'id':id, - 'message':message, - }) - else: - url = reverse(workout_edit_view, - kwargs = { - 'id':id, - }) + messages.error(request,message) + + url = reverse(workout_edit_view, + kwargs = { + 'id':int(id), + }) response = HttpResponseRedirect(url) w = Workout.objects.get(id=id) @@ -5854,61 +5836,89 @@ def workout_upload_view(request,message="", # upload to C2 if (upload_to_c2): try: - c2message,c2id = c2stuff.workout_c2_upload(request.user,w) + message,id = c2stuff.workout_c2_upload(request.user,w) except C2NoTokenError: - pass + id = 0 + message = "Something went wrong with the Concept2 sync" + if id>1: + messages.info(request,message) + else: + messages.error(request,message) + if (upload_to_strava): try: - stravamessage,stravaid = stravastuff.workout_strava_upload( + message,id = stravastuff.workout_strava_upload( request.user,w ) except StravaNoTokenError: - pass - + id = 0 + message = "Please connect to Strava first" + if id>1: + messages.info(request,message) + else: + messages.error(request,message) + if (upload_to_st): try: - stmessage,stid = sporttracksstuff.workout_sporttracks_upload( + message,id = sporttracksstuff.workout_sporttracks_upload( request.user,w ) except SportTracksNoTokenError: - pass + message = "Please connect to SportTracks first" + id = 0 + if id>1: + messages.info(request,message) + else: + messages.error(request,message) if (upload_to_rk): try: - rkmessage,rkid = runkeeperstuff.workout_runkeeper_upload( + message,id = runkeeperstuff.workout_runkeeper_upload( request.user,w ) except RunKeeperNoTokenError: - pass + message = "Please connect to Runkeeper first" + id = 0 + + if id>1: + messages.info(request,message) + else: + messages.error(request,message) + if (upload_to_ua): try: - uamessage,uaid = underarmourstuff.workout_ua_upload( + message,id = underarmourstuff.workout_ua_upload( request.user,w ) except UnderArmourNoTokenError: - pass + message = "Please connect to MapMyFitness first" + id = 0 + + if id>1: + messages.info(request,message) + else: + messages.error(request,message) + if (upload_to_tp): try: - tpmessage,tpid = tpstuff.workout_tp_upload( + message,id = tpstuff.workout_tp_upload( request.user,w ) except TPNoTokenError: - pass - - if message: - url = reverse(workout_edit_view, - kwargs={ - 'message':message, - 'id':w.id, - }) + message = "Please connect to TrainingPeaks first" + id = 0 - else: - url = reverse(workout_edit_view, - kwargs = { - 'id':w.id, - }) + if id>1: + messages.info(request,message) + else: + messages.error(request,message) + + url = reverse(workout_edit_view, + kwargs = { + 'id':w.id, + }) return HttpResponseRedirect(url) else: response = render(request, @@ -5916,7 +5926,7 @@ def workout_upload_view(request,message="", {'form':form, 'teams':get_my_teams(request.user), 'optionsform': optionsform, - 'message':message}) + }) return response else: @@ -5926,7 +5936,7 @@ def workout_upload_view(request,message="", {'form':form, 'teams':get_my_teams(request.user), 'optionsform': optionsform, - 'message':message}) + }) # This is the main view for processing uploaded files @user_passes_test(iscoachmember,login_url="/",redirect_field_name=None) @@ -5966,14 +5976,14 @@ def team_workout_upload_view(request,message="", r = Rower.objects.get(user=u) else: message = 'Please select a rower' + messages.error(request,message) + messages.info(request,successmessage) response = render(request, 'team_document_form.html', {'form':form, 'teams':get_my_teams(request.user), 'optionsform': optionsform, 'rowerform': rowerform, - 'message':message, - 'successmessage':successmessage, }) return response @@ -6006,25 +6016,16 @@ def team_workout_upload_view(request,message="", title = t, notes='') if not id: - url = reverse(team_workout_upload_view, - args=[str(message)]) + messages.error(request,message) + url = reverse(team_workout_upload_view) response = HttpResponseRedirect(url) return response else: - if message: - successmessage = "The workout was added to the user's account" - url = reverse(team_workout_upload_view, - kwargs = { - 'message':message, - 'successmessage':successmessage, - }) - else: - successmessage = "The workout was added to the user's account" - url = reverse(team_workout_upload_view, - kwargs = { - 'successmessage':successmessage, - }) + successmessage = "The workout was added to the user's account" + messages.info(request,successmessage) + + url = reverse(team_workout_upload_view) response = HttpResponseRedirect(url) w = Workout.objects.get(id=id) @@ -6079,14 +6080,13 @@ def team_workout_upload_view(request,message="", else: + response = render(request, 'team_document_form.html', {'form':form, 'teams':get_my_teams(request.user), 'optionsform': optionsform, 'rowerform': rowerform, - 'message':message, - 'successmessage':successmessage, }) return response @@ -6101,8 +6101,6 @@ def team_workout_upload_view(request,message="", 'teams':get_my_teams(request.user), 'optionsform': optionsform, 'rowerform':rowerform, - 'message':message, - 'successmessage':successmessage, }) @@ -6116,7 +6114,7 @@ def workout_delete_confirm_view(request, id=0): raise PermissionDenied("You are not allowed to delete this workout") else: return render(request,'workout_delete_confirm.html', - {'id':id, + {'id':int(id), 'teams':get_my_teams(request.user), 'workout':row}) @@ -6134,10 +6132,9 @@ def workout_delete_view(request,id=0): # files are removed by pre-delete in models.py row.delete() - url = reverse(workouts_view,kwargs={ - 'successmessage': "Workout deleted", - } - ) + messages.info(request,'Workout deleted') + url = reverse(workouts_view) + return HttpResponseRedirect(url) except Workout.DoesNotExist: @@ -6153,7 +6150,7 @@ def graph_delete_confirm_view(request, id=0): raise PermissionDenied("You are not allowed to delete this workout") else: return render(request,'graphimage_delete_confirm.html', - {'id':id, + {'id':int(id), 'teams':get_my_teams(request.user), 'graph':img}) @@ -6172,12 +6169,9 @@ def graph_delete_view(request,id=0): raise PermissionDenied("You are not allowed to delete this graph") else: img.delete() - - url = reverse(workouts_view,kwargs={ - 'successmessage': "Graph deleted", - } - - ) + messages.info(request,'Graph deleted') + + url = reverse(workouts_view) return HttpResponseRedirect(url) except GraphImage.DoesNotExist: @@ -6278,12 +6272,12 @@ def workout_summary_restore_view(request,id,message="",successmessage=""): pass - url = reverse(workout_summary_edit_view,kwargs={ - 'id':id, - 'successmessage': "Original Interval Data Restored", - } - - ) + messages.info(request,'Original Interval Data Restored') + url = reverse(workout_summary_edit_view, + kwargs={ + 'id':int(id), + } + ) return HttpResponseRedirect(url) # Fuse two workouts @@ -6313,18 +6307,15 @@ def workout_fusion_view(request,id1=0,id2=1): title='Fused data', parent=w1) if message != None: - url = reverse(workout_edit_view, - kwargs={ - 'message':message, - 'id':idnew, - }) + messages.error(request,message) else: successmessage = 'Data fused' - url = reverse(workout_edit_view, - kwargs={ - 'successmessage':successmessage, - 'id':idnew, - }) + messages.info(request,message) + + url = reverse(workout_edit_view, + kwargs={ + 'id':idnew, + }) return HttpResponseRedirect(url) else: @@ -6421,6 +6412,7 @@ def workout_summary_edit_view(request,id,message="",successmessage="" row.save() rowdata.write_csv(f1,gzip=True) dataprep.update_strokedata(id,rowdata.df) + messages.info(request,"Updated interval data saved") data = {'intervalstring':s} form = SummaryStringForm(initial=data) savebutton = 'savestringform' @@ -6473,7 +6465,7 @@ def workout_summary_edit_view(request,id,message="",successmessage="" row.save() rowdata.write_csv(f1,gzip=True) dataprep.update_strokedata(id,rowdata.df) - + messages.info(request,"Updated interval data saved") form = SummaryStringForm() @@ -6533,7 +6525,9 @@ def workout_summary_edit_view(request,id,message="",successmessage="" detailform = IntervalUpdateForm(aantal=nrintervals,initial=initial) + # render page + return render(request, 'summary_edit.html', {'form':form, 'detailform':detailform, @@ -6541,8 +6535,6 @@ def workout_summary_edit_view(request,id,message="",successmessage="" 'teams':get_my_teams(request.user), 'intervalstats':intervalstats, 'nrintervals':nrintervals, - 'message': message, - 'successmessage': successmessage, 'interactiveplot':script, 'the_div':div, 'intervalstring':s, @@ -6593,11 +6585,13 @@ def rower_favoritecharts_view(request): FavoriteChart.objects.filter(user=r).delete() FavoriteChart.objects.bulk_create(new_instances) successmessage = "You have updated your favorites" + messages.info(request,message) if len(new_instances)==0: FavoriteChartFormSet=formset_factory(FavoriteForm,formset=BaseFavoriteFormSet,extra=1) favorites_formset = FavoriteChartFormSet() except IntegrityError: message = "something went wrong" + messages.error(request,message) else: favorites_formset = FavoriteChartFormSet(initial=favorites_data) @@ -6605,9 +6599,7 @@ def rower_favoritecharts_view(request): context = { 'favorites_formset':favorites_formset, - 'message':message, 'teams':get_my_teams(request.user), - 'successmessage':successmessage, } @@ -6642,6 +6634,7 @@ def rower_edit_view(request,message=""): r.rest = max(min(rest,250),10) r.save() successmessage = "Your Heart Rate data were changed" + messages.info(request,successmessage) form = RowerForm(instance=r) powerform = RowerPowerForm(instance=r) powerzonesform = RowerPowerZonesForm(instance=r) @@ -6655,11 +6648,11 @@ def rower_edit_view(request,message=""): 'rower':r, 'accountform':accountform, 'userform':userform, - 'successmessage':successmessage, }) except Rower.DoesNotExist: message = "Funny. This user doesn't exist." - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) response = HttpResponseRedirect(url) else: message = HttpResponse("invalid form") @@ -6677,8 +6670,7 @@ def rower_edit_view(request,message=""): 'powerform':powerform, 'rower':r, }) - # url = reverse(rower_edit_view,args=[str(message)]) - # response = HttpResponseRedirect(url) + return response @@ -6702,11 +6694,13 @@ def rower_edit_view(request,message=""): r.pw_an = an r.save() message = "Functional Threshold Value Changed" - url = reverse(rower_edit_view,args=[str(message)]) + messages.info(request,message) + url = reverse(rower_edit_view) response = HttpResponseRedirect(url) except Rower.DoesNotExist: message = "Funny. This user doesn't exist." - url = reverse(rower_edit_view,args=[str(message)]) + messages.error(request,message) + url = reverse(rower_edit_view) response = HttpResponseRedirect(url) else: message = HttpResponse("invalid form") @@ -6752,6 +6746,7 @@ def rower_edit_view(request,message=""): r.powerzones = powerzones r.save() successmessage = "Your Power Zone data were changed" + messages.info(request,successmessage) form = RowerForm(instance=r) accountform = AccountRowerForm(instance=r) userform = UserForm(instance=request.user) @@ -6765,11 +6760,11 @@ def rower_edit_view(request,message=""): 'userform':userform, 'accountform':accountform, 'rower':r, - 'successmessage':successmessage, }) except Rower.DoesNotExist: message = "Funny. This user doesn't exist." - url = reverse(workouts_view,args=[str(message)]) + messages.error(request,message) + url = reverse(workouts_view) response = HttpResponseRedirect(url) return response else: @@ -6815,6 +6810,7 @@ def rower_edit_view(request,message=""): accountform = AccountRowerForm(instance=r) userform = UserForm(instance=u) successmessage = 'Account Information changed' + messages.info(request,successmessage) return render(request, 'rower_form.html', {'form':form, 'teams':get_my_teams(request.user), @@ -6823,7 +6819,6 @@ def rower_edit_view(request,message=""): 'accountform':accountform, 'userform':userform, 'rower':r, - 'successmessage':successmessage, }) else: form = RowerForm(instance=r) @@ -6928,7 +6923,7 @@ def strokedataform(request,id=0): { 'form':form, 'teams':get_my_teams(request.user), - 'id':id, + 'id':int(id), }) elif request.method == 'POST': form = StrokeDataForm() @@ -6937,7 +6932,7 @@ def strokedataform(request,id=0): { 'form':form, 'teams':get_my_teams(request.user), - 'id':id, + 'id':int(id), }) # Process the POSTed stroke data according to the API definition @@ -7067,7 +7062,7 @@ def strokedatajson(request,id): import teams @login_required() -def team_view(request,id=0,message='',successmessage=''): +def team_view(request,id=0): ismember = 0 hasrequested = 0 r = Rower.objects.get(user=request.user) @@ -7110,15 +7105,13 @@ def team_view(request,id=0,message='',successmessage=''): ismember = 1 - + return render(request, 'team.html', { 'team':t, 'teams':get_my_teams(request.user), 'members':members, 'inviteform':inviteform, - 'message':message, - 'successmessage':successmessage, 'ismember':ismember, 'hasrequested':hasrequested, }) @@ -7174,6 +7167,8 @@ def rower_teams_view(request,message='',successmessage=''): clubsize = teams.count_invites(request.user)+teams.count_club_members(request.user) max_clubsize = r.clubsize + messages.info(request,successmessage) + messages.error(request,message) return render(request, 'teams.html', { 'teams':ts, @@ -7185,8 +7180,6 @@ def rower_teams_view(request,message='',successmessage=''): 'requests':requests, 'myrequests':myrequests, 'form':form, - 'message':message, - 'successmessage':successmessage, 'myinvites':myinvites, }) @@ -7194,15 +7187,13 @@ def rower_teams_view(request,message='',successmessage=''): def invitation_revoke_view(request,id): res,text = teams.revoke_invite(request.user,id) if res: + messages.info(request,text) successmessage = text - url = reverse(rower_teams_view,kwargs={ - 'successmessage':successmessage - }) else: message = text - url = reverse(rower_teams_view,kwargs={ - 'message':message - }) + messages.error(request,text) + + url = reverse(rower_teams_view) return HttpResponseRedirect(url) @@ -7212,15 +7203,11 @@ def manager_member_drop_view(request,teamid,userid, rower = Rower.objects.get(user__id=userid) res, text = teams.mgr_remove_member(teamid,request.user,rower) if res: - successmessage = text - url = reverse(rower_teams_view,kwargs={ - 'successmessage':successmessage - }) + messages.info(request,text) else: - message = text - url = reverse(rower_teams_view,kwargs={ - 'message':message - }) + messages.error(request,text) + + url = reverse(rower_teams_view) return HttpResponseRedirect(url) @@ -7235,6 +7222,8 @@ def manager_requests_view(request,code=None,message='',successmessage=''): message = text successmessage = '' + messages.info(request,successmessage) + messages.error(request,message) url = reverse(rower_teams_view,kwargs={ }) return HttpResponseRedirect(url) @@ -7249,17 +7238,12 @@ def team_requestmembership_view(request,teamid,userid): res,text = teams.create_request(t,userid) if res: - successmessage = text - url = reverse(team_view,kwargs={ - 'id':teamid, - 'successmessage': successmessage, - }) - + messages.info(request,text) else: - message = text - url = reverse(team_view,kwargs={ - 'id':teamid, - 'message': message, + messages.error(request,text) + + url = reverse(team_view,kwargs={ + 'id':int(teamid), }) @@ -7270,15 +7254,12 @@ def request_revoke_view(request,id=0): res,text = teams.revoke_request(request.user,id) if res: - successmessage = text - url = reverse(rower_teams_view,kwargs={ - 'successmessage':successmessage, - }) + messages.info(request,text) + else: - message = text - url = reverse(rower_teams_view,kwargs={ - 'message':message, - }) + messages.error(request,text) + + url = reverse(rower_teams_view) return HttpResponseRedirect(url) @@ -7287,15 +7268,11 @@ def request_reject_view(request,id=0): res,text = teams.reject_request(request.user,id) if res: - successmessage = text - url = reverse(rower_teams_view,kwargs={ - 'successmessage':successmessage, - }) + messages.info(request,text) else: - message = text - url = reverse(rower_teams_view,kwargs={ - 'message':message, - }) + messages.error(request,text) + + url = reverse(rower_teams_view) return HttpResponseRedirect(url) @@ -7304,15 +7281,11 @@ def invitation_reject_view(request,id=0): res,text = teams.reject_invitation(request.user,id) if res: - successmessage = text - url = reverse(rower_teams_view,kwargs={ - 'successmessage':successmessage, - }) + messages.info(request,text) else: - message = text - url = reverse(rower_teams_view,kwargs={ - 'message':message, - }) + messages.error(request,text) + + url = reverse(rower_teams_view) return HttpResponseRedirect(url) @@ -7323,17 +7296,15 @@ def rower_invitations_view(request,code=None,message='',successmessage=''): teams.remove_expired_invites() res,text = teams.process_invite_code(request.user,code) if res: - successmessage = text + messages.info(request,text) teamid=res url = reverse(team_view,kwargs={ 'id':teamid, - 'successmessage': successmessage, }) else: - message = text - url = reverse(rower_teams_view,kwargs={ - 'message':message, - }) + messages.error(request,text) + + url = reverse(rower_teams_view) return HttpResponseRedirect(url) @@ -7360,19 +7331,15 @@ def team_edit_view(request,id=0): res,message=teams.update_team(t,name,manager,private,notes, viewing) if res: - url = reverse(team_view, - kwargs={ - 'id':id, - 'successmessage':message - } - ) + messages.info(request,message) else: - url = reverse(team_view, - kwargs={ - 'id':id, - 'message':message - } - ) + messages.error(request,message) + + url = reverse(team_view, + kwargs={ + 'id':int(id), + } + ) response = HttpResponseRedirect(url) return response diff --git a/rowsanda_107501 b/rowsanda_107501 index 667f3fdf..93b5d653 100644 Binary files a/rowsanda_107501 and b/rowsanda_107501 differ