From ee0229a43df400e70567a707e04623977dd8e5ec Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 13 Apr 2024 11:46:08 +0200 Subject: [PATCH] adding more data filtering exception catching --- rowers/dataroutines.py | 28 +++++++++++++++++++++------- rowers/interactiveplots.py | 6 +++++- rowers/views/analysisviews.py | 7 +++++++ rowers/views/statements.py | 1 + 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/rowers/dataroutines.py b/rowers/dataroutines.py index 3e782ffc..09e70f02 100644 --- a/rowers/dataroutines.py +++ b/rowers/dataroutines.py @@ -679,6 +679,8 @@ def clean_df_stats_pl(datadf, workstrokesonly=True, ignorehr=True, datadf['workoutid'] = 0 except TypeError: datadf = datadf.with_columns(pl.lit(0).alias("workoutid")) + except ColumnNotFoundError: + datadf = datadf.with_columns(pl.lit(0).alias("workoutid")) before = {} ids = list(datadf['workoutid'].unique()) @@ -689,39 +691,51 @@ def clean_df_stats_pl(datadf, workstrokesonly=True, ignorehr=True, # bring metrics which have negative values to positive domain if len(datadf) == 0: - return datadf + return data_orig try: datadf = datadf.with_columns((-pl.col('catch')).alias('catch')) - except (KeyError, TypeError, InvalidOperationError): + except (KeyError, TypeError): pass + except(ComputeError, InvalidOperationError, ColumnNotFoundError): + return data_orig try: datadf = datadf.with_columns((pl.col('peakforceangle')+1000).alias('peakforceangle')) - except (KeyError, TypeError, InvalidOperationError): + except (KeyError, TypeError): pass + except(ComputeError, InvalidOperationError, ColumnNotFoundError): + return data_orig try: datadf = datadf.with_columns((pl.col('hr')+10).alias('hr')) - except (KeyError, TypeError, InvalidOperationError): + except (KeyError, TypeError): pass + except(ComputeError, InvalidOperationError, ColumnNotFoundError): + return data_orig # protect 0 spm values from being nulled try: datadf = datadf.with_columns((pl.col('spm')+1.0).alias('spm')) - except (KeyError, TypeError, InvalidOperationError): + except (KeyError, TypeError): pass + except(ComputeError, InvalidOperationError, ColumnNotFoundError): + return data_orig # protect 0 workoutstate values from being nulled try: datadf = datadf.with_columns((pl.col('workoutstate')+1).alias('workoutstate')) - except (KeyError, TypeError, InvalidOperationError): + except (KeyError, TypeError): pass + except(ComputeError, InvalidOperationError, ColumnNotFoundError): + return data_orig try: datadf = datadf.select(pl.all().clip(lower_bound=0)) # datadf = datadf.clip(lower=0) - except TypeError: + except (TypeError): pass + except(ComputeError, InvalidOperationError, ColumnNotFoundError): + return data_orig # protect advanced metrics columns advancedcols = [ diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 1bd5c621..1f8a073f 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -195,7 +195,11 @@ def interactive_hr_piechart(df, rower, title, totalseconds=0): if df.is_empty(): return "", "Not enough data to make a chart" - df = df.sort("hr") + try: + df = df.sort("hr") + except ColumnNotFoundError: + return "", "Not enough data to make a chart" + df = df.with_columns((pl.col("deltat")*pl.col("hr")).alias("deltat")) sumtimehr = df['deltat'].sum() diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py index 7008586d..391d92ad 100644 --- a/rowers/views/analysisviews.py +++ b/rowers/views/analysisviews.py @@ -2482,11 +2482,18 @@ def history_view_data(request, userid=0): meters, hours, minutes, seconds = get_totals(a_workouts) totalseconds = 3600 * hours + 60 * minutes + seconds ddf = getsmallrowdata_pl(columns, ids=[w.id for w in a_workouts]) + if ddf.is_empty(): + totalscript = "" + totaldiv = "No data" try: ddf = ddf.with_columns(pl.col("time").diff().clip(lower_bound=0).alias("deltat")) except KeyError: pass + except ColumnNotFoundError: + totalscript = "" + totaldiv = "No data" + ddf = dataprep.clean_df_stats_pl(ddf, workstrokesonly=True, ignoreadvanced=True) diff --git a/rowers/views/statements.py b/rowers/views/statements.py index fc48d89a..4eb83f0a 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -205,6 +205,7 @@ from rowers.rojabo_stuff import rojabo_open from rowers.integrations import * +from polars.exceptions import ColumnNotFoundError import rowers.ownapistuff as ownapistuff from rowers.ownapistuff import TEST_CLIENT_ID, TEST_CLIENT_SECRET, TEST_REDIRECT_URI