templatetags: make parse_datetime/date/time stronger (#22067)

This commit is contained in:
Thomas NOËL 2018-02-23 01:26:35 +01:00 committed by Frédéric Péters
parent c591e71555
commit 0bbe282874
2 changed files with 14 additions and 3 deletions

View File

@ -165,21 +165,21 @@ def strptime(date_string, date_format):
def parse_date(date_string):
try:
return dateparse.parse_date(date_string)
except ValueError:
except (ValueError, TypeError):
return None
@register.filter
def parse_datetime(date_string):
try:
return dateparse.parse_datetime(date_string)
except ValueError:
except (ValueError, TypeError):
return None
@register.filter
def parse_time(time_string):
try:
return dateparse.parse_time(time_string)
except ValueError:
except (ValueError, TypeError):
return None
@register.filter

View File

@ -12,6 +12,8 @@ def test_strptime():
assert t.render(Context({'someday': '2015-04-15'})) == '2015'
assert t.render(Context({'someday': 'foobar'})) == ''
assert t.render(Context({'someday': None})) == ''
assert t.render(Context({'someday': {'foo': 'bar'}})) == ''
assert t.render(Context({'someday': ['foo', 'bar']})) == ''
def test_parse_datetime():
t = Template('{% load combo %}{{ someday|parse_datetime|date:"Y m d H i s T" }}')
@ -27,6 +29,9 @@ def test_parse_datetime():
assert t.render(Context({'someday': '2015-04-15T13'})) == ''
assert t.render(Context({'someday': 'foobar'})) == ''
assert t.render(Context({'someday': ''})) == ''
assert t.render(Context({'someday': None})) == ''
assert t.render(Context({'someday': {'foo': 'bar'}})) == ''
assert t.render(Context({'someday': ['foo', 'bar']})) == ''
t = Template('{% load combo %}{{ someday|parse_date|date:"Y m d" }}')
expected = '2015 04 15'
@ -34,6 +39,9 @@ def test_parse_datetime():
assert t.render(Context({'someday': '2015-04-15T13:11:12Z'})) == ''
assert t.render(Context({'someday': 'foobar'})) == ''
assert t.render(Context({'someday': ''})) == ''
assert t.render(Context({'someday': None})) == ''
assert t.render(Context({'someday': {'foo': 'bar'}})) == ''
assert t.render(Context({'someday': ['foo', 'bar']})) == ''
t = Template('{% load combo %}{{ someday|parse_time|date:"H i s" }}')
expected = '13 11 12'
@ -48,6 +56,9 @@ def test_parse_datetime():
assert t.render(Context({'someday': '13'})) == ''
assert t.render(Context({'someday': 'foobar'})) == ''
assert t.render(Context({'someday': ''})) == ''
assert t.render(Context({'someday': None})) == ''
assert t.render(Context({'someday': {'foo': 'bar'}})) == ''
assert t.render(Context({'someday': ['foo', 'bar']})) == ''
def test_has_role():
t = Template('{% load combo %}{{ request.user|has_role:"Role1" }}')