templatetags: add age_in_days/years/months filters (#30144)
This commit is contained in:
parent
298ab4667d
commit
2f523eca3b
|
@ -1110,6 +1110,119 @@ def test_date_conditions_python(pub, variable_test_data):
|
|||
condition = Condition({'type': 'python', 'value': pycondition})
|
||||
assert condition.evaluate() is True
|
||||
|
||||
def test_date_conditions_django(pub, variable_test_data):
|
||||
for condition_value in ( # hope date is > 2018
|
||||
# age_in_days
|
||||
'"1970-01-01"|age_in_days > 0',
|
||||
'"01/01/1970"|age_in_days > 0',
|
||||
'"2500-01-01"|age_in_days < 0',
|
||||
'"01/01/2500"|age_in_days < 0',
|
||||
'form_var_datefield|age_in_days > 50',
|
||||
'form_var_datefield|age_in_days:form_var_datestring == 0',
|
||||
'form_var_datefield|age_in_days:form_var_datefield2 == 31',
|
||||
'form_var_datefield2|age_in_days:form_var_datefield == -31',
|
||||
'form_var_datefield|age_in_days:form_var_datefield == 0',
|
||||
'form_var_datestring|age_in_days:form_var_datefield == 0',
|
||||
'form_var_datestring|age_in_days:form_var_datestring == 0',
|
||||
'today|add_days:-5|age_in_days == 5',
|
||||
'today|add_days:5|age_in_days == -5',
|
||||
'today|age_in_days == 0',
|
||||
# with datetimes
|
||||
'"1970-01-01 02:03"|age_in_days > 0',
|
||||
'"01/01/1970 02h03"|age_in_days > 0',
|
||||
'"2500-01-01 02:03"|age_in_days < 0',
|
||||
'"01/01/2500 02h03"|age_in_days < 0',
|
||||
'now|add_hours:-5|age_in_days == 0',
|
||||
'now|add_hours:-25|age_in_days == 1',
|
||||
'now|age_in_days == 0',
|
||||
'"2010-11-12 13:14"|age_in_days:"2010-11-12 13:14" == 0',
|
||||
'"2010-11-12 13:14"|age_in_days:"2010-11-12 12:14" == 0',
|
||||
'"2010-11-12 13:14"|age_in_days:"2010-11-12 14:14" == 0',
|
||||
'"2010-11-12 13:14"|age_in_days:"2010-11-13 13:13" == 1',
|
||||
'"2010-11-12 13:14"|age_in_days:"2010-11-13 13:15" == 1',
|
||||
|
||||
# age_in_hours
|
||||
'now|add_hours:-5|age_in_hours == 5',
|
||||
'now|add_hours:25|age_in_hours == -24',
|
||||
'now|age_in_hours == 0',
|
||||
'"2010-11-12 13:14"|age_in_hours:"2010-11-12 13:14" == 0',
|
||||
'"2010-11-12 13:14"|age_in_hours:"2010-11-12 12:14" == -1',
|
||||
'"2010-11-12 13:14"|age_in_hours:"2010-11-12 14:14" == 1',
|
||||
'"2010-11-12 13:14"|age_in_hours:"2010-11-13 13:13" == 23',
|
||||
'"2010-11-12 13:14"|age_in_hours:"2010-11-13 13:15" == 24',
|
||||
'"1970-01-01 02:03"|age_in_hours > 0',
|
||||
'"01/01/1970 02h03"|age_in_hours > 0',
|
||||
'"2500-01-01 02:03"|age_in_hours < 0',
|
||||
'"01/01/2500 02h03"|age_in_hours < 0',
|
||||
# with dates
|
||||
'"1970-01-01"|age_in_hours > 0',
|
||||
'"01/01/1970"|age_in_hours > 0',
|
||||
'"2500-01-01"|age_in_hours < 0',
|
||||
'"01/01/2500"|age_in_hours < 0',
|
||||
'form_var_datefield|age_in_hours > 1200',
|
||||
'form_var_datefield|age_in_hours:form_var_datestring == 0',
|
||||
'form_var_datefield|age_in_hours:form_var_datefield2 == 744', # 31*24
|
||||
'form_var_datefield2|age_in_hours:form_var_datefield == -744',
|
||||
'form_var_datefield|age_in_hours:form_var_datefield == 0',
|
||||
'form_var_datestring|age_in_hours:form_var_datefield == 0',
|
||||
'form_var_datestring|age_in_hours:form_var_datestring == 0',
|
||||
'today|add_days:-1|age_in_hours >= 24',
|
||||
'today|add_days:1|age_in_hours <= -0',
|
||||
'today|add_days:1|age_in_hours >= -24',
|
||||
'today|age_in_hours >= 0',
|
||||
|
||||
# age_in_years
|
||||
'"1970-01-01"|age_in_years > 0',
|
||||
'"01/01/1970"|age_in_years > 0',
|
||||
'"2500-01-01"|age_in_years < 0',
|
||||
'"01/01/2500"|age_in_years < 0',
|
||||
'form_var_datefield|age_in_years:"2019-07-31" == 1',
|
||||
'form_var_datefield|age_in_years:"2019-09-20" == 1',
|
||||
'form_var_datefield|age_in_years:"2020-07-30" == 1',
|
||||
'form_var_datefield|age_in_years:"2020-07-31" == 2',
|
||||
'form_var_datestring|age_in_years:"2019-07-31" == 1',
|
||||
'today|age_in_years == 0',
|
||||
'today|add_days:-500|age_in_years == 1',
|
||||
'today|add_days:-300|age_in_years == 0',
|
||||
'today|add_days:300|age_in_years == -1',
|
||||
'now|age_in_years == 0',
|
||||
'now|add_days:-500|age_in_years == 1',
|
||||
'now|add_days:-300|age_in_years == 0',
|
||||
'now|add_days:300|age_in_years == -1',
|
||||
'"1970-01-01 02:03"|age_in_years > 0',
|
||||
'"2500-01-01 02:03"|age_in_years < 0',
|
||||
|
||||
# age_in_months
|
||||
'form_var_datefield|age_in_months:form_var_datefield2 == 1',
|
||||
'form_var_datefield2|age_in_months:form_var_datefield == -1',
|
||||
'form_var_datefield|age_in_months:"2019-07-31" == 12',
|
||||
'form_var_datefield|age_in_months:"2019-08-20" == 12',
|
||||
'form_var_datefield|age_in_months:"2019-09-20" == 13',
|
||||
'form_var_datestring|age_in_months:"2019-09-20" == 13',
|
||||
'"1970-01-01"|age_in_months > 0',
|
||||
'"01/01/1970"|age_in_months > 0',
|
||||
'"2500-01-01"|age_in_months < 0',
|
||||
'"01/01/2500"|age_in_months < 0',
|
||||
'"1970-01-01 02:03"|age_in_months > 0',
|
||||
'"2500-01-01 02:03"|age_in_months < 0',
|
||||
|
||||
# fail produce empty string
|
||||
'foobar|age_in_days == ""',
|
||||
'"foobar"|age_in_days == ""',
|
||||
'"1970-01-01"|age_in_days:"foobar" == ""',
|
||||
'foobar|age_in_hours == ""',
|
||||
'"foobar"|age_in_hours == ""',
|
||||
'"1970-01-01"|age_in_hours:"foobar" == ""',
|
||||
'foobar|age_in_years == ""',
|
||||
'"foobar"|age_in_years == ""',
|
||||
'"1970-01-01"|age_in_years:"foobar" == ""',
|
||||
'foobar|age_in_months == ""',
|
||||
'"foobar"|age_in_months == ""',
|
||||
'"1970-01-01"|age_in_months:"foobar" == ""',
|
||||
):
|
||||
condition = Condition({'type': 'django', 'value': condition_value})
|
||||
assert condition.evaluate() is True
|
||||
|
||||
def test_form_digest_date(pub):
|
||||
formdef = FormDef()
|
||||
formdef.name = 'foobar'
|
||||
|
|
|
@ -54,9 +54,10 @@ def make_datetime(datetime_var):
|
|||
if isinstance(datetime_var, time.struct_time) or (
|
||||
isinstance(datetime_var, tuple) and len(datetime_var) == 9):
|
||||
return datetime.datetime(*datetime_var[:6])
|
||||
if hasattr(datetime_var, 'decode'):
|
||||
return get_as_datetime(datetime_var)
|
||||
raise ValueError('invalid datetime value: %s' % datetime_var)
|
||||
try:
|
||||
return get_as_datetime(str(datetime_var))
|
||||
except ValueError:
|
||||
raise ValueError('invalid datetime value: %s' % datetime_var)
|
||||
|
||||
def date(var, month=None, day=None):
|
||||
if var and month and day:
|
||||
|
|
|
@ -161,6 +161,47 @@ def add_hours(value, arg):
|
|||
return lazy_date(value)
|
||||
return lazy_date(value + datetime.timedelta(hours=float(arg)))
|
||||
|
||||
@register.filter(expects_localtime=True, is_safe=False)
|
||||
def age_in_days(value, now=None):
|
||||
try:
|
||||
return evalutils.age_in_days(value, now)
|
||||
except ValueError:
|
||||
return ''
|
||||
|
||||
@register.filter(expects_localtime=True, is_safe=False)
|
||||
def age_in_hours(value, now=None):
|
||||
# consider value and now as datetimes (and not dates)
|
||||
if hasattr(value, 'timetuple'):
|
||||
# extract real value in case of lazy object
|
||||
value = value.timetuple()
|
||||
value = parse_datetime(value)
|
||||
if not value:
|
||||
return ''
|
||||
if now is not None:
|
||||
if hasattr(now, 'timetuple'):
|
||||
now = now.timetuple()
|
||||
now = parse_datetime(now)
|
||||
if not now:
|
||||
return ''
|
||||
else:
|
||||
now = datetime.datetime.now()
|
||||
return int((now - value).total_seconds() / 3600)
|
||||
|
||||
@register.filter(expects_localtime=True, is_safe=False)
|
||||
def age_in_years(value, today=None):
|
||||
try:
|
||||
return evalutils.age_in_years_and_months(value, today)[0]
|
||||
except ValueError:
|
||||
return ''
|
||||
|
||||
@register.filter(expects_localtime=True, is_safe=False)
|
||||
def age_in_months(value, today=None):
|
||||
try:
|
||||
years, months = evalutils.age_in_years_and_months(value, today)
|
||||
except ValueError:
|
||||
return ''
|
||||
return years*12 + months
|
||||
|
||||
@register.simple_tag
|
||||
def standard_text(text_id):
|
||||
return mark_safe(TextsDirectory.get_html_text(str(text_id)))
|
||||
|
|
Loading…
Reference in New Issue