This document describes the current stable version of django_celery_monitor (1.1). For development docs, go here.
Source code for django_celery_monitor.humanize
"""Some helpers to humanize values."""
from __future__ import absolute_import, unicode_literals
from datetime import datetime
from django.utils.translation import ungettext, ugettext as _
from django.utils.timezone import now
[docs]def pluralize_year(n):
"""Return a string with the number of yeargs ago."""
return ungettext(_('{num} year ago'), _('{num} years ago'), n)
[docs]def pluralize_month(n):
"""Return a string with the number of months ago."""
return ungettext(_('{num} month ago'), _('{num} months ago'), n)
[docs]def pluralize_week(n):
"""Return a string with the number of weeks ago."""
return ungettext(_('{num} week ago'), _('{num} weeks ago'), n)
[docs]def pluralize_day(n):
"""Return a string with the number of days ago."""
return ungettext(_('{num} day ago'), _('{num} days ago'), n)
OLDER_CHUNKS = (
(365.0, pluralize_year),
(30.0, pluralize_month),
(7.0, pluralize_week),
(1.0, pluralize_day),
)
[docs]def naturaldate(date, include_seconds=False):
"""Convert datetime into a human natural date string."""
if not date:
return ''
right_now = now()
today = datetime(right_now.year, right_now.month,
right_now.day, tzinfo=right_now.tzinfo)
delta = right_now - date
delta_midnight = today - date
days = delta.days
hours = delta.seconds // 3600
minutes = delta.seconds // 60
seconds = delta.seconds
if days < 0:
return _('just now')
if days == 0:
if hours == 0:
if minutes > 0:
return ungettext(
_('{minutes} minute ago'),
_('{minutes} minutes ago'), minutes
).format(minutes=minutes)
else:
if include_seconds and seconds:
return ungettext(
_('{seconds} second ago'),
_('{seconds} seconds ago'), seconds
).format(seconds=seconds)
return _('just now')
else:
return ungettext(
_('{hours} hour ago'), _('{hours} hours ago'), hours
).format(hours=hours)
if delta_midnight.days == 0:
return _('yesterday at {time}').format(time=date.strftime('%H:%M'))
count = 0
for chunk, pluralizefun in OLDER_CHUNKS:
if days >= chunk:
count = int(round((delta_midnight.days + 1) / chunk, 0))
fmt = pluralizefun(count)
return fmt.format(num=count)