adding testing for timezone stuff
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
1
rowers/tests/testdata/.~lock.testdata_210616_075409.csv#
vendored
Normal file
1
rowers/tests/testdata/.~lock.testdata_210616_075409.csv#
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
,sander,sander-pc,16.06.2021 17:04,file:///home/sander/.config/libreoffice/4;
|
||||||
1726
rowers/tests/testdata/testdata_210616_075409.csv
vendored
Normal file
1726
rowers/tests/testdata/testdata_210616_075409.csv
vendored
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user