From d306bd55396f8973bcc13af1495d96cb0692b89d Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 23 May 2024 13:50:54 +0200 Subject: [PATCH 1/6] fixed form and tests updated --- .gitignore | 1 + rowers/tests/test_simplefunctions.py | 12 +++++++++--- rowers/tests/testdata/testdata.tcx.gz | Bin 4001 -> 4000 bytes rowers/tests/viewnames.csv | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 7f7af7f0..031d78ef 100644 --- a/.gitignore +++ b/.gitignore @@ -69,4 +69,5 @@ config.yaml /py2/ /py38/ /py39/ +/py39b/ /django2/ diff --git a/rowers/tests/test_simplefunctions.py b/rowers/tests/test_simplefunctions.py index 155efefb..59753174 100644 --- a/rowers/tests/test_simplefunctions.py +++ b/rowers/tests/test_simplefunctions.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals from .statements import * from django.http import Http404 +from django_recaptcha.client import RecaptchaResponse from rowers.views import get_workout @@ -69,7 +70,10 @@ class SimpleViewTest(TestCase): response = self.c.get(url) self.assertIn(response.status_code, [403, 404]) - def test_sendmail(self): + @patch("django_recaptcha.fields.client.submit") + def test_sendmail(self, mocked_submit): + mocked_submit.return_value = RecaptchaResponse(is_valid=True, extra_data={"score":0.95}) + login = self.c.login(username=self.u.username, password=self.password) self.assertTrue(login) @@ -80,18 +84,20 @@ class SimpleViewTest(TestCase): 'lastname': 'Doe', 'email': 'roosendaalsander@gmail.com', 'subject': 'testing', - 'botcheck': True, + 'captcha': 'sdsdsdsdsdsdss', + 'g-recaptcha-response': 'PASSED', 'message': faker.text()} form = EmailForm(form_data) + self.assertTrue(form.is_valid()) response = self.c.post(url, form_data, follow=True) self.assertEqual(response.status_code, 200) self.assertRedirects(response, - expected_url='/rowers/email/', + expected_url='/rowers/email/thankyou/', status_code=302, target_status_code=200) def test_getworkout(self): diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index f698047b282cb6c6568e64e30e5c276cb5cdb017..4f5560763c289b8ad84eb30e7cf12e2d9e54024d 100644 GIT binary patch literal 4000 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 GfB^thASfaL literal 4001 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 H#DD<+GyFmF diff --git a/rowers/tests/viewnames.csv b/rowers/tests/viewnames.csv index 245dbb17..0c19b5c5 100644 --- a/rowers/tests/viewnames.csv +++ b/rowers/tests/viewnames.csv @@ -134,7 +134,7 @@ 175,220,rower_favoritecharts_view,See favorite charts,TRUE,302,pro,200,302,pro,403,403,coach,200,403,FALSE,TRUE,FALSE,TRUE,TRUE, 176,222,workout_workflow_config2_view,configure workflow,TRUE,302,basic,200,302,basic,403,403,coach,200,403,FALSE,TRUE,FALSE,FALSE,FALSE, 177,224,workflow_default_view,resets workflow to default,TRUE,302,basic,302,302,FALSE,403,403,FALSE,302,403,FALSE,FALSE,FALSE,TRUE,TRUE, -178,225,sendmail,feedback form,TRUE,302,basic,302,302,FALSE,200,302,FALSE,200,302,FALSE,FALSE,FALSE,TRUE,TRUE, +178,225,sendmail,feedback form,TRUE,200,basic,200,302,FALSE,200,302,FALSE,200,302,FALSE,FALSE,FALSE,TRUE,TRUE, 180,232,laboratory_view,lab,TRUE,302,basic,200,302,basic,403,403,coach,200,403,FALSE,TRUE,FALSE,TRUE,TRUE, 181,233,errormessage_view,not used,TRUE,200,basic,200,302,basic,200,302,coach,200,302,FALSE,FALSE,FALSE,FALSE,FALSE, 182,237,payment_confirm_view,confirm payment,TRUE,200,basic,200,302,basic,200,302,coach,200,302,FALSE,FALSE,FALSE,FALSE,FALSE, From 9af5057d7c9a7463c4f97e7d61fc0e993eda2c0a Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 23 May 2024 16:29:27 +0200 Subject: [PATCH 2/6] fix --- rowers/nkimportutils.py | 1 + rowers/tasks.py | 4 ++++ rowers/tests/testdata/testdata.tcx.gz | Bin 4000 -> 3999 bytes 3 files changed, 5 insertions(+) diff --git a/rowers/nkimportutils.py b/rowers/nkimportutils.py index 67d65f85..b43d2b16 100644 --- a/rowers/nkimportutils.py +++ b/rowers/nkimportutils.py @@ -96,6 +96,7 @@ def add_workout_from_data(userid, nkid, data, strokedata, source='nk', splitdata oarInboardLength = 88 seatNumber = 1 oarlockfirmware = '' + boatName = '' workouttype = "water" boattype = "1x" diff --git a/rowers/tasks.py b/rowers/tasks.py index 8c46ca9f..b2f4456c 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -3188,6 +3188,10 @@ def handle_update_wps(rid, types, ids, mode, debug=False, **kwargs): wps_median = 0 except ColumnNotFoundError: wps_median = 0 + except TypeError: + wps_median = 0 + except ComputeError: + wps_median = 0 return wps_median diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 4f5560763c289b8ad84eb30e7cf12e2d9e54024d..08795a420e95f3ecdfec9738872e32c22d745ea9 100644 GIT binary patch delta 3903 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 O=YPZfX3_-2fB^up_2`oT From 3b1876103b82ab55e2a06c853ec154a450c344d1 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 23 May 2024 20:04:29 +0200 Subject: [PATCH 3/6] fix --- rowers/tasks.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rowers/tasks.py b/rowers/tasks.py index b2f4456c..dbf562d4 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -2069,7 +2069,10 @@ def handle_sendemail_breakthrough(workoutid, useremail, **kwargs): btvalues = pd.read_json(btvalues) - btvalues.sort_values('delta', axis=0, inplace=True) + try: + btvalues.sort_values('delta', axis=0, inplace=True) + except KeyError: + return 0 lastname = '' From 3cfcc2264632ff868c6056796a7e5d5c53807577 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 24 May 2024 10:22:34 +0200 Subject: [PATCH 4/6] flex2 --- rowers/interactiveplots.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index dd2ce2e3..3da01562 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -1971,7 +1971,7 @@ def interactive_flex_chart2(id, r, promember=0, 'plottype': plottype, } - script, div = get_chart("/flex", chart_data, debug=False) + script, div = get_chart("/flex2", chart_data, debug=False) return script, div, workstrokesonly From 8f58ef3067ed0cb15f74cc228389e9af7172696c Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 24 May 2024 10:35:54 +0200 Subject: [PATCH 5/6] fix nk import --- rowers/nkimportutils.py | 1 + rowers/tests/testdata/testdata.tcx.gz | Bin 3999 -> 3999 bytes 2 files changed, 1 insertion(+) diff --git a/rowers/nkimportutils.py b/rowers/nkimportutils.py index b43d2b16..2ea5b0eb 100644 --- a/rowers/nkimportutils.py +++ b/rowers/nkimportutils.py @@ -97,6 +97,7 @@ def add_workout_from_data(userid, nkid, data, strokedata, source='nk', splitdata seatNumber = 1 oarlockfirmware = '' boatName = '' + portStarboard = 'port' workouttype = "water" boattype = "1x" diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 08795a420e95f3ecdfec9738872e32c22d745ea9..424ee975e150b79c4f23dda4c83f346e85ed0c76 100644 GIT binary patch delta 257 zcmV+c0sj7=_3_KD@6vg@-P@I@d^+yn!R!9j*~OLD z>+)pTZI+2c{`BF|UAeD=C*At^@uS0^pJg`NKX==I zNpJD9*Qb9h)13j_1K9n4u(eV_uhldH}^5Ri?8h@lqAKv*No-sEw H#DD<+Z-Jqg delta 257 zcmV+c0sj7^grGgBAGhxc}i`u{+?-?o1zlWBz>kX|?&{?(IrcJ{@=P;C27%?BdF6 z^5FdZWOdZ_>8D@57?SXD=pI)y{US9s(-_rY-4!!blK5Ti~{U=>AI}5IGe*Sv5 z)jDnV@@c>AhRa9$#rY3jq?(f7$>COP|0qp)iSX}vH_vE*a>F~}L^=h4-!^4DfdGRPcjX%<*5AXaB+S+GD H#DD<+SumfN From 896d9423e1ba553320a8a4ce6163c8c5ef072651 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 25 May 2024 15:14:16 +0200 Subject: [PATCH 6/6] fix --- rowers/models.py | 13 +++++++++++-- rowers/tests/testdata/testdata.tcx.gz | Bin 3999 -> 3999 bytes rowers/views/analysisviews.py | 3 ++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/rowers/models.py b/rowers/models.py index e5da3360..08b45b26 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -3697,13 +3697,22 @@ class Workout(models.Model): def __str__(self): + try: + dates = self.date.strftime('%Y-%m-%d') + except AttributeError: + dates = '' + try: + durations = self.duration.strftime("%H:%M:%S"), + except AttributeError: + durations = '' + elements = dict( - date = self.date.strftime('%Y-%m-%d'), + date = dates, name = self.name, distance = str(self.distance)+'m', ownerfirst = self.user.user.first_name, ownerlast = self.user.user.last_name, - duration = self.duration.strftime("%H:%M:%S"), + duration = durations, boattype = self.boattype, workouttype = self.workouttype, seatnumber = 'seat '+str(self.seatnumber), diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 424ee975e150b79c4f23dda4c83f346e85ed0c76..8f7a45403b2c784b4c366ae2ef550ef8022ef921 100644 GIT binary patch delta 36 scmbO)KVP0*zMF%C_fg<{9 delta 36 scmbO)KVP0*zMF$X$3I{r`$|5xZyfyx%6cYm<9o<4&(PfXNCP7S0NxY~ivR!s diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py index 587db08d..327cce0b 100644 --- a/rowers/views/analysisviews.py +++ b/rowers/views/analysisviews.py @@ -2229,7 +2229,8 @@ def history_view_data(request, userid=0): df = df.with_columns(pl.col('time').diff().clip(lower_bound=0).alias("deltat")) except KeyError: # pragma: no cover pass - + except ColumnNotFoundError: + pass totalmeters, totalhours, totalminutes, totalseconds = get_totals( g_workouts)