diff --git a/rowers/alerts.py b/rowers/alerts.py index e88dbcdf..5d8106c5 100644 --- a/rowers/alerts.py +++ b/rowers/alerts.py @@ -100,8 +100,22 @@ def alert_get_stats(alert, nperiod=0): # pragma: no cover boattype=alert.boattype) ids = [w.id for w in workouts] - df = getsmallrowdata_db(columns, ids=ids, doclean=True, - workstrokesonly=workstrokesonly) + try: + df = getsmallrowdata_db(columns, ids=ids, doclean=True, + workstrokesonly=workstrokesonly) + except: + return { + 'workouts': workouts.count(), + 'startdate': startdate, + 'enddate': enddate, + 'nr_strokes': 0, + 'nr_strokes_qualifying': 0, + 'percentage': 0, + 'nperiod': nperiod, + 'median': 0, + 'median_q': 0, + 'standard_dev': 0, + } if df.empty: return { diff --git a/rowers/dataroutines.py b/rowers/dataroutines.py index ead26e09..49fdb091 100644 --- a/rowers/dataroutines.py +++ b/rowers/dataroutines.py @@ -1246,8 +1246,11 @@ def getsmallrowdata_db(columns, ids=[], doclean=True, workstrokesonly=True, comp if rowdata and len(rowdata.df): _ = dataprep(rowdata.df, id=id, bands=True, otwpower=True, barchart=True) - df = pd.read_parquet(f, columns=columns) - data.append(df) + try: + df = pd.read_parquet(f, columns=columns) + data.append(df) + except (OSError, ArrowInvalid, IndexError): + pass try: df = pd.concat(data, axis=0) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index faad59d2..063ff6f0 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -365,6 +365,9 @@ def interactive_boxchart(datadf, fieldname, extratitle='', plot.y_range = yrange1 plot.sizing_mode = 'stretch_both' + if extratitle: + plot.title.text = extratitle + plot.xaxis.axis_label = 'Date' plot.yaxis.axis_label = axlabels[fieldname] @@ -1970,6 +1973,7 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue= def interactive_histoall(theworkouts, histoparam, includereststrokes, spmmin=0, spmmax=55, + extratitle='', workmin=0, workmax=1500): TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair' @@ -2013,6 +2017,10 @@ def interactive_histoall(theworkouts, histoparam, includereststrokes, toolbar_location="above" ) + if extratitle: + plot.title.text = extratitle + + # add watermark watermarkurl = "/static/img/logo7.png" watermarkrange = Range1d(start=0, end=1) @@ -4470,6 +4478,9 @@ def interactive_multiflex(datadf, xparam, yparam, groupby, extratitle='', gr=groupname, ) + if extratitle is not None: + title = title+' '+extratitle + if xparam == 'cumdist': # pragma: no cover res = make_cumvalues(datadf[xparam]) datadf[xparam] = res[0] @@ -4659,6 +4670,7 @@ def interactive_cum_flex_chart2(theworkouts, promember=0, yparam1='power', yparam2='spm', workstrokesonly=False, + extratitle='', trendline=False): # datadf = dataprep.smalldataprep(theworkouts,xparam,yparam1,yparam2) @@ -4789,6 +4801,10 @@ def interactive_cum_flex_chart2(theworkouts, promember=0, plot.extra_x_ranges = {"watermark": watermarkrange} plot.sizing_mode = 'stretch_both' + if extratitle: + plot.title.text = extratitle + + plot.image_url([watermarkurl], watermarkx, watermarky, watermarkw, watermarkh, global_alpha=watermarkalpha, diff --git a/rowers/templates/statsdiv.html b/rowers/templates/statsdiv.html index a4072f22..767c99b4 100644 --- a/rowers/templates/statsdiv.html +++ b/rowers/templates/statsdiv.html @@ -1,6 +1,6 @@ {% if stats %} -

Statistics

+

Statistics {{ extratitle }}

@@ -28,7 +28,7 @@ {% endfor %} -
+ {% endif %} @@ -67,10 +67,6 @@ {% endfor %} - + {% endif %} - - - - diff --git a/rowers/templates/user_analysis_select.html b/rowers/templates/user_analysis_select.html index 19e18d75..bd6f982a 100644 --- a/rowers/templates/user_analysis_select.html +++ b/rowers/templates/user_analysis_select.html @@ -528,7 +528,7 @@