diff --git a/rowers/dataroutines.py b/rowers/dataroutines.py index 8671ee65..ce986ac3 100644 --- a/rowers/dataroutines.py +++ b/rowers/dataroutines.py @@ -1588,6 +1588,7 @@ def read_data(columns, ids=[], doclean=True, workstrokesonly=True, debug=False, for id, f in zip(ids, csvfilenames): if os.path.isfile(f): df = pl.scan_parquet(f) + data.append(df) else: rowdata, row = getrowdata(id=id) try: @@ -1599,7 +1600,7 @@ def read_data(columns, ids=[], doclean=True, workstrokesonly=True, debug=False, bands=True, otwpower=True, barchart=True, polars=True) df = pl.scan_parquet(f) - data.append(df) + data.append(df) data = pl.collect_all(data) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index f5aa990b..0098c007 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -1694,12 +1694,14 @@ def interactive_flexchart_stacked(id, r, xparam='time', row = Workout.objects.get(id=id) if ispromember(r.user): - rowdata = dataprep.getsmallrowdata_pl(columns, ids=[id], doclean=True, + rowdata = dataprep.read_data(columns, ids=[id], doclean=True, workstrokesonly=False, for_chart=True) else: - rowdata = dataprep.getsmallrowdata_pl(columns_basic, ids=[id], doclean=True, + rowdata = dataprep.read_data(columns_basic, ids=[id], doclean=True, workstrokesonly=False, for_chart=True) + rowdata = dataprep.remove_nulls_pl(rowdata) + if r.usersmooth > 1: # pragma: no cover for column in columns: try: @@ -1715,16 +1717,18 @@ def interactive_flexchart_stacked(id, r, xparam='time', if len(rowdata) < 2: if ispromember(r.user): - rowdata = dataprep.getsmallrowdata_pl(columns, ids=[id], + rowdata = dataprep.read_data(columns, ids=[id], doclean=False, workstrokesonly=False, for_chart=True) else: - rowdata = dataprep.getsmallrowdata_pl(columns_basic, ids=[id], + rowdata = dataprep.read_data(columns_basic, ids=[id], doclean=False, workstrokesonly=False, for_chart=True) + rowdata = dataprep.remove_nulls_pl(rowdata) + if rowdata.is_empty(): return "", "No valid data" diff --git a/rowers/tests/mocks.py b/rowers/tests/mocks.py index 012dddf2..cfae2db4 100644 --- a/rowers/tests/mocks.py +++ b/rowers/tests/mocks.py @@ -336,7 +336,7 @@ def mocked_getsmallrowdata_db(*args, **kwargs): return df -def mocked_getsmallrowdata_pl(*args, **kwargs): +def mocked_read_data(*args, **kwargs): df = pl.read_csv('rowers/tests/testdata/colsfromdb.csv') return df diff --git a/rowers/tests/test_unit_tests.py b/rowers/tests/test_unit_tests.py index 113faeb6..3c59620a 100644 --- a/rowers/tests/test_unit_tests.py +++ b/rowers/tests/test_unit_tests.py @@ -582,7 +582,7 @@ class DataPrepTests(TestCase): age = dataprep.calculate_age(born,today=today) self.assertEqual(age,49) - @patch('rowers.dataprep.getsmallrowdata_pl',side_effect=mocked_getsmallrowdata_uh) + @patch('rowers.dataprep.read_data',side_effect=mocked_getsmallrowdata_uh) def test_goldmedalstandard(self,mocked_getsmallrowdata_uh): maxvalue, delta = dataprep.calculate_goldmedalstandard(self.r,self.wuh_otw) records = CalcAgePerformance.objects.filter( @@ -703,7 +703,7 @@ class InteractivePlotTests(TestCase): self.assertFalse(len(div)==0) @patch('rowers.dataprep.create_engine') - @patch('rowers.dataprep.getsmallrowdata_pl', side_effect=mocked_getsmallrowdata_pl) + @patch('rowers.dataprep.read_data', side_effect=mocked_read_data) def test_interactive_chart(self, mocked_sqlalchemy, mocked_getsmallrowdata_db): workout = Workout.objects.filter(user=self.r,workouttype__in=mytypes.rowtypes)[0] @@ -735,9 +735,9 @@ class InteractivePlotTests(TestCase): self.assertFalse(len(div)==0) @patch('rowers.dataprep.create_engine') - @patch('rowers.dataprep.getsmallrowdata_pl', side_effect=mocked_getsmallrowdata_pl) + @patch('rowers.dataprep.read_data', side_effect=mocked_read_data) def test_interactive_flexchart_stacked(self, mocked_sqlalchemy, - mocked_getsmallrowdata_pl): + mocked_read_data): workout = Workout.objects.filter(user=self.r,workouttype__in=mytypes.rowtypes)[0] id = workout.id diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 76c3e0ac..5bf43e1e 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ