better totaltimetosec
This commit is contained in:
@@ -1188,7 +1188,10 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
|
|||||||
if workouttype in otetypes:
|
if workouttype in otetypes:
|
||||||
dragfactor = row.dragfactor
|
dragfactor = row.dragfactor
|
||||||
|
|
||||||
|
|
||||||
t = datetime.datetime.strptime(duration, "%H:%M:%S.%f")
|
t = datetime.datetime.strptime(duration, "%H:%M:%S.%f")
|
||||||
|
|
||||||
|
|
||||||
delta = datetime.timedelta(
|
delta = datetime.timedelta(
|
||||||
hours=t.hour, minutes=t.minute, seconds=t.second)
|
hours=t.hour, minutes=t.minute, seconds=t.second)
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
from .statements import *
|
from .statements import *
|
||||||
from rowers.mytypes import rowtypes
|
from rowers.mytypes import rowtypes
|
||||||
from rowers.utils import allmonths,allsundays
|
from rowers.utils import allmonths,allsundays, totaltime_sec_to_string
|
||||||
from rowers.models import update_records
|
from rowers.models import update_records
|
||||||
|
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
@@ -94,6 +94,25 @@ class OtherUnitTests(TestCase):
|
|||||||
# time zone should be US/Pacific
|
# time zone should be US/Pacific
|
||||||
self.assertTrue('US/Pacific' in str(startdate.tzinfo))
|
self.assertTrue('US/Pacific' in str(startdate.tzinfo))
|
||||||
|
|
||||||
|
def test_totaltime_sec_to_string(self):
|
||||||
|
results = (
|
||||||
|
(0,"0:00"),
|
||||||
|
(120,"2:00"),
|
||||||
|
(3634.2,"1:00:34"),
|
||||||
|
)
|
||||||
|
|
||||||
|
for duration, expected in results:
|
||||||
|
self.assertEqual(totaltime_sec_to_string(duration, shorten=True), expected)
|
||||||
|
|
||||||
|
results = (
|
||||||
|
(0,"00:00:00.0"),
|
||||||
|
(120,"00:02:00.0"),
|
||||||
|
(3634.2,"01:00:34.2"),
|
||||||
|
)
|
||||||
|
|
||||||
|
for duration, expected in results:
|
||||||
|
self.assertEqual(totaltime_sec_to_string(duration, shorten=False), expected)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_summaryfromsplitdata(self):
|
def test_summaryfromsplitdata(self):
|
||||||
|
|||||||
@@ -428,32 +428,77 @@ def wavg(group, avg_name, weight_name):
|
|||||||
except ZeroDivisionError: # pragma: no cover
|
except ZeroDivisionError: # pragma: no cover
|
||||||
return d.mean()
|
return d.mean()
|
||||||
|
|
||||||
|
from string import Formatter
|
||||||
|
|
||||||
def totaltime_sec_to_string(totaltime, shorten=False):
|
def totaltime_sec_to_string(totaltime, shorten=False):
|
||||||
|
if np.isnan(totaltime):
|
||||||
|
return ''
|
||||||
|
|
||||||
|
fmt = '{H:02}:{M:02}:{S:02}.{t}'
|
||||||
|
if shorten:
|
||||||
|
fmt = '{H}:{M:02}:{S:02}'
|
||||||
|
if totaltime < 3600:
|
||||||
|
fmt = '{M}:{S:02}'
|
||||||
|
|
||||||
|
remainder = int(totaltime)
|
||||||
|
tenths = totaltime-remainder
|
||||||
|
|
||||||
|
f = Formatter()
|
||||||
|
desired_fields = [field_tuple[1] for field_tuple in f.parse(fmt)]
|
||||||
|
|
||||||
|
possible_fields = ('D','H', 'M', 'S')
|
||||||
|
constants = {'D':86400, 'H': 3600, 'M': 60, 'S': 1}
|
||||||
|
values = {}
|
||||||
|
for field in possible_fields:
|
||||||
|
if field in desired_fields and field in constants:
|
||||||
|
values[field], remainder = divmod(remainder, constants[field])
|
||||||
|
|
||||||
|
values['t'] = round(10*tenths)
|
||||||
|
|
||||||
|
return f.format(fmt, **values)
|
||||||
|
|
||||||
|
|
||||||
|
def totaltime_sec_to_string_old(totaltime, shorten=False):
|
||||||
if np.isnan(totaltime):
|
if np.isnan(totaltime):
|
||||||
return ''
|
return ''
|
||||||
hours = int(totaltime / 3600.)
|
hours = int(totaltime / 3600.)
|
||||||
if hours > 23: # pragma: no cover
|
if hours > 23: # pragma: no cover
|
||||||
message = 'Warning: The workout duration was longer than 23 hours. '
|
message = 'Warning: The workout duration was longer than 23 hours. '
|
||||||
hours = 23
|
hours = 23
|
||||||
|
elif hours < 0:
|
||||||
|
message = 'Warning: invalid workout duration'
|
||||||
|
hours = 0
|
||||||
|
|
||||||
minutes = int((totaltime - 3600. * hours) / 60.)
|
minutes = int((totaltime - 3600. * hours) / 60.)
|
||||||
if minutes > 59: # pragma: no cover
|
if minutes > 59: # pragma: no cover
|
||||||
minutes = 59
|
minutes = 59
|
||||||
if not message: # pragma: no cover
|
if not message: # pragma: no cover
|
||||||
message = 'Warning: there is something wrong with the workout duration'
|
message = 'Warning: there is something wrong with the workout duration'
|
||||||
|
elif minutes < 0:
|
||||||
|
minutes = 0
|
||||||
|
if not message:
|
||||||
|
message = 'Warning: invalid workout duration'
|
||||||
|
|
||||||
seconds = int(totaltime - 3600. * hours - 60. * minutes)
|
seconds = int(totaltime - 3600. * hours - 60. * minutes)
|
||||||
if seconds > 59: # pragma: no cover
|
if seconds > 59: # pragma: no cover
|
||||||
seconds = 59
|
seconds = 59
|
||||||
if not message: # pragma: no cover
|
if not message: # pragma: no cover
|
||||||
message = 'Warning: there is something wrong with the workout duration'
|
message = 'Warning: there is something wrong with the workout duration'
|
||||||
|
elif seconds < 0:
|
||||||
|
seconds = 0
|
||||||
|
if not message:
|
||||||
|
message = 'Warning: invalid workout duration'
|
||||||
|
|
||||||
tenths = int(10 * (totaltime - 3600. * hours - 60. * minutes - seconds))
|
|
||||||
|
tenths = round(10 * (totaltime - 3600. * hours - 60. * minutes - seconds))
|
||||||
if tenths > 9: # pragma: no cover
|
if tenths > 9: # pragma: no cover
|
||||||
tenths = 9
|
tenths = 9
|
||||||
if not message: # pragma: no cover
|
if not message: # pragma: no cover
|
||||||
message = 'Warning: there is something wrong with the workout duration'
|
message = 'Warning: there is something wrong with the workout duration'
|
||||||
|
elif tenths < 0:
|
||||||
|
tenths = 0
|
||||||
|
if not message:
|
||||||
|
message = 'Warning: invalid workout duration'
|
||||||
|
|
||||||
duration = ""
|
duration = ""
|
||||||
if not shorten:
|
if not shorten:
|
||||||
|
|||||||
Reference in New Issue
Block a user