ago/ago.py
RussellBallestrini fb0ffca26e * adjusted past_format and future_format to past_tense and future_tense
* corrected all tests and documentation to reflect new keyword argument names
* changed example _tense strings to use {} instead of {0}
* cleaned up docstrings
2013-01-12 14:17:49 -05:00

40 lines
1.4 KiB
Python

from datetime import datetime
from datetime import timedelta
def delta2dict( delta ):
"""Accepts a delta, returns a dictionary of units"""
delta = abs( delta )
return {
'year' : delta.days / 365 ,
'day' : delta.days % 365 ,
'hour' : delta.seconds / 3600 ,
'minute' : (delta.seconds / 60) % 60 ,
'second' : delta.seconds % 60 ,
'microsecond' : delta.microseconds
}
def delta2human(delta, precision=2, past_tense='{} ago', future_tense='in {}'):
"""Accepts a delta, returns a human readable delta string"""
the_tense = past_tense
if delta < timedelta(0): the_tense = future_tense
d = delta2dict( delta )
hlist = []
count = 0
units = ( 'year', 'day', 'hour', 'minute', 'second', 'microsecond' )
for unit in units:
if count >= precision: break # met precision
if d[ unit ] == 0: continue # skip 0's
s = '' if d[ unit ] == 1 else 's' # handle plurals
hlist.append( '%s %s%s' % ( d[unit], unit, s ) )
count += 1
human_delta = ', '.join( hlist )
return the_tense.format(human_delta)
def human(date_time, precision=2, past_tense='{} ago', future_tense='in {}'):
"""Accepts a datetime, returns a human readable delta string"""
delta = datetime.now() - date_time
return delta2human( delta, precision, past_tense, future_tense )
if __name__ == "__main__":
from test_ago import test_output
test_output()