diff --git a/rowers/courses.py b/rowers/courses.py index c685450c..3e9fa947 100644 --- a/rowers/courses.py +++ b/rowers/courses.py @@ -370,6 +370,7 @@ def coursetokml(course,cn=False): def kmltocourse(f): doc = et.parse(f) + courses = doc.findall('.//opengis:Folder[opengis:Placemark]', ns) if not courses: # pragma: no cover diff --git a/rowers/dataprep.py b/rowers/dataprep.py index acceef39..17fc7ee9 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -539,7 +539,10 @@ def setcp(workout, background=False, recurrance=True): if df['delta'][0] in tarr: return(df, df['delta'], df['cp']) except Exception as e: - pass + try: + os.remove(filename) + except: + pass strokesdf = read_data( ['power', 'workoutid', 'time'], ids=[workout.id]) @@ -597,9 +600,8 @@ def setcp(workout, background=False, recurrance=True): }) df = df.drop_nulls() + df.write_parquet(filename,compression='gzip') - with gzip.open(filename, 'w') as f: - df.write_parquet(f) except Exception as e: dologging("metrics.log", "setcp: "+ str(e)) return pl.DataFrame({'delta': [], 'cp': []}), pl.Series(dtype=pl.Float64), pl.Series(dtype=pl.Float64) diff --git a/rowers/tests/test_api.py b/rowers/tests/test_api.py index 3aee087e..1187265e 100644 --- a/rowers/tests/test_api.py +++ b/rowers/tests/test_api.py @@ -210,6 +210,24 @@ class OwnApi(TestCase): response = strokedata_tcx(request) self.assertEqual(response.status_code,200) + def test_strokedataform_empty(self): + login = self.c.login(username=self.u.username, password=self.password) + self.assertTrue(login) + + w = self.user_workouts[1] + + url = reverse('strokedata_tcx') + + request = self.factory.post(url, data = '', content_type='application/xml') + request.user = self.u + request.content_type = 'application/xml' + + force_authenticate(request, user=self.u) + with patch('rowers.dataprep.getrowdata_db') as mock_getrowdata: + mock_getrowdata.return_value = (pd.DataFrame(),None) + response = strokedata_tcx(request) + self.assertEqual(response.status_code,405) + def test_strokedataform_v3(self): login = self.c.login(username=self.u.username, password=self.password) diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index cb98d752..13ada0eb 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ diff --git a/rowers/views/apiviews.py b/rowers/views/apiviews.py index 5ef9c3a3..e0cf44db 100644 --- a/rowers/views/apiviews.py +++ b/rowers/views/apiviews.py @@ -434,7 +434,7 @@ def strokedata_tcx(request): """ if request.method != 'POST': # pragma: no cover dologging('apilog.log','GET request to TCX endpoint') - return HttpResponseNotAllowed("Method not supported") + return HttpResponseNotAllowed("Method not supported") if 'application/xml' not in request.content_type.lower(): # pragma: no cover dologging('apilog.log','POST data not application/xml, request to TCX endpoint') diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py index 24afc0f0..cb88ba4f 100644 --- a/rowers/views/racesviews.py +++ b/rowers/views/racesviews.py @@ -812,8 +812,18 @@ def course_upload_view(request): if f is not None: filename, path_and_filename = handle_uploaded_file(f) + try: + cs = courses.kmltocourse(path_and_filename) + except ParseError: + os.remove(path_and_filename) + messages.error( + request, 'Something went wrong - error parsing the file') + url = reverse(course_upload_view) - cs = courses.kmltocourse(path_and_filename) + if is_ajax: + return JSONResponse({'result': 0, 'url': 0}) + else: + return HttpResponseRedirect(url) for course in cs: cname = name+' - '+course['name']