misc: add |is_empty filter (#50402)

This commit is contained in:
Lauréline Guérin 2021-01-21 16:56:58 +01:00
parent 2660c62368
commit 568a419982
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
3 changed files with 36 additions and 1 deletions

View File

@ -1219,6 +1219,12 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
assert LazyFormData(formdata).objects.pending().count == 7
assert LazyFormData(formdata).objects.pending().filter_by('foo_foo').apply_filter_value('foo').count == 0
# test |is_empty
tmpl = Template('{{form_objects|pending|is_empty}}')
assert tmpl.render(context) == 'False'
tmpl = Template('{{form_objects|pending|filter_by:"foo_foo"|filter_value:"foo"|is_empty}}')
assert tmpl.render(context) == 'True'
# test |getlist
tmpl = Template('{% for v in form_objects|order_by:"id"|getlist:"foo_foo" %}{{ v }},{% endfor %}')
assert tmpl.render(context) == 'bar,bar,bar,bar,bar,bar,bar,foo,foo,foo,foo,'
@ -1235,6 +1241,12 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
assert LazyFormData(formdata).objects.order_by('id').getlist('form_var_foo_foo') == [
'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'foo', 'foo', 'foo', 'foo']
assert set(LazyFormData(formdata).objects.getlist('unknown')) == set([None])
tmpl = Template('{{form_objects|pending|getlist:"foo_foo"|is_empty}}')
assert tmpl.render(context) == 'False'
tmpl = Template('{{form_objects|filter_by:"foo_foo"|filter_value:"foo"|getlist:"foo_foo"|is_empty}}')
assert tmpl.render(context) == 'False'
tmpl = Template('{{form_objects|pending|filter_by:"foo_foo"|filter_value:"foo"|getlist:"foo_foo"|is_empty}}')
assert tmpl.render(context) == 'True'
# test with cache populated
for value in [datetime.date(2018, 7, 31).timetuple(), datetime.date(2018, 7, 31), datetime.datetime(2018, 7, 31), '2018-07-31']:

View File

@ -1108,3 +1108,16 @@ def test_django_contrib_humanize_filters():
with override_settings(LANGUAGE_CODE='fr-fr'):
assert tmpl.render({'foo': 10000}) == '10 000'
assert tmpl.render({'foo': '10000'}) == '10 000'
def test_is_empty():
tmpl = Template('{{ foo|is_empty }}')
assert tmpl.render({}) == 'True'
assert tmpl.render({'foo': ''}) == 'True'
assert tmpl.render({'foo': None}) == 'True'
assert tmpl.render({'foo': 'foo'}) == 'False'
assert tmpl.render({'foo': 42}) == 'False'
assert tmpl.render({'foo': []}) == 'True'
assert tmpl.render({'foo': ['foo']}) == 'False'
assert tmpl.render({'foo': {}}) == 'True'
assert tmpl.render({'foo': {'foo': 42}}) == 'False'

View File

@ -68,7 +68,7 @@ def get(mapping, key):
@register.filter
def getlist(mapping, key):
if not mapping or not hasattr(mapping, 'getlist'):
if mapping is None or not hasattr(mapping, 'getlist'):
return []
return mapping.getlist(key)
@ -755,3 +755,13 @@ def phonenumber_fr(value, separator=' '):
# unknown
return value
@register.filter
def is_empty(value):
from wcs.variables import LazyFormDefObjectsManager, LazyList
if isinstance(value, (six.string_types, list, dict)):
return not value
if isinstance(value, (LazyFormDefObjectsManager, LazyList)):
return not list(value)
return value is None