Private
Public Access
1
0

Merge branch 'release/v22.6.5'

This commit is contained in:
2024-12-26 17:49:54 +01:00
5 changed files with 37 additions and 10 deletions

View File

@@ -1156,7 +1156,8 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
consistencychecks=False, consistencychecks=False,
startdatetime='', startdatetime='',
workoutid='', workoutid='',
impeller=False): impeller=False,
timezone=''):
message = None message = None
@@ -1173,7 +1174,7 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
row = rdata(f2, rower=rr) row = rdata(f2, rower=rr)
startdatetime, startdate, starttime, timezone_str, partofday = get_startdate_time_zone( 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 == '': if title is None or title == '':
title = 'Workout' title = 'Workout'
@@ -1463,6 +1464,7 @@ def new_workout_from_file(r, f2,
rpe=-1, rpe=-1,
makeprivate=False, makeprivate=False,
startdatetime='', startdatetime='',
timezone='',
notes='', notes='',
workoutid='', workoutid='',
oarlockfirmware='', oarlockfirmware='',
@@ -1641,6 +1643,7 @@ def new_workout_from_file(r, f2,
workoutsource=workoutsource, workoutsource=workoutsource,
summary=summary, summary=summary,
startdatetime=startdatetime, startdatetime=startdatetime,
timezone=timezone,
rpe=rpe, rpe=rpe,
inboard=inboard, oarlength=oarlength, inboard=inboard, oarlength=oarlength,
seatnumber=seatnumber, boatname=boatname, seatnumber=seatnumber, boatname=boatname,

View File

@@ -905,7 +905,7 @@ def clean_df_stats_pl(datadf, workstrokesonly=True, ignorehr=True,
return datadf return datadf
def getpartofday(row, r): def getpartofday(row, r, startdatetime=None, timezone=''):
workoutstartdatetime = row.rowdatetime workoutstartdatetime = row.rowdatetime
try: # pragma: no cover try: # pragma: no cover
latavg = row.df[' latitude'].mean() latavg = row.df[' latitude'].mean()
@@ -932,6 +932,8 @@ def getpartofday(row, r):
workoutstartdatetime = row.rowdatetime workoutstartdatetime = row.rowdatetime
h = workoutstartdatetime.astimezone(pytz.timezone(timezone_str)).hour h = workoutstartdatetime.astimezone(pytz.timezone(timezone_str)).hour
if startdatetime is not None:
h = startdatetime.hour
if h < 12: # pragma: no cover if h < 12: # pragma: no cover
return "Morning" 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): if isinstance(startdatetime, str):
try: try:
startdatetime = pendulum.parse(startdatetime) startdatetime = pendulum.parse(startdatetime)
@@ -1184,15 +1189,15 @@ def get_startdate_time_zone(r, row, startdatetime=None):
timezone_str = 'Ect/GMT' timezone_str = 'Ect/GMT'
elif startdatetime == '': elif startdatetime == '':
startdatetime = row.rowdatetime startdatetime = row.rowdatetime
else: #else:
startdatetime = row.rowdatetime # startdatetime = row.rowdatetime
try: try:
_ = startdatetime.tzinfo _ = startdatetime.tzinfo
except AttributeError: # pragma: no cover except AttributeError: # pragma: no cover
startdatetime = row.rowdatetime 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']: if startdatetime.tzinfo is None or str(startdatetime.tzinfo) in ['tzutc()', 'Ect/GMT']:
timezone_str = 'UTC' timezone_str = 'UTC'
@@ -1200,6 +1205,8 @@ def get_startdate_time_zone(r, row, startdatetime=None):
startdatetime = timezone.make_aware(startdatetime) startdatetime = timezone.make_aware(startdatetime)
except ValueError: # pragma: no cover except ValueError: # pragma: no cover
pass pass
except AttributeError:
pass
try: try:
latavg = row.df[' latitude'].mean() latavg = row.df[' latitude'].mean()
@@ -1232,8 +1239,23 @@ def get_startdate_time_zone(r, row, startdatetime=None):
timezone_str = str(startdatetime.tzinfo) timezone_str = str(startdatetime.tzinfo)
try: try:
if not preserve_timezone:
startdatetime = startdatetime.astimezone(pytz.timezone(timezone_str)) startdatetime = startdatetime.astimezone(pytz.timezone(timezone_str))
except UnknownTimeZoneError: 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) startdatetime = startdatetime.astimezone(pytz.utc)
startdate = startdatetime.strftime('%Y-%m-%d') startdate = startdatetime.strftime('%Y-%m-%d')

View File

@@ -543,7 +543,7 @@ class DataPrepTests(TestCase):
) = dataprep.get_startdate_time_zone(self.r,row,startdatetime=aware) ) = dataprep.get_startdate_time_zone(self.r,row,startdatetime=aware)
self.assertEqual(timezone_str,'America/Los_Angeles') 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() want = arrow.get('2021-06-15 19:55:13.400000-07:00').isoformat()
got = arrow.get(startdatetime).isoformat() got = arrow.get(startdatetime).isoformat()
@@ -569,7 +569,7 @@ class DataPrepTests(TestCase):
) = dataprep.get_startdate_time_zone(self.r,row) ) = dataprep.get_startdate_time_zone(self.r,row)
self.assertEqual(timezone_str,'America/Los_Angeles') 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() want = arrow.get('2021-06-15 19:55:13.400000-07:00').isoformat()
got = arrow.get(startdatetime).isoformat() got = arrow.get(startdatetime).isoformat()

Binary file not shown.

View File

@@ -4981,6 +4981,7 @@ def workout_upload_api(request):
garminid = post_data.get('garminid','') garminid = post_data.get('garminid','')
workoutid = post_data.get('id','') workoutid = post_data.get('id','')
startdatetime = post_data.get('startdatetime', '') startdatetime = post_data.get('startdatetime', '')
timezone = post_data.get('timezone','')
oarlockfirmware = post_data.get('oarlockfirmware', None) oarlockfirmware = post_data.get('oarlockfirmware', None)
inboard = post_data.get('inboard', None) inboard = post_data.get('inboard', None)
oarlength = post_data.get('oarlength', None) oarlength = post_data.get('oarlength', None)
@@ -5079,6 +5080,7 @@ def workout_upload_api(request):
notes=notes, notes=notes,
uploadoptions=post_data, uploadoptions=post_data,
startdatetime=startdatetime, startdatetime=startdatetime,
timezone=timezone,
oarlockfirmware=oarlockfirmware, oarlockfirmware=oarlockfirmware,
inboard=inboard, inboard=inboard,
oarlength=oarlength, oarlength=oarlength,