From 41f7ab2ff5bf28b4a4aa22fcfbc9545c2dfb6ae4 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 4 Jan 2017 12:51:14 +0100 Subject: [PATCH 01/12] Chart permissions --- rowers/urls.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/rowers/urls.py b/rowers/urls.py index 94febda1..5d98324d 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -59,10 +59,23 @@ class RowerViewSet(viewsets.ModelViewSet): IsOwnerOrNot, ) + http_method_names = ['get','patch'] + + class FavoriteChartViewSet(viewsets.ModelViewSet): model = FavoriteChart serializer_class = FavoriteChartSerializer - queryset = FavoriteChart.objects.all() + #queryset = FavoriteChart.objects.all() + + def get_queryset(self): + r = Rower.objects.filter(user=self.request.user) + return FavoriteChart.objects.filter(user=r) + + permission_classes = ( + IsOwnerOrNot, + ) + + http_method_names = ['get','put','patch','delete'] class StrokeDataViewSet(viewsets.ModelViewSet): serializer_class = StrokeDataSerializer From 0ca922f5a22f4de55c8bd3432364d35a17ada91b Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 4 Jan 2017 22:30:59 +0100 Subject: [PATCH 02/12] more error tracing around Strava --- rowers/templates/400.html | 4 +- rowers/templates/403.html | 4 +- rowers/templates/404.html | 4 +- rowers/templates/500.html | 4 +- rowers/templates/bases.html | 189 ++++++++++++++++++++++++++++++++++++ rowers/views.py | 12 ++- rowsandall_app/settings.py | 1 + 7 files changed, 207 insertions(+), 11 deletions(-) create mode 100644 rowers/templates/bases.html diff --git a/rowers/templates/400.html b/rowers/templates/400.html index 735edfd4..caf15419 100644 --- a/rowers/templates/400.html +++ b/rowers/templates/400.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "bases.html" %} {% load staticfiles %} {% load rowerfilters %} @@ -13,4 +13,4 @@ HTTP Error 400 Bad Request.

-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/rowers/templates/403.html b/rowers/templates/403.html index 71faf1fd..65394b28 100644 --- a/rowers/templates/403.html +++ b/rowers/templates/403.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "bases.html" %} {% load staticfiles %} {% load rowerfilters %} @@ -13,4 +13,4 @@ Access forbidden

-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/rowers/templates/404.html b/rowers/templates/404.html index 5330441a..69d2b396 100644 --- a/rowers/templates/404.html +++ b/rowers/templates/404.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "bases.html" %} {% load staticfiles %} {% load rowerfilters %} @@ -13,4 +13,4 @@ We could not find the page on our server.

-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/rowers/templates/500.html b/rowers/templates/500.html index dbb58908..a64a6d92 100644 --- a/rowers/templates/500.html +++ b/rowers/templates/500.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "bases.html" %} {% load staticfiles %} {% load rowerfilters %} @@ -13,4 +13,4 @@ The site reported an internal server error. If this behavior repeats, please inf

-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/rowers/templates/bases.html b/rowers/templates/bases.html new file mode 100644 index 00000000..57e283b6 --- /dev/null +++ b/rowers/templates/bases.html @@ -0,0 +1,189 @@ + + + + + + + + + + + + Rowsandall + + + + + {% block meta %} {% endblock %} + + +
+ +
+

 

+
+ {% if user.is_authenticated %} +

Password Change

+ {% else %} +

Forgotten Password?

+ {% endif %} +
+
+ + +
+
+

Free Data and Analysis. For Rowers. By Rowers.

+
+
+ {% if user.rower.rowerplan == 'pro' %} +
Pro Member
+ {% else %} +

 

+ {% endif %} +
+
+ {% if user.is_authenticated %} +

logout

+ + {% else %} +

 

+ {% endif %} + +
+
+ +
+
+ {% if user.is_authenticated %} +

Upload

+ Upload CSV, TCX, FIT data files to rowsandall.com + {% else %} +

Register (free)

+ {% endif %} +
+
+ {% if user.is_authenticated %} +

+ Import +

+ Import workouts from Strava, SportTracks, and C2 logbook + {% else %} +

 

+ {% endif %} +
+
+ {% if user.is_authenticated %} +

+ Workouts +

+ See your list of workouts + {% else %} +

 

+ {% endif %} +
+
+ {% if user.is_authenticated %} +

+ Graphs +

+ See your most recent charts + {% else %} +

 

+ {% endif %} +
+
+ {% if user.is_authenticated %} +

+ Analysis +

+ Analysis of workouts over a period of time + {% else %} +

 

+ {% endif %} +
+
+ {% if user.is_authenticated %} +

+ {{ user.first_name }} +

+ Edit user data, e.g. heart rate zones + + {% else %} +

login

+ {% endif %} +
+
+ + +
+
+ {% block message %} + {% if message %} +

+ {{ message }} +

+ {% endif %} + {% if successmessage %} +

+ {{ successmessage }} +

+ {% endif %} + {% endblock %} +
+
+ {% load tz %} + + {% block content %}{% endblock %} +
+
+ +
+ {% block footer %} + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+ {% endblock %} +
+
+ + + diff --git a/rowers/views.py b/rowers/views.py index 01c3116c..b4e7b65a 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -922,6 +922,7 @@ def workout_csvemail_view(request,id=0): def workout_strava_upload_view(request,id=0): message = "" r = Rower.objects.get(user=request.user) + res = -1 if (r.stravatoken == '') or (r.stravatoken is None): s = "Token doesn't exist. Need to authorize" return HttpResponseRedirect("/rowers/me/stravaauthorize/") @@ -929,9 +930,14 @@ def workout_strava_upload_view(request,id=0): # ready to upload. Hurray w = Workout.objects.get(id=id) if (checkworkoutuser(request.user,w)): - tcxfile = stravastuff.createstravaworkoutdata(w) - - + try: + tcxfile = stravastuff.createstravaworkoutdata(w) + except: + with open("media/stravaerrors.log","a") as errorlog: + errorstring = str(sys.exc_info()[0]) + timestr = time.strftime("%Y%m%d-%H%M%S") + errorlog.write(timestr+errorstring+"\r\n") + errorlog.write("views.py line 946\r\n") try: with open(tcxfile,'rb') as f: try: diff --git a/rowsandall_app/settings.py b/rowsandall_app/settings.py index 58078fa3..60229f32 100644 --- a/rowsandall_app/settings.py +++ b/rowsandall_app/settings.py @@ -97,6 +97,7 @@ TEMPLATES = [ 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', + 'django.core.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django.template.context_processors.i18n', From 5f45d385f36967f58a852ec5959ac433e34ffd0b Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 5 Jan 2017 09:03:57 +0100 Subject: [PATCH 03/12] some more stuff related to strava bug --- rowers/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rowers/views.py b/rowers/views.py index f17bee1c..53abf953 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -859,7 +859,7 @@ def workout_tcxemail_view(request,id=0): }) except: successmessage = "" - message = "Something went wrong (strava export) "+str(sys.exc_info()[0]) + message = "Something went wrong (TCX export) "+str(sys.exc_info()[0]) with open("media/c2errors.log","a") as errorlog: errorstring = str(sys.exc_info()[0]) timestr = strftime("%Y%m%d-%H%M%S") From 1f056096d778d979983971356557669fa3351d79 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 5 Jan 2017 17:10:33 +0100 Subject: [PATCH 04/12] sporttracksexport bug fixing --- rowers/sporttracksstuff.py | 7 ++++++- rowers/views.py | 3 +-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/rowers/sporttracksstuff.py b/rowers/sporttracksstuff.py index 7783a8ca..b0270b03 100644 --- a/rowers/sporttracksstuff.py +++ b/rowers/sporttracksstuff.py @@ -181,8 +181,10 @@ def createsporttracksworkoutdata(w): maxhr = int(row.df[' HRCur (bpm)'].max()) # adding diff, trying to see if this is valid - t = row.df.ix[:,'TimeStamp (sec)'].values-10*row.df.ix[0,'TimeStamp (sec)'] + #t = row.df.ix[:,'TimeStamp (sec)'].values-10*row.df.ix[0,'TimeStamp (sec)'] + t = row.df.ix[:,'TimeStamp (sec)'].values-row.df.ix[0,'TimeStamp (sec)'] t[0] = t[1] + d = row.df.ix[:,'cum_dist'].values d[0] = d[1] t = t.astype(int) @@ -196,9 +198,12 @@ def createsporttracksworkoutdata(w): try: lat = row.df[' latitude'].values lon = row.df[' longitude'].values + if not lat.std() and not lon.std(): + haslatlon = 0 except KeyError: haslatlon = 0 + haspower = 1 try: power = row.df[' Power (watts)'].values diff --git a/rowers/views.py b/rowers/views.py index 53abf953..698643ba 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -1078,7 +1078,6 @@ def workout_sporttracks_upload_view(request,id=0): url = "https://api.sporttracks.mobi/api/v2/fitnessActivities.json" response = requests.post(url,headers=headers,data=json.dumps(data)) - # check for duplicate error first if (response.status_code == 409 ): message = "Duplicate error" @@ -1093,7 +1092,7 @@ def workout_sporttracks_upload_view(request,id=0): return HttpResponseRedirect(url) else: s = response - message = "Something went wrong in workout_sporttracks_upload_view %s" % s + message = "Something went wrong in workout_sporttracks_upload_view: %s" % s.reason else: message = "You are not authorized to upload this workout" From 76c9666b566669c3c0510a23511ba26cc39ce6b3 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 5 Jan 2017 21:06:50 +0100 Subject: [PATCH 05/12] fix Strava upload --- rowers/views.py | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/rowers/views.py b/rowers/views.py index 698643ba..1ec36004 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -934,34 +934,31 @@ def workout_strava_upload_view(request,id=0): if (checkworkoutuser(request.user,w)): try: tcxfile = stravastuff.createstravaworkoutdata(w) - except: - with open("media/stravaerrors.log","a") as errorlog: - errorstring = str(sys.exc_info()[0]) - timestr = time.strftime("%Y%m%d-%H%M%S") - errorlog.write(timestr+errorstring+"\r\n") - errorlog.write("views.py line 946\r\n") - try: + with open(tcxfile,'rb') as f: try: res = stravastuff.handle_stravaexport(f,w.name, r.stravatoken, description=w.notes) - except: + w.uploadedtostrava = res + w.save() + os.remove(tcxfile) + url = "/rowers/workout/"+str(w.id)+"/edit" + successmessage = 'Workout sent to Strava.' + except: with open("media/stravaerrors.log","a") as errorlog: errorstring = str(sys.exc_info()[0]) - timestr = time.strftime("%Y%m%d-%H%M%S") + timestr = strftime("%Y%m%d-%H%M%S") errorlog.write(timestr+errorstring+"\r\n") errorlog.write("views.py line 946\r\n") + message = 'Error: '+errorstring + - w.uploadedtostrava = res - w.save() - os.remove(tcxfile) - url = "/rowers/workout/"+str(w.id)+"/edit" - successmessage = 'Workout sent to Strava.' url = reverse(workout_export_view, kwargs = { 'id':str(w.id), + 'message':message, } ) response = HttpResponseRedirect(url) @@ -973,7 +970,6 @@ def workout_strava_upload_view(request,id=0): url = reverse(workout_export_view, kwargs = { 'id':str(w.id), - 'message':message, }) response = HttpResponseRedirect(url) # except TimeoutExceeded as e: @@ -1014,7 +1010,7 @@ def workout_c2_upload_view(request,id=0): message = "Unexpected Error: "+str(sys.exc_info()[0]) with open("media/c2errors.log","a") as errorlog: errorstring = str(sys.exc_info()[0]) - timestr = time.strftime("%Y%m%d-%H%M%S") + timestr = strftime("%Y%m%d-%H%M%S") errorlog.write(timestr+errorstring+"\r\n") # check for duplicate error first @@ -1034,7 +1030,7 @@ def workout_c2_upload_view(request,id=0): message = "Something went wrong in workout_c2_upload_view. Response code 200/201 but C2 sync failed: "+response.text with open("media/c2errors.log","a") as errorlog: errorstring = str(sys.exc_info()[0]) - timestr = time.strftime("%Y%m%d-%H%M%S") + timestr = strftime("%Y%m%d-%H%M%S") errorlog.write(timestr+errorstring+"\r\n") @@ -1043,7 +1039,7 @@ def workout_c2_upload_view(request,id=0): message = "Something went wrong in workout_c2_upload_view. C2 sync failed." with open("media/c2errors.log","a") as errorlog: errorstring = str(sys.exc_info()[0]) - timestr = time.strftime("%Y%m%d-%H%M%S") + timestr = strftime("%Y%m%d-%H%M%S") errorlog.write(timestr+errorstring+"\r\n") else: From d2e8fb9f7ef1e98eb8d968a9168845c67c8bd53e Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 5 Jan 2017 21:14:36 +0100 Subject: [PATCH 06/12] hotfix strava upload --- rowers/views.py | 1 - 1 file changed, 1 deletion(-) diff --git a/rowers/views.py b/rowers/views.py index 1ec36004..5d7a4541 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -958,7 +958,6 @@ def workout_strava_upload_view(request,id=0): url = reverse(workout_export_view, kwargs = { 'id':str(w.id), - 'message':message, } ) response = HttpResponseRedirect(url) From e707e8106ed663886009ed13d2576e904bbd0209 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 5 Jan 2017 21:39:20 +0100 Subject: [PATCH 07/12] small typo fix --- rowers/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rowers/views.py b/rowers/views.py index 5d7a4541..b565971a 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -266,7 +266,7 @@ def rower_register_view(request): message += "Happy rowing!\n\n\n" message += "Oh, one more thing. The site is currently in beta and is developing fast. Bear with us. Don't hesitate to contact me if anything is broken or doesn't seem to work as advertised." send_mail(subject, message, - 'Sander Roosendaal ', + 'Sander Roosendaal ', [fullemail]) subject2 = "New User" @@ -275,7 +275,7 @@ def rower_register_view(request): message2 += "User name: "+username send_mail(subject2, message2, - 'Rowsandall Server ', + 'Rowsandall Server ', ['roosendaalsander@gmail.com']) return HttpResponseRedirect('/rowers/register/thankyou/') From d02fb441edf70761381ae0ec289d8c897f5ba704 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 6 Jan 2017 08:46:54 +0100 Subject: [PATCH 08/12] Alternative way to check if C2 log has stroke data --- logos/boatcoachlogo.png | Bin 0 -> 30810 bytes rowers/views.py | 68 +++++++++++++++++----------------------- 2 files changed, 29 insertions(+), 39 deletions(-) create mode 100644 logos/boatcoachlogo.png diff --git a/logos/boatcoachlogo.png b/logos/boatcoachlogo.png new file mode 100644 index 0000000000000000000000000000000000000000..057ad75ff4cf471b3be55463102cff34a3dea698 GIT binary patch literal 30810 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 Date: Fri, 6 Jan 2017 11:46:45 +0100 Subject: [PATCH 09/12] added BC logo --- logos/bcsquare.png | Bin 0 -> 926 bytes logos/boatcoachlogo.xcf | Bin 0 -> 75235 bytes rowers/templates/compatibility.html | 5 +++-- rowers/templates/frontpage.html | 3 ++- rowers/views.py | 10 +++++++++- static/img/bcsquare.png | Bin 0 -> 2783 bytes 6 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 logos/bcsquare.png create mode 100644 logos/boatcoachlogo.xcf create mode 100644 static/img/bcsquare.png diff --git a/logos/bcsquare.png b/logos/bcsquare.png new file mode 100644 index 0000000000000000000000000000000000000000..547f44880660ec3fd00c9b4580fd249bb91cecc9 GIT binary patch literal 926 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 v2DB2p2jGSnfEyxOMmNL&+z^YQ-!Y*td` literal 0 HcmV?d00001 diff --git a/rowers/templates/compatibility.html b/rowers/templates/compatibility.html index 0d47a17b..6dc792cb 100644 --- a/rowers/templates/compatibility.html +++ b/rowers/templates/compatibility.html @@ -16,13 +16,14 @@
  • CrewNerd (TCX)
  • Rowing In Motion (TCX)
  • Speedcoach XL (CSV)
  • -
  • Speedcoach GPS (FIT)
  • +
  • Speedcoach GPS (FIT and CSV)
  • Erg

    • Painsled (CSV)
    • ErgData (CSV export from Concept2 logbook)
    • RowPro (CSV)
    • +
    • BoatCoach (CSV)
    • ErgStick (CSV)

    @@ -35,7 +36,7 @@

    Export Compatibility

    • Concept2 Logbook: Exports stroke by stroke data for erg and OTW rowing
    • -
    • Strava:
    • +
    • Strava
    • SportTracks
    • email (TCX or CSV format)

    diff --git a/rowers/templates/frontpage.html b/rowers/templates/frontpage.html index 61e08861..1532f44d 100644 --- a/rowers/templates/frontpage.html +++ b/rowers/templates/frontpage.html @@ -22,8 +22,9 @@ RiM icon RowPro icon ErgStick icon + BoatCoach icon PainSled icon

    -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/rowers/views.py b/rowers/views.py index 4c2d1c34..09601c50 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -3686,7 +3686,15 @@ def workout_getc2workout_view(request,c2id): res = c2stuff.get_c2_workout(request.user,c2id) if (res.status_code == 200): data = res.json()['data'] - res2 = c2stuff.get_c2_workout_strokes(request.user,c2id) + if data['stroke_data']: + 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, + }) + return HttpResponseRedirect(url) if res2.status_code == 200: strokedata = pd.DataFrame.from_dict(res2.json()['data']) diff --git a/static/img/bcsquare.png b/static/img/bcsquare.png new file mode 100644 index 0000000000000000000000000000000000000000..163cef9be080a2e8c700765c99905519b1bf94bb GIT binary patch literal 2783 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 literal 0 HcmV?d00001 From 224c4f5cf15e8fbc469cb2cff1a64bf2563304b0 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 6 Jan 2017 13:04:56 +0100 Subject: [PATCH 10/12] bug fix for data without lat/long --- rowers/views.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rowers/views.py b/rowers/views.py index 09601c50..1d1a64c2 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -3141,13 +3141,14 @@ def workout_edit_view(request,id=0,message="",successmessage=""): if rowdata != 0: try: latitude = rowdata.df[' latitude'] + if not latitude.std(): + hascoordinates = 0 except KeyError,AttributeError: hascoordinates = 0 + else: hascoordinates = 0 - if not latitude.std(): - hascoordinates = 0 if hascoordinates: res = googlemap_chart(rowdata.df[' latitude'], From 5301142b34df4fe161001a34705f266efe7a70d0 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 6 Jan 2017 18:59:03 +0100 Subject: [PATCH 11/12] changed email password --- rowsandall_app/settings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rowsandall_app/settings.py b/rowsandall_app/settings.py index 60229f32..e0b6c354 100644 --- a/rowsandall_app/settings.py +++ b/rowsandall_app/settings.py @@ -250,7 +250,8 @@ EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'mail.rosti.cz' EMAIL_PORT = '25' EMAIL_HOST_USER = 'info@rowsandall.com' -EMAIL_HOST_PASSWORD = 'lnD3mbZ1NoI8RK1StOdO' +#EMAIL_HOST_PASSWORD = 'lnD3mbZ1NoI8RK1StOdO' +EMAIL_HOST_PASSWORD = '0r0wYgQUReOYK7sEkBby' EMAIL_USE_TLS = True # weather stuff From af9662edac83bba1aeaa234e19aae0ab5ad67b24 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 6 Jan 2017 19:43:46 +0100 Subject: [PATCH 12/12] Make email processing more robust --- rowers/management/commands/processemail.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rowers/management/commands/processemail.py b/rowers/management/commands/processemail.py index 4e24d3ef..b92692bb 100644 --- a/rowers/management/commands/processemail.py +++ b/rowers/management/commands/processemail.py @@ -63,12 +63,16 @@ class Command(BaseCommand): wid = [make_new_workout_from_email(rr,a.document,name)] res += wid link = 'http://rowsandall.com/rowers/workout/'+str(wid[0])+'/edit' - dd = send_confirm(u,name,link) except: # replace with code to process error res += ['fail: '+name] donotdelete = 1 + try: + dd = send_confirm(u,name,link) + except: + pass + except Rower.DoesNotExist: pass