diff options
-rw-r--r-- | jinja2/asyncfilters.py | 6 | ||||
-rw-r--r-- | tests/test_asyncfilters.py | 9 |
2 files changed, 15 insertions, 0 deletions
diff --git a/jinja2/asyncfilters.py b/jinja2/asyncfilters.py index 26caccb..d12afaf 100644 --- a/jinja2/asyncfilters.py +++ b/jinja2/asyncfilters.py @@ -122,6 +122,11 @@ async def do_sum(environment, iterable, attribute=None, start=0): return rv +@asyncfiltervariant(filters.do_slice) +async def do_slice(value, slices, fill_with=None): + return filters.do_slice(await auto_to_seq(value), slices, fill_with) + + ASYNC_FILTERS = { 'first': do_first, 'groupby': do_groupby, @@ -135,4 +140,5 @@ ASYNC_FILTERS = { 'select': do_select, 'selectattr': do_selectattr, 'sum': do_sum, + 'slice': do_slice, } diff --git a/tests/test_asyncfilters.py b/tests/test_asyncfilters.py index 0fdef48..162cc6d 100644 --- a/tests/test_asyncfilters.py +++ b/tests/test_asyncfilters.py @@ -216,3 +216,12 @@ def test_sum_attributes_tuple(env_async): 'bar': 1, 'baz': 18, }) == '42' + + +@mark_dualiter('items', lambda: range(10)) +def test_slice(env_async, items): + tmpl = env_async.from_string('{{ items()|slice(3)|list }}|' + '{{ items()|slice(3, "X")|list }}') + out = tmpl.render(items=items) + assert out == ("[[0, 1, 2, 3], [4, 5, 6], [7, 8, 9]]|" + "[[0, 1, 2, 3], [4, 5, 6, 'X'], [7, 8, 9, 'X']]") |