diff --git a/rowers/c2stuff.py b/rowers/c2stuff.py index 13f3e0e4..d94b9a9a 100644 --- a/rowers/c2stuff.py +++ b/rowers/c2stuff.py @@ -77,6 +77,72 @@ def c2wc(weightclass): return res + +def summaryfromsplitdata(splitdata,data,filename,sep='|'): + + totaldist = data['distance'] + totaltime = data['time']/10. + spm = data['stroke_rate'] + resttime = data['rest_time']/10. + restdistance = data['rest_distance'] + try: + avghr = data['heart_rate']['average'] + except KeyError: + avghr = 0 + try: + maxhr = data['heart_rate']['max'] + except KeyError: + maxhr = 0 + + avgpace = 500.*totaltime/totaldist + restpace = 500.*resttime/restdistance + + velo = totaldist/totaltime + avgpower = 2.8*velo**(3.0) + + restvelo = restdistance/resttime + restpower = 2.8*restvelo**(3.0) + + avgdps = totaldist/data['stroke_count'] + + from rowingdata import summarystring,workstring,interval_string + + sums = summarystring(totaldist,totaltime,avgpace,spm,avghr,maxhr, + avgdps,avgpower,readFile=filename, + separator=sep) + + sums += workstring(totaldist,totaltime,avgpace,spm,avghr,maxhr, + avgdps,avgpower,separator=sep,symbol='W') + + sums += workstring(restdistance,resttime,restpace,0,0,0,0,restpower, + separator=sep, + symbol='R') + + intervalnr=0 + for interval in splitdata: + idist = interval['distance'] + itime = interval['time']/10. + ipace = 500.*itime/idist + ispm = interval['stroke_rate'] + try: + iavghr = interval['heart_rate']['average'] + except KeyError: + iavghr = 0 + + try: + imaxhr = interval['heart_rate']['average'] + except KeyError: + imaxhr = 0 + + ivelo = idist/itime + ipower = 2.8*ivelo**(3.0) + + sums += interval_string(intervalnr,idist,itime,ipace,ispm, + iavghr,imaxhr,0,ipower,separator=sep) + intervalnr+=1 + + return sums + def createc2workoutdata_as_splits(w): filename = w.csvfilename row = rowingdata(filename) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index be61191e..0dc9ba73 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -1714,7 +1714,7 @@ def interactive_comparison_chart(id1=0,id2=0,xparam='distance',yparam='spm', seconds = ["%S"], minutes = ["%M"] ) - + plot.y_range = Range1d(ymin,ymax) #plot.y_range = Range1d(ymin,ymax) hover = plot.select(dict(type=HoverTool)) 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 diff --git a/rowers/views.py b/rowers/views.py index 1d1a64c2..1c9afaa5 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -319,7 +319,8 @@ def checkworkoutuser(user,workout): except Rower.DoesNotExist: return(False) -def add_workout_from_strokedata(user,importid,data,strokedata,source='c2'): +def add_workout_from_strokedata(user,importid,data,strokedata, + source='c2',splitdata=None): workouttype = data['type'] if workouttype not in [x[0] for x in Workout.workouttypes]: workouttype = 'water' @@ -929,6 +930,15 @@ def workout_strava_upload_view(request,id=0): res = stravastuff.handle_stravaexport(f,w.name, r.stravatoken, description=w.notes) + except: + with open("media/stravaerrors.log","a") as errorlog: + errorstring = str(sys.exc_info()[0]) + timestr = strftime("%Y%m%d-%H%M%S") + errorlog.write(timestr+errorstring+"\r\n") + errorlog.write("views.py line 937\r\n") + message = 'Error: '+errorstring + res = 0 + try: w.uploadedtostrava = res w.save() os.remove(tcxfile) @@ -939,7 +949,7 @@ def workout_strava_upload_view(request,id=0): errorstring = str(sys.exc_info()[0]) timestr = strftime("%Y%m%d-%H%M%S") errorlog.write(timestr+errorstring+"\r\n") - errorlog.write("views.py line 946\r\n") + errorlog.write("views.py line 952\r\n") message = 'Error: '+errorstring @@ -3687,6 +3697,12 @@ def workout_getc2workout_view(request,c2id): res = c2stuff.get_c2_workout(request.user,c2id) if (res.status_code == 200): data = res.json()['data'] + splitdata = None + if 'splits' in data['workout']: + splitdata = data['workout']['splits'] + if 'intervals' in data['workout']: + splitdata = data['workout']['intervals'] + if data['stroke_data']: res2 = c2stuff.get_c2_workout_strokes(request.user,c2id) else: @@ -3703,7 +3719,17 @@ def workout_getc2workout_view(request,c2id): source='c2') w = Workout.objects.get(id=id) w.uploadedtoc2=c2id - w.save() + if splitdata: + try: + w.summary = c2stuff.summaryfromsplitdata(splitdata,data,w.csvfilename) + except: + with open("media/c2splitdata.log","a") as errorlog: + errorstring = str(sys.exc_info()[0]) + timestr = strftime("%Y%m%d-%H%M%S") + errorlog.write(timestr+errorstring+"\r\n") + errorlog.write("views.py line 952\r\n") + + w.save() url = "/rowers/workout/"+str(id)+"/edit" return HttpResponseRedirect(url) else: