1
mirror of https://github.com/home-assistant/core synced 2024-08-06 09:34:49 +02:00

Refactor get_age in util/dt (#2067)

This commit is contained in:
Daniel Høyer Iversen 2016-05-14 21:05:46 +02:00 committed by Robbie Trencheny
parent 0626a80186
commit 630b7377bd
2 changed files with 49 additions and 22 deletions

View File

@ -156,6 +156,7 @@ def parse_time(time_str):
# Found in this gist: https://gist.github.com/zhangsen/1199964 # Found in this gist: https://gist.github.com/zhangsen/1199964
def get_age(date): def get_age(date):
# pylint: disable=too-many-return-statements
""" """
Take a datetime and return its "age" as a string. Take a datetime and return its "age" as a string.
@ -175,26 +176,28 @@ def get_age(date):
"""Return quotient and remaining.""" """Return quotient and remaining."""
return first // second, first % second return first // second, first % second
# pylint: disable=too-few-public-methods delta = now() - date
class PrettyDelta: day = delta.days
"""A class for relative times.""" second = delta.seconds
def __init__(self, subDt): year, day = q_n_r(day, 365)
delta = now() - subDt if year > 0:
self.day = delta.days return formatn(year, 'year')
self.second = delta.seconds
self.year, self.day = q_n_r(self.day, 365) month, day = q_n_r(day, 30)
self.month, self.day = q_n_r(self.day, 30) if month > 0:
self.hour, self.second = q_n_r(self.second, 3600) return formatn(month, 'month')
self.minute, self.second = q_n_r(self.second, 60) if day > 0:
return formatn(day, 'day')
def format(self): hour, second = q_n_r(second, 3600)
"""Format a datetime to relative time string.""" if hour > 0:
for period in ['year', 'month', 'day', 'hour', 'minute', 'second']: return formatn(hour, 'hour')
number = getattr(self, period)
if number > 0:
return formatn(number, period)
return "0 second"
return PrettyDelta(date).format() minute, second = q_n_r(second, 60)
if minute > 0:
return formatn(minute, 'minute')
if second > 0:
return formatn(second, 'second')
return "0 second"

View File

@ -135,6 +135,30 @@ class TestDateUtil(unittest.TestCase):
self.assertIsNone(dt_util.parse_datetime("not a datetime string")) self.assertIsNone(dt_util.parse_datetime("not a datetime string"))
def test_get_age(self): def test_get_age(self):
"""Test get_age returns 5 minutes.""" """Test get_age."""
fiveminago = dt_util.now() - timedelta(minutes=5) diff = dt_util.now() - timedelta(seconds=0)
self.assertEqual(dt_util.get_age(fiveminago), "5 minutes") self.assertEqual(dt_util.get_age(diff), "0 second")
diff = dt_util.now() - timedelta(seconds=30)
self.assertEqual(dt_util.get_age(diff), "30 seconds")
diff = dt_util.now() - timedelta(minutes=5)
self.assertEqual(dt_util.get_age(diff), "5 minutes")
diff = dt_util.now() - timedelta(minutes=1)
self.assertEqual(dt_util.get_age(diff), "1 minute")
diff = dt_util.now() - timedelta(minutes=300)
self.assertEqual(dt_util.get_age(diff), "5 hours")
diff = dt_util.now() - timedelta(minutes=320)
self.assertEqual(dt_util.get_age(diff), "5 hours")
diff = dt_util.now() - timedelta(minutes=2*60*24)
self.assertEqual(dt_util.get_age(diff), "2 days")
diff = dt_util.now() - timedelta(minutes=32*60*24)
self.assertEqual(dt_util.get_age(diff), "1 month")
diff = dt_util.now() - timedelta(minutes=365*60*24)
self.assertEqual(dt_util.get_age(diff), "1 year")