From e5dc0bebc1ea50921b277145ac7c5575a3f0ed2e Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 11 Jan 2021 08:05:01 +0100 Subject: [PATCH 1/3] removed old code --- rowers/interactiveplots.py | 284 ------------------------------------- 1 file changed, 284 deletions(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 62e9fa1d..8e107017 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -156,72 +156,6 @@ def all_goldmedalstandards(workouts,startdate,enddate): return dates,testpowers,testduration,ids -def build_goldmedalstandards(workouts,kfitness): - dates = [] - testpower = [] - testduration = [] - fatigues = [] - fitnesses = [] - impulses = [] - - data = [] - goldmedalstandards = [] - goldmedaldurations = [] - workoutdt = [] - ids = [] - - outids = [] - - for w in workouts: - ids.append(w.id) - goldmedalstandard,goldmedalseconds = dataprep.workout_goldmedalstandard(w) - if goldmedalseconds > 60: - goldmedalstandards.append(goldmedalstandard) - goldmedaldurations.append(goldmedalseconds) - else: - goldmedalstandards.append(0) - goldmedaldurations.append(0) - workoutdt.append(arrow.get(w.date).datetime) - - df = pd.DataFrame({ - 'workout':ids, - 'workoutdt': workoutdt, - 'goldmedalstandard':goldmedalstandards, - 'goldmedalduration':goldmedaldurations, - }) - - df.sort_values(['workoutdt'],inplace=True) - - - for w in workouts: - ids = [ww.id for ww in workouts.filter(date__gte=w.date-datetime.timedelta(days=42), - date__lte=w.date)] - - - - powerdf = df[df['workout'].isin(ids)] - indexmax = powerdf['goldmedalstandard'].idxmax() - theid = powerdf.loc[indexmax,'workout'] - powertest = powerdf['goldmedalstandard'].max() - durationtest = powerdf.loc[indexmax,'goldmedalduration'] - - w2 = Workout.objects.get(id=theid) - dates.append(arrow.get(w2.date).datetime) - if powertest > 0: - testpower.append(powertest) - testduration.append(durationtest) - outids.append(theid) - else: - testpower.append(np.nan) - testduration.append(np.nan) - outids.append(np.nan) - - fatigues.append(np.nan) - fitnesses.append(np.nan) - impulses.append(np.nan) - - return dates, testpower, testduration, fatigues, fitnesses,impulses,outids - def get_testpower(workouts,fitnesstestsecs,kfitness): dates = [] @@ -2261,224 +2195,6 @@ def performance_chart(user,startdate=None,enddate=None,kfitness=42,kfatigue=7, return [script,div,endfitness,endfatigue,endform,outids] -def fitnessfit_chart(workouts,user,workoutmode='water',startdate=None, - enddate=None,kfitness=42,kfatigue=7,fitnesstest=20, - metricchoice='rscore', - k1=1,k2=1,p0=100, - modelchoice='tsb', - usegoldmedalstandard=False): - - TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair' - - - - workouts = workouts.order_by('date') - - fitnesstestsecs = fitnesstest*60 - df = pd.DataFrame() - - if not usegoldmedalstandard: - dates,testpower,testduration, fatigues,fitnesses = get_testpower( - workouts,fitnesstestsecs,kfitness - ) - else: - dates,testpower, testduration,fatigues,fitnesses,impulses = build_goldmedalstandards( - workouts,kfitness - ) - # create CP data - - df = pd.DataFrame({ - 'date':dates, - 'testpower':testpower, - 'testduration':testduration, - 'fatigue':fatigues, - 'fitness':fitnesses, - }) - df.sort_values(['date'],inplace=True) - - - df['testdup'] = df['testpower'].shift(1) - df['testpower'] = df.apply(lambda x: newtestpower(x),axis=1) - - try: - df['testpower'].iloc[-1] = df['testdup'].iloc[-1] - except IndexError: - pass - - - dates = [d for d in df['date']] - testpower = df['testpower'].values.tolist() - fatigues = df['fatigue'].values.tolist() - fitnesses = df['fitness'].values.tolist() - testduration = df['testduration'].values.tolist() - - fatigues,fitnesses,dates,testpower,testduration,impulses = getfatigues( - fatigues,fitnesses,dates,testpower,testduration, - startdate,enddate,user,metricchoice,kfatigue,kfitness - ) - - - df = pd.DataFrame({ - 'date':dates, - 'testpower':testpower, - 'testduration':testduration, - 'fatigue':fatigues, - 'fitness':fitnesses, - }) - - - - if modelchoice == 'banister': - df['fatigue'] = k2*df['fatigue'] - df['fitness'] = p0+k1*df['fitness'] - - - df['form'] = df['fitness']-df['fatigue'] - - - - df.sort_values(['date'],inplace=True) - df = df.groupby(['date']).max() - df['date'] = df.index.values - - - - - source = ColumnDataSource( - data = dict( - testpower = df['testpower'], - testduration = df['testduration'].apply(lambda x:totaltime_sec_to_string(x,shorten=True)), - date = df['date'], - fdate = df['date'].map(lambda x: x.strftime('%d-%m-%Y')), - fitness = df['fitness'], - fatigue = df['fatigue'], - form = df['form'], - ) - ) - - - - - plot = Figure(tools=TOOLS,x_axis_type='datetime', - plot_width=900, - toolbar_location="above", - toolbar_sticky=False) - - - # add watermark - watermarkurl = "/static/img/logo7.png" - watermarksource = ColumnDataSource(dict( - url = [watermarkurl],)) - - watermarkrange = Range1d(start=0,end=1) - watermarkalpha = 0.6 - watermarkx = 0.99 - watermarky = 0.01 - watermarkw = 184 - watermarkh = 35 - watermarkanchor = 'bottom_right' - plot.extra_y_ranges = {"watermark": watermarkrange} - plot.extra_x_ranges = {"watermark": watermarkrange} - - plot.image_url([watermarkurl],watermarkx,watermarky, - watermarkw,watermarkh, - global_alpha=watermarkalpha, - w_units='screen', - h_units='screen', - anchor=watermarkanchor, - dilate=True, - x_range_name = "watermark", - y_range_name = "watermark", - ) - - if modelchoice == 'banister': - fitlabel = 'PTE (fitness)' - fatiguelabel = 'NTE (fatigue)' - formlabel = 'Performance' - rightaxlabel = 'Banister PTE/NTE/Performance' - else: - fitlabel = 'CTL' - fatiguelabel = 'ATL' - formlabel = 'TSB' - rightaxlabel = 'Coggan CTL/ATL/TSB' - - if usegoldmedalstandard: - legend_label = 'Test Score' - yaxlabel = 'Test Score' - else: - legend_label = '{fitnesstest} min power'.format(fitnesstest=fitnesstest) - yaxlabel = 'Test Power (Watt)' - - plot.circle('date','testpower',source=source,fill_color='green',size=10, - legend_label=legend_label.format(fitnesstest=fitnesstest)) - - plot.xaxis.axis_label = 'Date' - plot.yaxis.axis_label = yaxlabel - - - y2rangemin = df.loc[:,['fitness','fatigue','form']].min().min() - y2rangemax = df.loc[:,['fitness','fatigue','form']].max().max() - plot.extra_y_ranges["yax2"] = Range1d(start=y2rangemin,end=y2rangemax) - plot.add_layout(LinearAxis(y_range_name="yax2",axis_label=rightaxlabel),"right") - - plot.line('date','fitness',source=source,color='blue', - legend_label=fitlabel,y_range_name="yax2") - band = Band(base='date', upper='fitness', source=source, level='underlay', - fill_alpha=0.2, fill_color='blue',y_range_name="yax2") - plot.add_layout(band) - plot.line('date','fatigue',source=source,color='red', - legend_label=fatiguelabel,y_range_name="yax2") - plot.line('date','form',source=source,color='green', - legend_label=formlabel,y_range_name="yax2") - - - - - plot.legend.location = "top_left" - - plot.xaxis.formatter = DatetimeTickFormatter( - days=["%d %B %Y"], - months=["%d %B %Y"], - years=["%d %B %Y"], - ) - - plot.xaxis.major_label_orientation = pi/4 - plot.sizing_mode = 'stretch_both' - - #plot.y_range = Range1d(0,1.5*max(df['testpower'])) - startdate = datetime.datetime.combine(startdate,datetime.datetime.min.time()) - enddate = datetime.datetime.combine(enddate,datetime.datetime.min.time()) - - plot.x_range = Range1d( - startdate,enddate+datetime.timedelta(days=5), - ) - plot.title.text = 'Power levels ('+workoutmode+') from workouts '+user.first_name - - hover = plot.select(dict(type=HoverTool)) - - hover.tooltips = OrderedDict([ - (legend_label,'@testpower{int}'), - ('Test', '@testduration'), - ('Date','@fdate'), - (fitlabel,'@fitness'), - (fatiguelabel,'@fatigue'), - (formlabel,'@form') - ]) - - try: - script,div = components(plot) - except Exception as e: - df.dropna(inplace=True,axis=0,how='any') - return ( - '', - 'Something went wrong with the chart ({nrworkouts} workouts, {nrdata} datapoints, error {e})'.format( - nrworkouts = workouts.count(), - nrdata = len(df), - e = e, - ) - ) - - return [script,div] def fitnessmetric_chart(fitnessmetrics,user,workoutmode='rower',startdate=None, enddate=None): From 44560a998f09ca76a974f61a48815ad86464c608 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 11 Jan 2021 08:05:32 +0100 Subject: [PATCH 2/3] removed link to fitness-fit --- rowers/urls.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/rowers/urls.py b/rowers/urls.py index b6a93b1c..15f336fc 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -352,9 +352,6 @@ urlpatterns = [ re_path(r'^fitness-progress/$',views.fitnessmetric_view,name='fitnessmetric_view'), re_path(r'^fitness-progress/user/(?P\d+)/$',views.fitnessmetric_view,name='fitnessmetric_view'), re_path(r'^fitness-progress/user/(?P\d+)/(?P\w+.*)/$',views.fitnessmetric_view,name='fitnessmetric_view'), - re_path(r'^fitness-fit/$',views.fitness_from_cp_view,name='fitness_from_cp_view'), - re_path(r'^fitness-fit/user/(?P\d+)/$',views.fitness_from_cp_view,name='fitness_from_cp_view'), - re_path(r'^fitness-fit/user/(?P\d+)/(?P\w+.*)/$',views.fitness_from_cp_view,name='fitness_from_cp_view'), re_path(r'^createmarkerworkouts/user/(?P\d+)/$',views.create_marker_workouts_view, name='create_marker_workouts_view'), re_path(r'^createmarkerworkouts/$',views.create_marker_workouts_view, From 37e953c133b3e907e9d5fb068831845bf6011945 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 12 Jan 2021 08:38:33 +0100 Subject: [PATCH 3/3] fix should have fixed on develop --- rowers/management/commands/processemail.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rowers/management/commands/processemail.py b/rowers/management/commands/processemail.py index 6835e089..0046e586 100644 --- a/rowers/management/commands/processemail.py +++ b/rowers/management/commands/processemail.py @@ -202,9 +202,10 @@ class Command(BaseCommand): res = polarstuff.get_all_new_workouts(polar_available) # Concept2 - rowers = Rower.objects.filter(c2_auto_import=True).exclude(rowerplan='basic') + rowers = Rower.objects.filter(c2_auto_import=True) for r in rowers: - c2stuff.get_c2_workouts(r) + if user_is_not_basic(rower.user): + c2stuff.get_c2_workouts(r) messages = Message.objects.filter(mailbox_id = workoutmailbox.id)