Moved definition of chunks out of timesince function.
This speeds up the timesince function/filter substantially.
This commit is contained in:
parent
36a17be9f3
commit
d6969abf23
|
@ -6,6 +6,15 @@ from django.utils.html import avoid_wrapping
|
||||||
from django.utils.timezone import is_aware, utc
|
from django.utils.timezone import is_aware, utc
|
||||||
from django.utils.translation import ugettext, ungettext_lazy
|
from django.utils.translation import ugettext, ungettext_lazy
|
||||||
|
|
||||||
|
TIMESINCE_CHUNKS = (
|
||||||
|
(60 * 60 * 24 * 365, ungettext_lazy('%d year', '%d years')),
|
||||||
|
(60 * 60 * 24 * 30, ungettext_lazy('%d month', '%d months')),
|
||||||
|
(60 * 60 * 24 * 7, ungettext_lazy('%d week', '%d weeks')),
|
||||||
|
(60 * 60 * 24, ungettext_lazy('%d day', '%d days')),
|
||||||
|
(60 * 60, ungettext_lazy('%d hour', '%d hours')),
|
||||||
|
(60, ungettext_lazy('%d minute', '%d minutes'))
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def timesince(d, now=None, reversed=False):
|
def timesince(d, now=None, reversed=False):
|
||||||
"""
|
"""
|
||||||
|
@ -21,14 +30,6 @@ def timesince(d, now=None, reversed=False):
|
||||||
Adapted from
|
Adapted from
|
||||||
http://web.archive.org/web/20060617175230/http://blog.natbat.co.uk/archive/2003/Jun/14/time_since
|
http://web.archive.org/web/20060617175230/http://blog.natbat.co.uk/archive/2003/Jun/14/time_since
|
||||||
"""
|
"""
|
||||||
chunks = (
|
|
||||||
(60 * 60 * 24 * 365, ungettext_lazy('%d year', '%d years')),
|
|
||||||
(60 * 60 * 24 * 30, ungettext_lazy('%d month', '%d months')),
|
|
||||||
(60 * 60 * 24 * 7, ungettext_lazy('%d week', '%d weeks')),
|
|
||||||
(60 * 60 * 24, ungettext_lazy('%d day', '%d days')),
|
|
||||||
(60 * 60, ungettext_lazy('%d hour', '%d hours')),
|
|
||||||
(60, ungettext_lazy('%d minute', '%d minutes'))
|
|
||||||
)
|
|
||||||
# Convert datetime.date to datetime.datetime for comparison.
|
# Convert datetime.date to datetime.datetime for comparison.
|
||||||
if not isinstance(d, datetime.datetime):
|
if not isinstance(d, datetime.datetime):
|
||||||
d = datetime.datetime(d.year, d.month, d.day)
|
d = datetime.datetime(d.year, d.month, d.day)
|
||||||
|
@ -44,14 +45,14 @@ def timesince(d, now=None, reversed=False):
|
||||||
if since <= 0:
|
if since <= 0:
|
||||||
# d is in the future compared to now, stop processing.
|
# d is in the future compared to now, stop processing.
|
||||||
return avoid_wrapping(ugettext('0 minutes'))
|
return avoid_wrapping(ugettext('0 minutes'))
|
||||||
for i, (seconds, name) in enumerate(chunks):
|
for i, (seconds, name) in enumerate(TIMESINCE_CHUNKS):
|
||||||
count = since // seconds
|
count = since // seconds
|
||||||
if count != 0:
|
if count != 0:
|
||||||
break
|
break
|
||||||
result = avoid_wrapping(name % count)
|
result = avoid_wrapping(name % count)
|
||||||
if i + 1 < len(chunks):
|
if i + 1 < len(TIMESINCE_CHUNKS):
|
||||||
# Now get the second item
|
# Now get the second item
|
||||||
seconds2, name2 = chunks[i + 1]
|
seconds2, name2 = TIMESINCE_CHUNKS[i + 1]
|
||||||
count2 = (since - (seconds * count)) // seconds2
|
count2 = (since - (seconds * count)) // seconds2
|
||||||
if count2 != 0:
|
if count2 != 0:
|
||||||
result += ugettext(', ') + avoid_wrapping(name2 % count2)
|
result += ugettext(', ') + avoid_wrapping(name2 % count2)
|
||||||
|
|
Loading…
Reference in New Issue