class Unit(object):
|
|
def __init__(self, name, nsecs):
|
|
self.name = name
|
|
self.plural = name + "s"
|
|
self.nsecs = nsecs
|
|
|
|
|
|
MINUTE = Unit("minute", 60)
|
|
HOUR = Unit("hour", MINUTE.nsecs * 60)
|
|
DAY = Unit("day", HOUR.nsecs * 24)
|
|
WEEK = Unit("week", DAY.nsecs * 7)
|
|
|
|
|
|
def format_duration(td):
|
|
remaining_seconds = int(td.total_seconds())
|
|
result = []
|
|
|
|
for unit in (WEEK, DAY, HOUR, MINUTE):
|
|
if unit == WEEK and remaining_seconds % unit.nsecs != 0:
|
|
# Say "8 days" instead of "1 week 1 day"
|
|
continue
|
|
|
|
v, remaining_seconds = divmod(remaining_seconds, unit.nsecs)
|
|
if v == 1:
|
|
result.append("1 %s" % unit.name)
|
|
elif v > 1:
|
|
result.append("%d %s" % (v, unit.plural))
|
|
|
|
return " ".join(result)
|
|
|
|
|
|
def format_mins_secs(td):
|
|
total_seconds = int(td.total_seconds())
|
|
result = []
|
|
|
|
mins, secs = divmod(total_seconds, 60)
|
|
if mins:
|
|
result.append("%d min" % mins)
|
|
|
|
result.append("%s sec" % secs)
|
|
|
|
return " ".join(result)
|