diff --git a/tests/test_templates.py b/tests/test_templates.py index 8239352ba..af08e055a 100644 --- a/tests/test_templates.py +++ b/tests/test_templates.py @@ -1318,6 +1318,25 @@ def test_adjust_to_week_monday(pub): assert t.render({'value': datetime.datetime(2021, 6, 14, 0, 0)}) == '2021-06-14' +def test_convert_as_set(): + tmpl = Template('{{ foo|set|join:","}}') + + def render(value): + return set(tmpl.render({'foo': value}).split(',')) + + assert render(['foo', 'foo', 'bar']) == {'foo', 'bar'} + + def list_generator(): + yield from range(5) + + assert render(list_generator) == set(map(str, range(5))) + + def list_range(): + return range(5) + + assert render(list_range) == set(map(str, range(5))) + + def test_iterate_days_until(pub): t = Template( '{% for day in value|iterate_days_until:value2 %}{{ day }}{% if not forloop.last %}, {% endif %}{% endfor %}' diff --git a/wcs/qommon/templatetags/qommon.py b/wcs/qommon/templatetags/qommon.py index f1f99d99e..3ac763199 100644 --- a/wcs/qommon/templatetags/qommon.py +++ b/wcs/qommon/templatetags/qommon.py @@ -947,6 +947,12 @@ def list_(value): return list(unlazy(value)) +@register.filter(name='set') +def set_(value): + # turn a generator into a set + return set(unlazy(value)) + + @register.filter(name='qrcode') def qrcode_filter(value, name=None): if not qrcode: