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 collections
import pendulum
from rowingdata import rowingdata as rrdata
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,
powerperc=powerperc, powerzones=r.powerzones)
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(
rowdatetime=row.rowdatetime,
))
startdatetime,startdate,starttime,timezone_str,partofday = get_startdate_time_zone(r,row,startdatetime=startdatetime)
if title is None or title == '':
title = 'Workout'
partofday = getpartofday(row,r)
if partofday is not None:
title = '{partofday} {workouttype}'.format(
@@ -1721,55 +1715,19 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
summary = row.allstats()
if startdatetime != '': # pragma: no cover
workoutstartdatetime = arrow.get(startdatetime).datetime
else:
workoutstartdatetime = row.rowdatetime
workoutstartdatetime = startdatetime
if workoutstartdatetime.tzinfo is None:
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(
dologging('debuglog.log','Dataprep line 1721, Workout Startdatetime {workoutstartdatetime}'.format(
workoutstartdatetime=workoutstartdatetime,
))
duration = totaltime_sec_to_string(totaltime)
workoutdate = workoutstartdatetime.strftime('%Y-%m-%d')
workoutstarttime = workoutstartdatetime.strftime('%H:%M:%S')
workoutdate = startdate
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,
workoutstarttime=workoutstarttime,
)
@@ -1882,6 +1840,57 @@ parsers = {
'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):
try:
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
nu = datetime.datetime.now()
import datetime
import pytz
# interactive plots
from rowers import interactiveplots
@@ -20,6 +22,7 @@ from rowers import plannedsessions
from rowers.views.workoutviews import get_video_id
from rowers import stravastuff
import rowingdata
class OtherUnitTests(TestCase):
def setUp(self):
@@ -362,6 +365,7 @@ class DataPrepTests(TestCase):
rowerplan='coach')
self.r.birthdate = timezone.now()-datetime.timedelta(days=25*365)
self.r.defaulttimezone = 'Europe/Amsterdam'
self.r.save()
self.c = Client()
@@ -404,6 +408,108 @@ class DataPrepTests(TestCase):
def tearDown(self):
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)
def test_goldmedalstandard(self,mocked_getsmallrowdata_uh):
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