Merge branch 'release/v22.6.5'
This commit is contained in:
@@ -1156,7 +1156,8 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
|
||||
consistencychecks=False,
|
||||
startdatetime='',
|
||||
workoutid='',
|
||||
impeller=False):
|
||||
impeller=False,
|
||||
timezone=''):
|
||||
|
||||
message = None
|
||||
|
||||
@@ -1173,7 +1174,7 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
|
||||
row = rdata(f2, rower=rr)
|
||||
|
||||
startdatetime, startdate, starttime, timezone_str, partofday = get_startdate_time_zone(
|
||||
r, row, startdatetime=startdatetime)
|
||||
r, row, startdatetime=startdatetime, timezone=timezone)
|
||||
|
||||
if title is None or title == '':
|
||||
title = 'Workout'
|
||||
@@ -1463,6 +1464,7 @@ def new_workout_from_file(r, f2,
|
||||
rpe=-1,
|
||||
makeprivate=False,
|
||||
startdatetime='',
|
||||
timezone='',
|
||||
notes='',
|
||||
workoutid='',
|
||||
oarlockfirmware='',
|
||||
@@ -1641,6 +1643,7 @@ def new_workout_from_file(r, f2,
|
||||
workoutsource=workoutsource,
|
||||
summary=summary,
|
||||
startdatetime=startdatetime,
|
||||
timezone=timezone,
|
||||
rpe=rpe,
|
||||
inboard=inboard, oarlength=oarlength,
|
||||
seatnumber=seatnumber, boatname=boatname,
|
||||
|
||||
@@ -905,7 +905,7 @@ def clean_df_stats_pl(datadf, workstrokesonly=True, ignorehr=True,
|
||||
return datadf
|
||||
|
||||
|
||||
def getpartofday(row, r):
|
||||
def getpartofday(row, r, startdatetime=None, timezone=''):
|
||||
workoutstartdatetime = row.rowdatetime
|
||||
try: # pragma: no cover
|
||||
latavg = row.df[' latitude'].mean()
|
||||
@@ -932,6 +932,8 @@ def getpartofday(row, r):
|
||||
workoutstartdatetime = row.rowdatetime
|
||||
|
||||
h = workoutstartdatetime.astimezone(pytz.timezone(timezone_str)).hour
|
||||
if startdatetime is not None:
|
||||
h = startdatetime.hour
|
||||
|
||||
if h < 12: # pragma: no cover
|
||||
return "Morning"
|
||||
@@ -1170,7 +1172,10 @@ parsers = {
|
||||
}
|
||||
|
||||
|
||||
def get_startdate_time_zone(r, row, startdatetime=None):
|
||||
def get_startdate_time_zone(r, row, startdatetime=None, timezone=''):
|
||||
preserve_timezone = False
|
||||
if timezone != '':
|
||||
preserve_timezone = True
|
||||
if isinstance(startdatetime, str):
|
||||
try:
|
||||
startdatetime = pendulum.parse(startdatetime)
|
||||
@@ -1184,15 +1189,15 @@ def get_startdate_time_zone(r, row, startdatetime=None):
|
||||
timezone_str = 'Ect/GMT'
|
||||
elif startdatetime == '':
|
||||
startdatetime = row.rowdatetime
|
||||
else:
|
||||
startdatetime = row.rowdatetime
|
||||
#else:
|
||||
# startdatetime = row.rowdatetime
|
||||
|
||||
try:
|
||||
_ = startdatetime.tzinfo
|
||||
except AttributeError: # pragma: no cover
|
||||
startdatetime = row.rowdatetime
|
||||
|
||||
partofday = getpartofday(row, r)
|
||||
partofday = getpartofday(row, r, startdatetime=startdatetime, timezone=timezone)
|
||||
|
||||
if startdatetime.tzinfo is None or str(startdatetime.tzinfo) in ['tzutc()', 'Ect/GMT']:
|
||||
timezone_str = 'UTC'
|
||||
@@ -1200,6 +1205,8 @@ def get_startdate_time_zone(r, row, startdatetime=None):
|
||||
startdatetime = timezone.make_aware(startdatetime)
|
||||
except ValueError: # pragma: no cover
|
||||
pass
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
try:
|
||||
latavg = row.df[' latitude'].mean()
|
||||
@@ -1232,8 +1239,23 @@ def get_startdate_time_zone(r, row, startdatetime=None):
|
||||
timezone_str = str(startdatetime.tzinfo)
|
||||
|
||||
try:
|
||||
startdatetime = startdatetime.astimezone(pytz.timezone(timezone_str))
|
||||
if not preserve_timezone:
|
||||
startdatetime = startdatetime.astimezone(pytz.timezone(timezone_str))
|
||||
except UnknownTimeZoneError:
|
||||
try:
|
||||
offset = timezone_str.strip("(TimeZone('')").split(":")
|
||||
hours = int(offset[0])
|
||||
minutes = int(offset[1])
|
||||
tz_offset = datetime.timedelta(hours=hours, minutes=minutes)
|
||||
tz = datetime.timezone(tz_offset)
|
||||
utc_offset = tz.utcoffset(datetime.utcnow()).total_seconds()
|
||||
for zone in pytz.all_timezones:
|
||||
if pytz.timezone(zone).utcoffset(datetime.utcnow()).total_seconds() == utc_offset:
|
||||
timezone_str = zone
|
||||
break
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
startdatetime = startdatetime.astimezone(pytz.utc)
|
||||
|
||||
startdate = startdatetime.strftime('%Y-%m-%d')
|
||||
|
||||
@@ -543,7 +543,7 @@ class DataPrepTests(TestCase):
|
||||
) = dataprep.get_startdate_time_zone(self.r,row,startdatetime=aware)
|
||||
|
||||
self.assertEqual(timezone_str,'America/Los_Angeles')
|
||||
self.assertEqual(partofday,'Morning')
|
||||
self.assertEqual(partofday,'Evening')
|
||||
want = arrow.get('2021-06-15 19:55:13.400000-07:00').isoformat()
|
||||
got = arrow.get(startdatetime).isoformat()
|
||||
|
||||
@@ -569,7 +569,7 @@ class DataPrepTests(TestCase):
|
||||
) = dataprep.get_startdate_time_zone(self.r,row)
|
||||
|
||||
self.assertEqual(timezone_str,'America/Los_Angeles')
|
||||
self.assertEqual(partofday,'Morning')
|
||||
self.assertEqual(partofday,'Evening')
|
||||
want = arrow.get('2021-06-15 19:55:13.400000-07:00').isoformat()
|
||||
got = arrow.get(startdatetime).isoformat()
|
||||
|
||||
|
||||
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
Binary file not shown.
@@ -4981,6 +4981,7 @@ def workout_upload_api(request):
|
||||
garminid = post_data.get('garminid','')
|
||||
workoutid = post_data.get('id','')
|
||||
startdatetime = post_data.get('startdatetime', '')
|
||||
timezone = post_data.get('timezone','')
|
||||
oarlockfirmware = post_data.get('oarlockfirmware', None)
|
||||
inboard = post_data.get('inboard', None)
|
||||
oarlength = post_data.get('oarlength', None)
|
||||
@@ -5079,6 +5080,7 @@ def workout_upload_api(request):
|
||||
notes=notes,
|
||||
uploadoptions=post_data,
|
||||
startdatetime=startdatetime,
|
||||
timezone=timezone,
|
||||
oarlockfirmware=oarlockfirmware,
|
||||
inboard=inboard,
|
||||
oarlength=oarlength,
|
||||
|
||||
Reference in New Issue
Block a user