Private
Public Access
1
0

adding testing for timezone stuff

This commit is contained in:
Sander Roosendaal
2021-06-16 18:49:13 +02:00
parent b04a25f7f7
commit 32df0fa9b3
4 changed files with 1892 additions and 50 deletions

View File

@@ -13,7 +13,7 @@ from rowers.models import (
import pytz import pytz
import collections import collections
import pendulum
from rowingdata import rowingdata as rrdata from rowingdata import rowingdata as rrdata
from rowingdata import rower as rrower from rowingdata import rower as rrower
@@ -1600,18 +1600,12 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
hrtr=r.tr, hran=r.an, ftp=r.ftp, hrtr=r.tr, hran=r.an, ftp=r.ftp,
powerperc=powerperc, powerzones=r.powerzones) powerperc=powerperc, powerzones=r.powerzones)
row = rdata(f2, rower=rr) row = rdata(f2, rower=rr)
if startdatetime != '': # pragma: no cover
row.rowdatetime = arrow.get(startdatetime).datetime
dologging('debuglog.log','Row Date Time (line 1606) = {rowdatetime}'.format( startdatetime,startdate,starttime,timezone_str,partofday = get_startdate_time_zone(r,row,startdatetime=startdatetime)
rowdatetime=row.rowdatetime,
))
if title is None or title == '': if title is None or title == '':
title = 'Workout' title = 'Workout'
partofday = getpartofday(row,r)
if partofday is not None: if partofday is not None:
title = '{partofday} {workouttype}'.format( title = '{partofday} {workouttype}'.format(
@@ -1721,55 +1715,19 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
summary = row.allstats() summary = row.allstats()
if startdatetime != '': # pragma: no cover workoutstartdatetime = startdatetime
workoutstartdatetime = arrow.get(startdatetime).datetime
else:
workoutstartdatetime = row.rowdatetime
if workoutstartdatetime.tzinfo is None: dologging('debuglog.log','Dataprep line 1721, Workout Startdatetime {workoutstartdatetime}'.format(
timezone_str = 'UTC'
try:
workoutstartdatetime = timezone.make_aware(workoutstartdatetime)
except ValueError:
pass
try:
latavg = row.df[' latitude'].mean()
lonavg = row.df[' longitude'].mean()
tf = TimezoneFinder()
try:
timezone_str = tf.timezone_at(lng=lonavg, lat=latavg)
except (ValueError,OverflowError): # pragma: no cover
timezone_str = 'UTC'
if timezone_str is None: # pragma: no cover
timezone_str = tf.closest_timezone_at(lng=lonavg,
lat=latavg)
if timezone_str is None: # pragma: no cover
timezone_str = r.defaulttimezone
try:
workoutstartdatetime = pytz.timezone(timezone_str).localize(
row.rowdatetime
)
except ValueError:
workoutstartdatetime = workoutstartdatetime.astimezone(
pytz.timezone(timezone_str)
)
except KeyError:
timezone_str = r.defaulttimezone
dologging('debuglog.log','Dataprep line 1763, Workout Startdatetime {workoutstartdatetime}'.format(
workoutstartdatetime=workoutstartdatetime, workoutstartdatetime=workoutstartdatetime,
)) ))
duration = totaltime_sec_to_string(totaltime) duration = totaltime_sec_to_string(totaltime)
workoutdate = workoutstartdatetime.strftime('%Y-%m-%d') workoutdate = startdate
workoutstarttime = workoutstartdatetime.strftime('%H:%M:%S') workoutstarttime = starttime
s = 'Dataprep line 1772 workoutdate and time set to {workoutdate} and {workoutstarttime}'.format( s = 'Dataprep line 1730 workoutdate and time set to {workoutdate} and {workoutstarttime}'.format(
workoutdate=workoutdate, workoutdate=workoutdate,
workoutstarttime=workoutstarttime, workoutstarttime=workoutstarttime,
) )
@@ -1882,6 +1840,57 @@ parsers = {
'hero': HeroParser, 'hero': HeroParser,
} }
def get_startdate_time_zone(r,row,startdatetime=None):
if startdatetime is not None and startdatetime != '':
timezone_str = pendulum.instance(startdatetime).timezone.name
else:
startdatetime = row.rowdatetime
partofday = getpartofday(row,r)
if startdatetime.tzinfo is None:
timezone_str = 'UTC'
try:
startdatetime = timezone.make_aware(startdatetime)
except ValueError:
pass
try:
latavg = row.df[' latitude'].mean()
lonavg = row.df[' longitude'].mean()
tf = TimezoneFinder()
try:
timezone_str = tf.timezone_at(lng=lonavg, lat=latavg)
except (ValueError,OverflowError): # pragma: no cover
timezone_str = 'UTC'
if timezone_str is None: # pragma: no cover
timezone_str = tf.closest_timezone_at(lng=lonavg,
lat=latavg)
if timezone_str is None: # pragma: no cover
timezone_str = r.defaulttimezone
try:
startdatetime = pytz.timezone(timezone_str).localize(
row.rowdatetime
)
except ValueError:
startdatetime = startdatetime.astimezone(
pytz.timezone(timezone_str)
)
except KeyError:
timezone_str = r.defaulttimezone
else:
timezone_str = str(startdatetime.tzinfo)
startdate = startdatetime.strftime('%Y-%m-%d')
starttime = startdatetime.strftime('%H:%M:%S')
return startdatetime,startdate,starttime,timezone_str,partofday
def parsenonpainsled(fileformat,f2,summary,startdatetime='',empowerfirmware=None,inboard=None,oarlength=None): def parsenonpainsled(fileformat,f2,summary,startdatetime='',empowerfirmware=None,inboard=None,oarlength=None):
try: try:
if fileformat == 'nklinklogbook' and empowerfirmware is not None: # pragma: no cover if fileformat == 'nklinklogbook' and empowerfirmware is not None: # pragma: no cover

View File

@@ -11,6 +11,8 @@ from rowers.models import update_records
from django.db import transaction from django.db import transaction
nu = datetime.datetime.now() nu = datetime.datetime.now()
import datetime
import pytz
# interactive plots # interactive plots
from rowers import interactiveplots from rowers import interactiveplots
@@ -20,6 +22,7 @@ from rowers import plannedsessions
from rowers.views.workoutviews import get_video_id from rowers.views.workoutviews import get_video_id
from rowers import stravastuff from rowers import stravastuff
import rowingdata
class OtherUnitTests(TestCase): class OtherUnitTests(TestCase):
def setUp(self): def setUp(self):
@@ -362,6 +365,7 @@ class DataPrepTests(TestCase):
rowerplan='coach') rowerplan='coach')
self.r.birthdate = timezone.now()-datetime.timedelta(days=25*365) self.r.birthdate = timezone.now()-datetime.timedelta(days=25*365)
self.r.defaulttimezone = 'Europe/Amsterdam'
self.r.save() self.r.save()
self.c = Client() self.c = Client()
@@ -404,6 +408,108 @@ class DataPrepTests(TestCase):
def tearDown(self): def tearDown(self):
pass pass
def test_timezones(self):
#row = rowingdata.rowingdata(csvfile='rowers.tests/testdata/testdata_210616_075409.csv')
row = rowingdata.rowingdata(csvfile='rowers/tests/testdata/testdata_210616_075409.csv')
aware = datetime.datetime(2021,6,16,7,54,9,999000,tzinfo=pytz.timezone('Europe/Amsterdam'))
row.rowdatetime = aware
startdatetime, startdate, starttime, timezone_str,partofday = dataprep.get_startdate_time_zone(self.r,row)
self.assertEqual(partofday,'Morning')
want = arrow.get('2021-06-16T07:54:09.999000+02:00').isoformat()
got = arrow.get(startdatetime).isoformat()
self.assertEqual(got, want)
self.assertEqual(timezone_str,'Europe/Amsterdam')
self.assertEqual(starttime,'07:54:09')
self.assertEqual(startdate,'2021-06-16')
def test_timezones2(self):
#row = rowingdata.rowingdata(csvfile='rowers.tests/testdata/testdata_210616_075409.csv')
row = rowingdata.rowingdata(csvfile='rowers/tests/testdata/testdata_210616_075409.csv')
naive = datetime.datetime(2021,6,16,7,54,9,999000)
timezone = pytz.timezone('Europe/Prague')
aware = timezone.localize(naive)
row.rowdatetime = aware
startdatetime, startdate, starttime, timezone_str,partofday = dataprep.get_startdate_time_zone(self.r,row,
startdatetime=aware)
self.assertEqual(partofday,'Morning')
want = arrow.get('2021-06-16T07:54:09.999000+02:00').isoformat()
got = arrow.get(startdatetime).isoformat()
self.assertEqual(got, want)
self.assertEqual(timezone_str,'Europe/Prague')
self.assertEqual(starttime,'07:54:09')
self.assertEqual(startdate,'2021-06-16')
def test_timezones3(self):
#row = rowingdata.rowingdata(csvfile='rowers.tests/testdata/testdata_210616_075409.csv')
row = rowingdata.rowingdata(csvfile='rowers/tests/testdata/testdata_210616_075409.csv')
naive = datetime.datetime(2021,6,16,7,54,9,999000)
row.rowdatetime = naive
startdatetime, startdate, starttime, timezone_str,partofday = dataprep.get_startdate_time_zone(self.r,row)
self.assertEqual(timezone_str,'Europe/Amsterdam')
def test_timezones4(self):
#row = rowingdata.rowingdata(csvfile='rowers.tests/testdata/testdata_210616_075409.csv')
row = rowingdata.rowingdata(csvfile='rowers/tests/testdata/testdata_210616_075409.csv')
naive = datetime.datetime(2021,6,15,19,55,13,400000)
timezone = pytz.timezone('America/Los_Angeles')
aware = timezone.localize(naive)
row.rowdatetime = aware
(
startdatetime,
startdate,
starttime,
timezone_str,
partofday
) = dataprep.get_startdate_time_zone(self.r,row,startdatetime=aware)
self.assertEqual(timezone_str,'America/Los_Angeles')
self.assertEqual(partofday,'Morning')
want = arrow.get('2021-06-15 19:55:13.400000-07:00').isoformat()
got = arrow.get(startdatetime).isoformat()
self.assertEqual(got, want)
self.assertEqual(starttime,'19:55:13')
self.assertEqual(startdate,'2021-06-15')
def test_timezones5(self):
#row = rowingdata.rowingdata(csvfile='rowers.tests/testdata/testdata_210616_075409.csv')
row = rowingdata.rowingdata(csvfile='rowers/tests/testdata/testdata_210616_075409.csv')
naive = datetime.datetime(2021,6,15,19,55,13,400000)
timezone = pytz.timezone('America/Los_Angeles')
aware = timezone.localize(naive)
row.rowdatetime = aware
(
startdatetime,
startdate,
starttime,
timezone_str,
partofday
) = dataprep.get_startdate_time_zone(self.r,row)
self.assertEqual(timezone_str,'America/Los_Angeles')
self.assertEqual(partofday,'Morning')
want = arrow.get('2021-06-15 19:55:13.400000-07:00').isoformat()
got = arrow.get(startdatetime).isoformat()
self.assertEqual(got, want)
self.assertEqual(starttime,'19:55:13')
self.assertEqual(startdate,'2021-06-15')
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_uh) @patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_uh)
def test_goldmedalstandard(self,mocked_getsmallrowdata_uh): def test_goldmedalstandard(self,mocked_getsmallrowdata_uh):
maxvalue, delta = dataprep.calculate_goldmedalstandard(self.r,self.wuh_otw) maxvalue, delta = dataprep.calculate_goldmedalstandard(self.r,self.wuh_otw)

View File

@@ -0,0 +1 @@
,sander,sander-pc,16.06.2021 17:04,file:///home/sander/.config/libreoffice/4;

File diff suppressed because it is too large Load Diff