From 3497325a0d2041af26fa9964d8c1dcdd471e82d5 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 19 Oct 2020 18:05:42 +0200 Subject: [PATCH 1/3] bug fix --- rowers/views/analysisviews.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py index a450e83d..e7af9c3a 100644 --- a/rowers/views/analysisviews.py +++ b/rowers/views/analysisviews.py @@ -5031,7 +5031,10 @@ def history_view_data(request,userid=0): ignoreadvanced=True) ddict['hrmean'] = int(wavg(ddf,'hr','deltat')) - ddict['hrmax'] = ddf['hr'].max().astype(int) + try: + ddict['hrmax'] = ddf['hr'].max().astype(int) + except ValueError: + ddict['hrmax'] = 0 ddict['powermean'] = int(wavg(df,'power','deltat')) ddict['powermax'] = ddf['power'].max().astype(int) ddict['nrworkouts'] = a_workouts.count() From f81d934739130f6dba5a2c4fac28cb1810f35782 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 19 Oct 2020 18:23:30 +0200 Subject: [PATCH 2/3] offline background cp chart creation --- rowers/dataprep.py | 12 +++++++++--- rowers/tasks.py | 32 ++++++++++++++++++++++++++++++++ rowers/views/analysisviews.py | 1 + 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index d18c0707..646ab380 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -23,7 +23,7 @@ from rowingdata import ( get_file_type, get_empower_rigging,get_empower_firmware ) -from rowers.tasks import handle_sendemail_unrecognized +from rowers.tasks import handle_sendemail_unrecognized,handle_setcp from rowers.tasks import handle_zip_file from pandas import DataFrame, Series @@ -1044,8 +1044,14 @@ def fetchcp_new(rower,workouts): return df['delta'],df['cp'],0,df['workout'] -def setcp(workout): +def setcp(workout,background=False): + filename = 'media/cpdata_{id}.parquet.gz'.format(id=workout.id) + strokesdf = getsmallrowdata_db(['power','workoutid','time'],ids = [workout.id]) + if background: + job = myqueue(queuelow,handle_setcp,strokesdf,filename,workout.id) + return job.id + if not strokesdf.empty: totaltime = strokesdf['time'].max() try: @@ -1061,7 +1067,7 @@ def setcp(workout): logarr = datautils.getlogarr(maxt) dfgrouped = strokesdf.groupby(['workoutid']) delta, cpvalues, avgpower = datautils.getcp(dfgrouped, logarr) - filename = 'media/cpdata_{id}.parquet.gz'.format(id=workout.id) + df = pd.DataFrame({ 'delta':delta, 'cp':cpvalues, diff --git a/rowers/tasks.py b/rowers/tasks.py index 21165f54..ed17eb58 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -2704,6 +2704,38 @@ def handle_sendemail_invite_reject(email, name, teamname, managername, return 1 +@app.task +def handle_setcp(strokesdf,filename,workoutid,debug=False,**kwargs): + try: + os.remove(filename) + except FileNotFoundError: + pass + if not strokesdf.empty: + totaltime = strokesdf['time'].max() + try: + powermean = strokesdf['power'].mean() + except KeyError: + powermean = 0 + + if powermean != 0: + thesecs = totaltime + maxt = 1.05 * thesecs + + if maxt > 0: + logarr = datautils.getlogarr(maxt) + dfgrouped = strokesdf.groupby(['workoutid']) + delta, cpvalues, avgpower = datautils.getcp(dfgrouped, logarr) + + df = pd.DataFrame({ + 'delta':delta, + 'cp':cpvalues, + 'id':workoutid, + }) + df.to_parquet(filename,engine='fastparquet',compression='GZIP') + return 1 + + return 1 + @app.task def handle_sendemail_invite_accept(email, name, teamname, managername, debug=False,**kwargs): diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py index e7af9c3a..ad3a1125 100644 --- a/rowers/views/analysisviews.py +++ b/rowers/views/analysisviews.py @@ -5035,6 +5035,7 @@ def history_view_data(request,userid=0): ddict['hrmax'] = ddf['hr'].max().astype(int) except ValueError: ddict['hrmax'] = 0 + ddict['powermean'] = int(wavg(df,'power','deltat')) ddict['powermax'] = ddf['power'].max().astype(int) ddict['nrworkouts'] = a_workouts.count() From a747d47fed584278360e628b6899e9e29b627c88 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 19 Oct 2020 18:28:34 +0200 Subject: [PATCH 3/3] bug fix --- rowers/dataprepnodjango.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rowers/dataprepnodjango.py b/rowers/dataprepnodjango.py index 69e9f5af..a6ca3b5f 100644 --- a/rowers/dataprepnodjango.py +++ b/rowers/dataprepnodjango.py @@ -173,7 +173,10 @@ def create_c2_stroke_data_db( except ZeroDivisionError: spm = 20*np.zeros(nr_strokes) - step = totalseconds/float(nr_strokes) + try: + step = totalseconds/float(nr_strokes) + except ZeroDivisionError: + return 0 elapsed = np.arange(nr_strokes)*totalseconds/(float(nr_strokes-1))