Merge branch 'release/v16.4.13'
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user