# HG changeset patch # User Goffi # Date 1514935758 -3600 # Node ID d2e16a7466a03e9393e1e1352cb31f323fe1c6c7 # Parent bb0bbcc80fc8a0c7e1551c40d56f1f010e8391e8 template: date filter improvments: new format (i.e. format after date limit has been reached) can now be specified. 0 can now be used for "auto_limit" to use last midnight as date limit. A new "auto_day" format can be used as shortcut to use last midnight as date limit, short datetime for old format, and time only for new format. diff -r bb0bbcc80fc8 -r d2e16a7466a0 src/tools/common/template.py --- a/src/tools/common/template.py Wed Jan 03 00:23:36 2018 +0100 +++ b/src/tools/common/template.py Wed Jan 03 00:29:18 2018 +0100 @@ -26,6 +26,7 @@ log = getLogger(__name__) import os.path from xml.sax.saxutils import quoteattr +import datetime import time import re from babel import support @@ -369,7 +370,7 @@ log.warning(_(u"Can't parse date: {msg}").format(msg=e)) return timestamp - def date_fmt(self, timestamp, fmt='short', date_only=False, auto_limit=None, auto_old_fmt=None): + def date_fmt(self, timestamp, fmt='short', date_only=False, auto_limit=7, auto_old_fmt='short', auto_new_fmt='relative'): """format date according to locale @param timestamp(basestring, int): unix time @@ -383,12 +384,17 @@ note that this format is not precise - iso: ISO 8601 format e.g.: u'2007-04-01T19:53:23Z' - - auto_limit (int, None): limit in days before using auto_old_fmt - None: use default(7 days) - - auto_old_fmt(unicode, None): format to use when date is olded than limit - None: use default(short) + - auto: use auto_old_fmt if date is older than auto_limit + else use auto_new_fmt + - auto_day: shorcut to set auto format with change on day + old format will be short, and new format will be time only or a free value which is passed to babel.dates.format_datetime @param date_only(bool): if True, only display date (not datetime) + @param auto_limit (int): limit in days before using auto_old_fmt + use 0 to have a limit at last midnight (day change) + @param auto_old_fmt(unicode): format to use when date is older than limit + @param auto_new_fmt(unicode): format to use when date is equal to or more recent + than limit """ if is_undefined(fmt): @@ -396,12 +402,21 @@ if (auto_limit is not None or auto_old_fmt is not None) and fmt != 'auto': raise ValueError(u'auto argument can only be used with auto fmt') + if fmt == 'auto_day': + fmt, auto_limit, auto_old_fmt, auto_new_fmt = 'auto', 0, 'short', 'HH:mm' if fmt == 'auto': - days_delta = (time.time() - int(timestamp)) / 3600 - if days_delta > (auto_limit or 7): - fmt = auto_old_fmt or 'short' + if auto_limit == 0: + today = time.mktime(datetime.date.today().timetuple()) + if int(timestamp) < today: + fmt = auto_old_fmt + else: + fmt = auto_new_fmt else: - fmt = 'relative' + days_delta = (time.time() - int(timestamp)) / 3600 + if days_delta > (auto_limit or 7): + fmt = auto_old_fmt + else: + fmt = auto_new_fmt if fmt == 'relative': delta = int(timestamp) - time.time()