templates: add datetime_in_past filter (#44023)

This commit is contained in:
Lauréline Guérin 2020-06-16 10:32:51 +02:00
parent d068f7b2b2
commit 7624c55e66
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 45 additions and 1 deletions

View File

@ -10,10 +10,10 @@ except ImportError:
langdetect = None
from django.test import override_settings
from django.utils.timezone import now
from quixote import cleanup
from wcs.qommon.substitution import CompatibilityNamesDict
from wcs.qommon.template import Template, TemplateError
from wcs.conditions import Condition
from wcs.variables import LazyFormData
from wcs.formdef import FormDef
from wcs import fields
@ -658,3 +658,34 @@ def test_language_detect():
assert t.render({'plop': 'Good morning world'}) == 'en'
assert t.render({'plop': 'Bonjour tout le monde'}) == 'fr'
assert t.render({'plop': '2132133'}) == ''
@pytest.mark.parametrize('value, expected', [
(None, False),
('', False),
('foobar', False),
(42, False),
('1970-06-15T12:01:03', True),
('2500-06-15T12:01:02', False),
('1970-01-01 02:03', True),
('2500-01-01 02:03', False),
('01/01/1970 02h03', True),
('01/01/2500 02h03', False),
('1970-01-01', True),
('2500-01-01', False),
('01/01/1970', True),
('01/01/2500', False),
(datetime.datetime(1970, 6, 15, 12, 1, 3), True),
(datetime.datetime(2500, 6, 15, 12, 1, 2), False),
(datetime.date(1970, 6, 15), True),
(datetime.date(2500, 6, 15), False),
(datetime.datetime.now(), True),
(datetime.datetime.now() + datetime.timedelta(hours=1), False),
(now(), True),
(now() + datetime.timedelta(hours=1), False),
(datetime.date.today(), True),
(datetime.date.today() + datetime.timedelta(days=1), False),
])
def test_datetime_in_past(value, expected):
t = Template('{{ value|datetime_in_past }}')
assert t.render({'value': value}) == str(expected)

View File

@ -38,6 +38,7 @@ from django.utils import dateparse
from django.utils import six
from django.utils.encoding import force_bytes, force_text
from django.utils.safestring import mark_safe
from django.utils.timezone import is_naive, make_aware
from wcs.qommon import evalutils
from wcs.qommon import tokens
from wcs.qommon.admin.texts import TextsDirectory
@ -268,6 +269,18 @@ def age_in_months(value, today=None):
return years*12 + months
@register.filter(expects_localtime=True)
def datetime_in_past(value):
value = parse_datetime(value)
if not value:
return False
if is_naive(value):
value = make_aware(value)
date_now = make_aware(datetime.datetime.now())
return value <= date_now
@register.simple_tag
def standard_text(text_id):
return mark_safe(TextsDirectory.get_html_text(str(text_id)))