diff --git a/ago.py b/ago.py index 3b10557..b3d9760 100644 --- a/ago.py +++ b/ago.py @@ -4,18 +4,27 @@ units = ("year", "day", "hour", "minute", "second", "millisecond", "microsecond" def get_delta_from_subject(subject): - subject_type = type(subject) - if subject_type is timedelta: - delta = subject + """Convert the subject to a timedelta and return it.""" + if isinstance(subject, timedelta): + return subject + + if isinstance(subject, datetime): + dt = subject else: - if subject_type is int or subject_type is float: - dt = datetime.fromtimestamp(float(subject)) - else: - # assume subject is a datetime object and strip timezone data. - dt = subject.replace(tzinfo=None) - # finally, create a timedelta from datetime. - delta = datetime.now() - dt - return delta + # if it's not a datetime, assume it's a unix timestamp + try: + subject = float(subject) + except ValueError: + # some unknown type that couldn't be converted to a float + raise TypeError("Unsupported subject type") + + dt = datetime.fromtimestamp(subject) + + # strip timezone data + dt = dt.replace(tzinfo=None) + + # finally, return a timedelta from the datetime + return datetime.now() - dt def delta2dict(delta):