From 0438d3b3966c2e278b5a55fcad1c7aca8df41013 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 9 Aug 2021 20:30:38 +0200 Subject: [PATCH] removing date.today and replacing with timezone.now --- rowers/plannedsessions.py | 68 ++++++++++++++++---------- rowers/tests/test_unit_tests.py | 6 +++ rowers/tests/testdata/testdata.tcx.gz | Bin 0 -> 3999 bytes rowers/utils.py | 2 +- rowers/views/planviews.py | 15 ++++-- 5 files changed, 61 insertions(+), 30 deletions(-) create mode 100644 rowers/tests/testdata/testdata.tcx.gz diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index f1efda14..92a1e28c 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -26,6 +26,7 @@ queuehigh = django_rq.get_queue('low') import json import pandas as pd +import arrow from rowingdata import rowingdata as rrdata from rowingdata import rower as rrower @@ -350,7 +351,7 @@ def get_indoorraces(workout): return races -def get_todays_micro(plan,thedate=date.today()): +def get_todays_micro(plan,thedate=timezone.now()): thismicro = None thismacro = TrainingMacroCycle.objects.filter( @@ -381,7 +382,7 @@ def get_todays_micro(plan,thedate=date.today()): thismicro = thismicro[0] else: mms = TrainingMicroCycle.objects.all() - + return None return thismicro @@ -619,7 +620,7 @@ cratiocolors = { def is_session_complete_ws(ws,ps): ws = ws.order_by("date") if ws.count()==0: - today = date.today() + today = timezone.now() if today > ps.enddate: verdict = 'missed' ratio = 0 @@ -851,7 +852,7 @@ def get_team(request): return teamid def get_dates_timeperiod(request,startdatestring='',enddatestring='', - defaulttimeperiod='thisweek'): + defaulttimeperiod='thisweek',rower=None): # set start end date according timeperiod # should always return datetime.date @@ -883,40 +884,47 @@ def get_dates_timeperiod(request,startdatestring='',enddatestring='', startdate = enddate enddate = e + if rower is not None: + tz = pytz.timezone(rower.defaulttimezone) + startdate = arrow.get(startdate) + enddate = arrow.get(enddate) + startdate = startdate.astimezone(tz) + enddate = enddate.astimezone(tz) + return startdate,enddate daterangetester = re.compile('^(\d+-\d+-\d+)\/(\d+-\d+-\d+)') if timeperiod=='today': # pragma: no cover - startdate=date.today() - enddate=date.today() + startdate=timezone.now() + enddate=timezone.now() elif timeperiod=='last30': - startdate = date.today()-timezone.timedelta(days=30) - enddate = date.today()+timezone.timedelta(days=1) + startdate = timezone.now()-timezone.timedelta(days=30) + enddate = timezone.now()+timezone.timedelta(days=1) elif timeperiod=='tomorrow': # pragma: no cover - startdate=date.today()+timezone.timedelta(days=1) - enddate=date.today()+timezone.timedelta(days=1) + startdate=timezone.now()+timezone.timedelta(days=1) + enddate=timezone.now()+timezone.timedelta(days=1) elif timeperiod=='thisweek': # pragma: no cover - today = date.today() - startdate = date.today()-timezone.timedelta(days=today.weekday()) + today = timezone.now() + startdate = timezone.now()-timezone.timedelta(days=today.weekday()) enddate = startdate+timezone.timedelta(days=6) elif timeperiod=='thismonth': # pragma: no cover - today = date.today() + today = timezone.now() startdate = today.replace(day=1) enddate = startdate+timezone.timedelta(days=32) enddate = enddate.replace(day=1) enddate = enddate-timezone.timedelta(days=1) elif timeperiod=='lastweek': # pragma: no cover - today = date.today() + today = timezone.now() enddate = today-timezone.timedelta(days=today.weekday())-timezone.timedelta(days=1) startdate = enddate-timezone.timedelta(days=6) elif timeperiod=='nextweek': # pragma: no cover - today = date.today() + today = timezone.now() startdate = today-timezone.timedelta(days=today.weekday())+timezone.timedelta(days=7) enddate = startdate+timezone.timedelta(days=6) elif timeperiod=='lastmonth': # pragma: no cover - today = date.today() + today = timezone.now() startdate = today.replace(day=1) startdate = startdate-timezone.timedelta(days=3) startdate = startdate.replace(day=1) @@ -924,7 +932,7 @@ def get_dates_timeperiod(request,startdatestring='',enddatestring='', enddate = enddate.replace(day=1) enddate = enddate-timezone.timedelta(days=1) elif timeperiod=='nextmonth': # pragma: no cover - today = date.today() + today = timezone.now() startdate = today.replace(day=1) startdate = startdate+timezone.timedelta(days=32) startdate = startdate.replace(day=1) @@ -932,7 +940,7 @@ def get_dates_timeperiod(request,startdatestring='',enddatestring='', enddate = enddate.replace(day=1) enddate = enddate-timezone.timedelta(days=1) elif timeperiod=='lastyear': # pragma: no cover - today = date.today() + today = timezone.now() startdate = today-timezone.timedelta(days=365) enddate = today+timezone.timedelta(days=1) elif daterangetester.match(timeperiod): @@ -946,11 +954,11 @@ def get_dates_timeperiod(request,startdatestring='',enddatestring='', enddate = startdate startdate = startdate2 except ValueError: # pragma: no cover - startdate = date.today() - enddate = date.today() + startdate = timezone.now() + enddate = timezone.now() else: - startdate = date.today() - enddate = date.today() + startdate = timezone.now() + enddate = timezone.now() if startdatestring != '': @@ -965,10 +973,18 @@ def get_dates_timeperiod(request,startdatestring='',enddatestring='', except ParseError: pass + if rower is not None: + startdate = arrow.get(startdate) + enddate = arrow.get(enddate) + tz = pytz.timezone(rower.defaulttimezone) + startdate = startdate.astimezone(tz) + + enddate = enddate.astimezone(tz) + return startdate,enddate -def get_sessions_manager(m,teamid=0,startdate=date.today(), - enddate=date.today()+timezone.timedelta(+1000)): +def get_sessions_manager(m,teamid=0,startdate=timezone.now(), + enddate=timezone.now()+timezone.timedelta(+1000)): if teamid: # pragma: no cover t = Team.objects.get(id=teamid) rs = Rower.objects.filter(team__in=[t]).distinct() @@ -991,8 +1007,8 @@ def get_sessions_manager(m,teamid=0,startdate=date.today(), return sps -def get_sessions(r,startdate=date.today(), - enddate=date.today()+timezone.timedelta(+1000)): +def get_sessions(r,startdate=timezone.now(), + enddate=timezone.now()+timezone.timedelta(+1000)): sps = PlannedSession.objects.filter( rower__in=[r], diff --git a/rowers/tests/test_unit_tests.py b/rowers/tests/test_unit_tests.py index ebc81d96..a3848a97 100644 --- a/rowers/tests/test_unit_tests.py +++ b/rowers/tests/test_unit_tests.py @@ -514,6 +514,12 @@ class DataPrepTests(TestCase): self.assertEqual(starttime,'19:55:13') self.assertEqual(startdate,'2021-06-15') + def test_calculate_age(self): + today = timezone.now() + born = today-datetime.timedelta(days=45+49*365.2425) + age = dataprep.calculate_age(born,today=today) + self.assertEqual(age,49) + @patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_uh) def test_goldmedalstandard(self,mocked_getsmallrowdata_uh): maxvalue, delta = dataprep.calculate_goldmedalstandard(self.r,self.wuh_otw) diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz new file mode 100644 index 0000000000000000000000000000000000000000..7c15a6205385c4a37922a49869137eb422c2b09e GIT binary patch literal 3999 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 F0RU`RDCGbE literal 0 HcmV?d00001 diff --git a/rowers/utils.py b/rowers/utils.py index 335617b2..6cc8bcee 100644 --- a/rowers/utils.py +++ b/rowers/utils.py @@ -347,7 +347,7 @@ from datetime import date def calculate_age(born,today=None): if not today: - today = date.today() + today = timezone.now() if born: try: return today.year - born.year - ((today.month, today.day) < (born.month, born.day)) diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index 91e3b57a..72fcec0d 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -1387,7 +1387,7 @@ from rowers.plannedsessions import cratiocolors,checkscores def plannedsessions_view(request, userid=0,startdatestring='',enddatestring=''): - + try: r = getrequestplanrower(request,userid=userid) except PermissionDenied: # pragma: no cover @@ -1410,7 +1410,9 @@ def plannedsessions_view(request, startdate,enddate = get_dates_timeperiod( request, startdatestring=startdatestring, - enddatestring=enddatestring) + enddatestring=enddatestring, + rower=r) + try: trainingplan = TrainingPlan.objects.filter( @@ -2634,7 +2636,14 @@ def rower_view_instantplan(request,id='',userid=0): elif not request.user.is_anonymous: - form = InstantPlanSelectForm(targets=targets,instantplan=plan,initial={'datechoice':'startdate'}) + tz = pytz.timezone(r.defaulttimezone) + nowdate = timezone.now().astimezone(tz) + initial = { + 'datechoice':'startdate', + 'startdate': nowdate, + 'enddate': nowdate+datetime.timedelta(days=21) + } + form = InstantPlanSelectForm(targets=targets,instantplan=plan,initial=initial) else: # pragma: no cover form = None