Private
Public Access
1
0

Merge branch 'release/v16.4.13'

This commit is contained in:
Sander Roosendaal
2021-06-16 20:25:21 +02:00
5 changed files with 1910 additions and 68 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,66 +1715,23 @@ 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
timezone_str = 'UTC'
try:
workoutstartdatetime = timezone.make_aware(workoutstartdatetime)
except ValueError:
pass
dologging('debuglog.log','Dataprep line 1737, Workout Startdatetime {workoutstartdatetime}'.format(
dologging('debuglog.log','Dataprep line 1721, Workout Startdatetime {workoutstartdatetime}'.format(
workoutstartdatetime=workoutstartdatetime,
))
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 == None: # pragma: no cover
timezone_str = tf.closest_timezone_at(lng=lonavg,
lat=latavg)
if timezone_str == 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
))
duration = totaltime_sec_to_string(totaltime)
workoutdate = workoutstartdatetime.astimezone(
pytz.timezone(timezone_str)
).strftime('%Y-%m-%d')
workoutstarttime = workoutstartdatetime.astimezone(
pytz.timezone(timezone_str)
).strftime('%H:%M:%S')
workoutdate = startdate
workoutstarttime = starttime
s = 'Dataprep line 1780 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,
)
dologging('debuglog.log',s)
if makeprivate: # pragma: no cover
@@ -1812,6 +1763,8 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
if title is not None and len(title)>140: # pragma: no cover
title = title[0:140]
timezone_str = str(workoutstartdatetime.tzinfo)
w = Workout(user=r, name=title, date=workoutdate,
workouttype=workouttype,
boattype=boattype,
@@ -1887,6 +1840,59 @@ 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 or str(startdatetime.tzinfo) in ['tzutc()','Ect/GMT']:
timezone_str = 'UTC'
try:
startdatetime = timezone.make_aware(startdatetime)
except ValueError: # pragma: no cover
pass
try:
latavg = row.df[' latitude'].mean()
lonavg = row.df[' longitude'].mean()
tf = TimezoneFinder()
if row.df[' latitude'].std() != 0:
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
else:
timezone_str = r.defaulttimezone
try:
startdatetime = pytz.timezone(timezone_str).localize(
row.rowdatetime
)
except ValueError: # pragma: no cover
startdatetime = startdatetime.astimezone(
pytz.timezone(timezone_str)
)
except KeyError: # pragma: no cover
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
@@ -2342,7 +2348,7 @@ def new_workout_from_df(r, df,
summary = ''
makeprivate = False
rpe = 0
if startdatetime == '':
if startdatetime == '': # pragma: no cover
startdatetime = timezone.now()
if setprivate: # 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):
@@ -240,7 +243,7 @@ class PlannedSessionTests(TestCase):
monday = sundays[i]-datetime.timedelta(days=6)
if monday < cycle.startdate:
monday = cycle.startdate
nextsunday = sundays[i]
@@ -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

View File

@@ -539,15 +539,18 @@ def get_strava_stream(r,metric,stravaid,series_type='time',fetchresolution='high
with open('data.txt', 'w') as outfile:
json.dump(s.json(), outfile)
for data in s.json():
y = None
try:
if data['type'] == metric:
return np.array(data['data'])
except TypeError: # pragma: no cover
return None
try:
for data in s.json():
y = None
try:
if data['type'] == metric:
return np.array(data['data'])
except TypeError: # pragma: no cover
return None
except JSONDecodeError:
return None
return None
return None # pragma: no cover
def allmonths(startdate,enddate):
d = startdate