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/views.py b/rowers/views.py index 0c690489..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' @@ -3696,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: @@ -3712,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: