diff --git a/.gitignore b/.gitignore index 5d47abd7..b3b8c056 100644 --- a/.gitignore +++ b/.gitignore @@ -26,8 +26,9 @@ conftest.py # temporary test files /rowers/tests/testdata/temp -/rowers/tests/testdate/testdata.csv.gz -/rowers/tests/testdate/testdata.tcx +/rowers/tests/testdata/testdata.csv.gz +/rowers/tests/testdata/testdata.tcx + # Python egg metadata, regenerated from source files by setuptools. *.egg-info @@ -48,3 +49,6 @@ manage.py # secrets config.yaml + +# test data + diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz index bec967ba..fbece1d6 100644 Binary files a/rowers/tests/testdata/testdata.csv.gz and b/rowers/tests/testdata/testdata.csv.gz differ diff --git a/rowers/tests/testdata/testdata.tcx b/rowers/tests/testdata/testdata.tcx deleted file mode 100644 index 45a66625..00000000 --- a/rowers/tests/testdata/testdata.tcx +++ /dev/null @@ -1,2523 +0,0 @@ - - - - - 2016-05-20T13:41:26.962390+00:00 - - 537 - 2000 - 1 - - 148 - - - 156 - - Active - 21 - Manual - - - - 5.4 - - 127 - - 0 - - - 19 - - - - - - 13.1 - - 127 - - 19 - - - 26 - - - - - - 21.0 - - 128 - - 20 - - - 45 - - - - - - 30.3 - - 129 - - 20 - - - 64 - - - - - - 39.0 - - 130 - - 20 - - - 74 - - - - - - 48.2 - - 131 - - 21 - - - 80 - - - - - - 57.6 - - 131 - - 20 - - - 83 - - - - - - 66.4 - - 132 - - 20 - - - 87 - - - - - - 75.5 - - 132 - - 21 - - - 86 - - - - - - 85.1 - - 132 - - 20 - - - 88 - - - - - - 95.0 - - 132 - - 21 - - - 100 - - - - - - 105.0 - - 133 - - 22 - - - 127 - - - - - - 115.3 - - 134 - - 21 - - - 135 - - - - - - 125.8 - - 135 - - 21 - - - 139 - - - - - - 136.6 - - 136 - - 21 - - - 146 - - - - - - 147.2 - - 137 - - 22 - - - 150 - - - - - - 157.6 - - 139 - - 22 - - - 152 - - - - - - 167.8 - - 140 - - 21 - - - 146 - - - - - - 178.5 - - 140 - - 22 - - - 150 - - - - - - 188.5 - - 141 - - 21 - - - 155 - - - - - - 199.3 - - 141 - - 21 - - - 148 - - - - - - 209.4 - - 142 - - 22 - - - 151 - - - - - - 219.4 - - 142 - - 22 - - - 151 - - - - - - 230.2 - - 143 - - 22 - - - 148 - - - - - - 240.2 - - 144 - - 22 - - - 147 - - - - - - 250.1 - - 145 - - 23 - - - 150 - - - - - - 259.6 - - 145 - - 23 - - - 152 - - - - - - 270.3 - - 145 - - 23 - - - 152 - - - - - - 280.6 - - 145 - - 22 - - - 149 - - - - - - 290.7 - - 144 - - 22 - - - 150 - - - - - - 300.8 - - 145 - - 23 - - - 149 - - - - - - 311.1 - - 145 - - 22 - - - 152 - - - - - - 321.2 - - 145 - - 22 - - - 157 - - - - - - 331.9 - - 145 - - 21 - - - 150 - - - - - - 342.0 - - 146 - - 22 - - - 151 - - - - - - 352.4 - - 146 - - 22 - - - 151 - - - - - - 363.0 - - 146 - - 22 - - - 153 - - - - - - 373.4 - - 147 - - 22 - - - 152 - - - - - - 383.9 - - 147 - - 22 - - - 153 - - - - - - 394.6 - - 147 - - 22 - - - 152 - - - - - - 405.0 - - 147 - - 21 - - - 149 - - - - - - 415.3 - - 148 - - 22 - - - 152 - - - - - - 426.0 - - 148 - - 22 - - - 151 - - - - - - 436.5 - - 148 - - 21 - - - 149 - - - - - - 446.9 - - 148 - - 22 - - - 149 - - - - - - 456.9 - - 149 - - 22 - - - 156 - - - - - - 467.6 - - 149 - - 22 - - - 155 - - - - - - 478.5 - - 150 - - 22 - - - 156 - - - - - - 489.0 - - 150 - - 21 - - - 154 - - - - - - 499.1 - - 150 - - 21 - - - 148 - - - - - - 510.0 - - 150 - - 22 - - - 151 - - - - - - 519.9 - - 149 - - 22 - - - 153 - - - - - - 530.6 - - 149 - - 22 - - - 151 - - - - - - 540.8 - - 149 - - 22 - - - 148 - - - - - - 550.8 - - 148 - - 22 - - - 149 - - - - - - 560.8 - - 148 - - 22 - - - 144 - - - - - - 571.0 - - 147 - - 22 - - - 149 - - - - - - 580.7 - - 147 - - 22 - - - 150 - - - - - - 591.2 - - 147 - - 22 - - - 151 - - - - - - 601.4 - - 147 - - 22 - - - 150 - - - - - - 611.4 - - 147 - - 23 - - - 153 - - - - - - 621.8 - - 147 - - 23 - - - 151 - - - - - - 632.1 - - 147 - - 22 - - - 155 - - - - - - 642.3 - - 147 - - 22 - - - 154 - - - - - - 652.0 - - 148 - - 23 - - - 157 - - - - - - 662.7 - - 148 - - 23 - - - 162 - - - - - - 673.1 - - 148 - - 23 - - - 163 - - - - - - 683.6 - - 149 - - 22 - - - 163 - - - - - - 693.8 - - 149 - - 22 - - - 162 - - - - - - 703.8 - - 149 - - 22 - - - 164 - - - - - - 714.7 - - 150 - - 23 - - - 162 - - - - - - 724.9 - - 150 - - 22 - - - 162 - - - - - - 735.2 - - 151 - - 23 - - - 159 - - - - - - 745.4 - - 151 - - 22 - - - 158 - - - - - - 756.0 - - 151 - - 23 - - - 164 - - - - - - 766.3 - - 150 - - 22 - - - 163 - - - - - - 776.5 - - 150 - - 22 - - - 161 - - - - - - 786.9 - - 150 - - 23 - - - 163 - - - - - - 797.2 - - 150 - - 22 - - - 165 - - - - - - 807.8 - - 150 - - 23 - - - 166 - - - - - - 818.2 - - 150 - - 23 - - - 166 - - - - - - 828.4 - - 150 - - 22 - - - 168 - - - - - - 839.2 - - 150 - - 23 - - - 169 - - - - - - 849.6 - - 151 - - 23 - - - 166 - - - - - - 860.1 - - 151 - - 22 - - - 172 - - - - - - 870.3 - - 152 - - 22 - - - 172 - - - - - - 881.1 - - 152 - - 22 - - - 169 - - - - - - 891.7 - - 152 - - 23 - - - 167 - - - - - - 902.1 - - 152 - - 22 - - - 164 - - - - - - 913.1 - - 152 - - 22 - - - 161 - - - - - - 923.9 - - 153 - - 22 - - - 158 - - - - - - 934.6 - - 154 - - 21 - - - 158 - - - - - - 945.4 - - 154 - - 21 - - - 154 - - - - - - 956.0 - - 155 - - 21 - - - 155 - - - - - - 966.7 - - 155 - - 21 - - - 152 - - - - - - 977.4 - - 156 - - 21 - - - 150 - - - - - - 988.1 - - 156 - - 21 - - - 157 - - - - - - 998.8 - - 156 - - 21 - - - 155 - - - - - - 1009.6 - - 156 - - 21 - - - 151 - - - - - - 1020.6 - - 156 - - 21 - - - 147 - - - - - - 1031.5 - - 156 - - 20 - - - 145 - - - - - - 1042.5 - - 156 - - 21 - - - 144 - - - - - - 1053.3 - - 155 - - 20 - - - 145 - - - - - - 1064.1 - - 155 - - 21 - - - 147 - - - - - - 1075.3 - - 155 - - 20 - - - 142 - - - - - - 1086.1 - - 155 - - 20 - - - 136 - - - - - - 1097.5 - - 155 - - 21 - - - 141 - - - - - - 1108.5 - - 155 - - 20 - - - 146 - - - - - - 1119.2 - - 155 - - 20 - - - 143 - - - - - - 1130.6 - - 155 - - 20 - - - 143 - - - - - - 1141.3 - - 155 - - 20 - - - 143 - - - - - - 1152.4 - - 155 - - 21 - - - 142 - - - - - - 1163.3 - - 155 - - 20 - - - 138 - - - - - - 1173.8 - - 154 - - 20 - - - 141 - - - - - - 1184.8 - - 154 - - 21 - - - 146 - - - - - - 1195.8 - - 153 - - 21 - - - 146 - - - - - - 1206.6 - - 152 - - 21 - - - 141 - - - - - - 1217.3 - - 153 - - 21 - - - 141 - - - - - - 1227.8 - - 152 - - 21 - - - 140 - - - - - - 1238.7 - - 152 - - 21 - - - 143 - - - - - - 1249.5 - - 151 - - 21 - - - 149 - - - - - - 1260.1 - - 151 - - 20 - - - 141 - - - - - - 1270.9 - - 151 - - 21 - - - 141 - - - - - - 1281.8 - - 150 - - 21 - - - 145 - - - - - - 1292.7 - - 151 - - 20 - - - 142 - - - - - - 1303.4 - - 151 - - 20 - - - 141 - - - - - - 1314.3 - - 151 - - 21 - - - 141 - - - - - - 1325.2 - - 151 - - 21 - - - 146 - - - - - - 1336.1 - - 152 - - 20 - - - 143 - - - - - - 1346.9 - - 152 - - 21 - - - 144 - - - - - - 1357.4 - - 152 - - 20 - - - 141 - - - - - - 1368.1 - - 152 - - 21 - - - 138 - - - - - - 1379.0 - - 152 - - 20 - - - 142 - - - - - - 1389.5 - - 153 - - 21 - - - 145 - - - - - - 1399.9 - - 152 - - 21 - - - 138 - - - - - - 1410.7 - - 152 - - 20 - - - 139 - - - - - - 1422.0 - - 152 - - 20 - - - 139 - - - - - - 1432.8 - - 151 - - 20 - - - 141 - - - - - - 1443.6 - - 151 - - 21 - - - 146 - - - - - - 1454.4 - - 152 - - 20 - - - 143 - - - - - - 1465.1 - - 151 - - 21 - - - 143 - - - - - - 1475.9 - - 152 - - 21 - - - 145 - - - - - - 1486.6 - - 152 - - 21 - - - 148 - - - - - - 1497.4 - - 153 - - 21 - - - 143 - - - - - - 1508.2 - - 153 - - 20 - - - 140 - - - - - - 1519.2 - - 154 - - 20 - - - 144 - - - - - - 1530.0 - - 154 - - 21 - - - 143 - - - - - - 1540.9 - - 153 - - 20 - - - 141 - - - - - - 1551.3 - - 153 - - 21 - - - 143 - - - - - - 1562.6 - - 153 - - 21 - - - 146 - - - - - - 1573.3 - - 153 - - 20 - - - 141 - - - - - - 1584.2 - - 152 - - 20 - - - 139 - - - - - - 1594.6 - - 152 - - 21 - - - 145 - - - - - - 1606.0 - - 152 - - 21 - - - 143 - - - - - - 1616.2 - - 152 - - 20 - - - 138 - - - - - - 1627.4 - - 152 - - 21 - - - 140 - - - - - - 1638.0 - - 152 - - 21 - - - 144 - - - - - - 1649.2 - - 151 - - 20 - - - 143 - - - - - - 1660.2 - - 152 - - 20 - - - 143 - - - - - - 1670.8 - - 151 - - 20 - - - 142 - - - - - - 1681.4 - - 151 - - 21 - - - 140 - - - - - - 1692.1 - - 151 - - 21 - - - 140 - - - - - - 1702.5 - - 150 - - 21 - - - 141 - - - - - - 1713.7 - - 150 - - 21 - - - 144 - - - - - - 1724.4 - - 150 - - 21 - - - 146 - - - - - - 1735.1 - - 150 - - 20 - - - 141 - - - - - - 1745.6 - - 150 - - 21 - - - 140 - - - - - - 1756.3 - - 150 - - 21 - - - 141 - - - - - - 1766.2 - - 151 - - 20 - - - 142 - - - - - - 1777.1 - - 150 - - 22 - - - 138 - - - - - - 1787.5 - - 150 - - 21 - - - 138 - - - - - - 1797.7 - - 150 - - 22 - - - 140 - - - - - - 1808.4 - - 150 - - 21 - - - 140 - - - - - - 1818.4 - - 149 - - 21 - - - 138 - - - - - - 1828.9 - - 149 - - 22 - - - 146 - - - - - - 1839.9 - - 149 - - 21 - - - 142 - - - - - - 1850.5 - - 148 - - 21 - - - 142 - - - - - - 1861.2 - - 148 - - 21 - - - 145 - - - - - - 1871.9 - - 147 - - 21 - - - 143 - - - - - - 1882.6 - - 147 - - 20 - - - 139 - - - - - - 1893.3 - - 148 - - 20 - - - 140 - - - - - - 1904.3 - - 149 - - 21 - - - 144 - - - - - - 1915.4 - - 149 - - 20 - - - 148 - - - - - - 1926.2 - - 150 - - 20 - - - 139 - - - - - - 1937.3 - - 151 - - 20 - - - 140 - - - - - - 1947.8 - - 152 - - 20 - - - 144 - - - - - - 1959.1 - - 152 - - 20 - - - 142 - - - - - - 1969.8 - - 153 - - 20 - - - 140 - - - - - - 1980.6 - - 153 - - 21 - - - 143 - - - - - - 1991.4 - - 153 - - 21 - - - 143 - - - - - - 2000.0 - - 154 - - 21 - - - 147 - - - - - - <Element 'Notes' at 0x1d49a6d8> - - - - rowsandall.com/rowingdata - - - rowingdata - - - 0 - 75 - - Release - - EN - 000-00000-00 - - diff --git a/rowers/views.py b/rowers/views.py index 8e374356..72b8d85c 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -1866,63 +1866,32 @@ def add_workout_from_strokedata(user,importid,data,strokedata, # Export workout to TCX and send to user's email address @login_required() def workout_tcxemail_view(request,id=0): - message = "" - successmessage = "" r = getrower(request.user) w = get_workout(id) - if (checkworkoutuser(request.user,w)): - if r.emailbounced: - message = "Please check your email address first. Email to this address bounced." - messages.error(request, message) - url = reverse(r.defaultlandingpage, - kwargs = { - 'id':int(id) - }) - - return HttpResponseRedirect(url) + if not checkworkoutuser(request.user,w): + raise PermissionDenied("Access denied") + row = rdata(w.csvfilename) - tcxfile,tcxmessg = stravastuff.createstravaworkoutdata(w,dozip=False) - if tcxfile == 0: - message = "Something went wrong (TCX export) "+tcxmessg - messages.error(request,message) - url = reverse(r.defaultlandingpage, - kwargs = { - 'id':int(id) - }) - return HttpResponseRedirect(url) - if tcxfile: - res = myqueue(queuehigh,handle_sendemailtcx, - r.user.first_name, - r.user.last_name, - r.user.email, - tcxfile, - emailbounced = r.emailbounced - ) + code = str(uuid4()) + tcxfilename = code+'.tcx' - successmessage = "The TCX file was sent to you per email" - messages.info(request,successmessage) + row.exporttotcx(tcxfilename) - - url = reverse(r.defaultlandingpage, - kwargs = { - 'id':int(id) - }) - response = HttpResponseRedirect(url) + with open(tcxfilename,'r') as f: + response = HttpResponse(f) + response['Content-Disposition'] = 'attachment; filename="%s"' % tcxfilename + response['Content-Type'] = 'application/octet-stream' - else: - message = "You are not allowed to export this workout" - messages.error(request,message) - url = reverse(r.defaultlandingpage, - kwargs = { - 'id':int(id) - }) - response = HttpResponseRedirect(url) - + os.remove(tcxfilename) return response + + + + @login_required() def plannedsessions_icsemail_view(request,userid=0): r = getrequestrower(request,userid=userid) @@ -2018,52 +1987,26 @@ def course_kmldownload_view(request,id=0): # Export workout to GPX and send to user's email address @login_required() def workout_gpxemail_view(request,id=0): - message = "" - successmessage = "" - r = Rower.objects.get(user=request.user) - if r.emailbounced: - message = "Please check your email address first. Email to this address bounced." - messages.error(request, message) - url = reverse(r.defaultlandingpage, - kwargs = { - 'id':int(id) - }) - - return HttpResponseRedirect(url) - + r = getrower(request.user) w = get_workout(id) - if (checkworkoutuser(request.user,w)): - filename = w.csvfilename - row = rdata(filename) - gpxfilename = filename[:-4]+'.gpx' - row.exporttogpx(gpxfilename) - res = myqueue(queuehigh,handle_sendemailtcx, - r.user.first_name, - r.user.last_name, - r.user.email,gpxfilename, - emailbounced = r.emailbounced - ) - + if not checkworkoutuser(request.user,w): + raise PermissionDenied("Access denied") - successmessage = "The GPX file was sent to you per email" - messages.info(request,successmessage) - url = reverse(r.defaultlandingpage, - kwargs = { - 'id':int(id) - }) - response = HttpResponseRedirect(url) + row = rdata(w.csvfilename) - else: - message = "You are not allowed to export this workout" - messages.error(request,message) - url = reverse(r.defaultlandingpage, - kwargs = { - 'id':str(w.id), - }) - response = HttpResponseRedirect(url) - + code = str(uuid4()) + gpxfilename = code+'.gpx' + + row.exporttogpx(gpxfilename) + + with open(gpxfilename,'r') as f: + response = HttpResponse(f) + response['Content-Disposition'] = 'attachment; filename="%s"' % gpxfilename + response['Content-Type'] = 'application/octet-stream' + + os.remove(gpxfilename) return response # Get Workout summary CSV file @@ -2111,46 +2054,23 @@ def workouts_summaries_email_view(request): # Get Workout CSV file and send it to user's email address @login_required() def workout_csvemail_view(request,id=0): - message = "" r = getrower(request.user) - if r.emailbounced: - message = "Please check your email address first. Email to this address bounced." - messages.error(request, message) - return HttpResponseRedirect( - reverse(r.defaultlandingpage, - kwargs = { - 'id':str(w.id), - }) - ) w = get_workout(id) - if (checkworkoutuser(request.user,w)): - csvfile = w.csvfilename - res = myqueue(queuehigh,handle_sendemailcsv,r.user.first_name, - r.user.last_name, - r.user.email,csvfile, - emailbounced = r.emailbounced - ) + if not checkworkoutuser(request.user,w): + raise PermissionDenied("Access denied") - successmessage = "The CSV file was sent to you per email" - messages.info(request,successmessage) - url = reverse(r.defaultlandingpage, - kwargs = { - 'id':str(w.id), - }) - response = HttpResponseRedirect(url) + rowdata = rdata(w.csvfilename) + code = str(uuid4()) + filename = code+'.csv' + + response = HttpResponse(rowdata.df.to_csv()) + response['Content-Disposition'] = 'attachment; filename="%s"' % filename + response['Content-Type'] = 'application/octet-stream' - else: - message = "You are not allowed to export this workout" - messages.error(request,message) - url = reverse(r.defaultlandingpage, - kwargs = { - 'id':str(w.id), - }) - response = HttpResponseRedirect(url) - return response + # Get Workout CSV file and send it to user's email address @login_required()