From 3b490ea51e11b4764b5558a0e3c3f15955d8f9ee Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 23 Nov 2020 18:44:07 +0100 Subject: [PATCH] fixed power time fitness chart --- rowers/dataprep.py | 2 +- rowers/interactiveplots.py | 10 +++++++--- rowers/middleware.py | 1 - rowers/tasks.py | 24 +++++++++++++++++++----- rowers/views/analysisviews.py | 2 ++ 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 47decad9..c1cf63b0 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1037,7 +1037,7 @@ def fetchcp_new(rower,workouts): if len(data)>1: df = pd.concat(data,axis=0) - df = df = df[df['cp'] == df.groupby(['delta'])['cp'].transform('max')] + df = df[df['cp'] == df.groupby(['delta'])['cp'].transform('max')] df = df.sort_values(['delta']).reset_index() diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index c90db316..611cc1a4 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -1535,6 +1535,7 @@ def fitnessmetric_chart(fitnessmetrics,user,workoutmode='rower',startdate=None, power1hr = [int(m.PowerOneHour) for m in fitnessmetrics] dates = [m.date for m in fitnessmetrics] + mode = [m.workoutmode for m in fitnessmetrics] if len(power4min) == 0: @@ -1584,7 +1585,6 @@ def fitnessmetric_chart(fitnessmetrics,user,workoutmode='rower',startdate=None, ) ) - # fit resampled = groups.set_index('dates') @@ -1667,11 +1667,13 @@ def fitnessmetric_chart(fitnessmetrics,user,workoutmode='rower',startdate=None, plot.sizing_mode = 'stretch_both' plot.y_range = Range1d(0,1.5*max(power4min)) + startdate = datetime.datetime.combine(startdate,datetime.datetime.min.time()) + enddate = datetime.datetime.combine(enddate,datetime.datetime.min.time()) if not startdate: - startdate = min(date) + startdate = datetime.datetime.combine(min(date), datetime.datetime.min.time()) if not enddate: - enddate = max(date) + enddate = datetime.datetime.combine(max(date), datetime.datetime.min.time()) plot.x_range = Range1d( startdate,enddate, @@ -1689,6 +1691,8 @@ def fitnessmetric_chart(fitnessmetrics,user,workoutmode='rower',startdate=None, script,div = components(plot) + print(len(script)) + return [script,div] def interactive_histoall(theworkouts,histoparam,includereststrokes, diff --git a/rowers/middleware.py b/rowers/middleware.py index 42087eeb..2995dedf 100644 --- a/rowers/middleware.py +++ b/rowers/middleware.py @@ -58,7 +58,6 @@ def do_update(user,mode='rower',days=42): except ValueError: max_id = 0 - if last_update_date < now_date and max_workout_id < max_id: job = myqueue(queuelow, handle_updatefitnessmetric, diff --git a/rowers/tasks.py b/rowers/tasks.py index 871b575c..9269687d 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -201,8 +201,6 @@ def handle_strava_sync(stravatoken,workoutid,filename,name,activity_type,descrip failed = True except stravalib.exc.ObjectNotFound: failed = True - except stravalib.exc.TimeoutExceeded: - failed = True except ActivityUploadFailed: failed = True @@ -2078,12 +2076,28 @@ def cp_from_workoutids(workoutids,debug=False): maxt = 1.05*df['time'].max()/1000. logarr = datautils.getlogarr(maxt) + data = [] - delta,cpvalue,avgpower = datautils.getcp(dfgrouped,logarr) + for id in workoutids: + cpfile = 'media/cpdata_{id}.parquet.gz'.format(id=id) + try: + df = pd.read_parquet(cpfile) + df['workout'] = str(id) + data.append(df) + except: + pass # ignore for now + + if len(data) == 0: + return 0,0,0 + if len(data)>1: + df = pd.concat(data,axis=0) + + df = df[df['cp'] == df.groupby(['delta'])['cp'].transform('max')] + df = df.sort_values(['delta']).reset_index() powerdf = pd.DataFrame({ - 'Delta':delta, - 'CP':cpvalue, + 'Delta':df['delta'], + 'CP':df['cp'], }) powerdf = powerdf[powerdf['CP']>0] diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py index 3bde0c6d..1955a04e 100644 --- a/rowers/views/analysisviews.py +++ b/rowers/views/analysisviews.py @@ -1505,9 +1505,11 @@ def fitnessmetric_view(request,userid=0,mode='rower', fitnessmetrics = PowerTimeFitnessMetric.objects.filter( user=theuser, + workoutmode=mode, date__gte=startdate, date__lte=enddate) + script,thediv = fitnessmetric_chart( fitnessmetrics,theuser, workoutmode=mode,startdate=startdate,