summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Ronacher <armin.ronacher@active-4.com>2016-12-29 11:38:28 +0100
committerArmin Ronacher <armin.ronacher@active-4.com>2016-12-29 11:38:43 +0100
commita6e48b42635ec40b413ea35e2fb30d37fc4fe503 (patch)
treebce3db191c86f9db503ad5622c3873e6d4279dc4
parent2b03052c9b6f7028e5cb79fb96440a0560bc4340 (diff)
downloadjinja2-feature/async.tar.gz
Make slice work with async generatorsfeature/async
-rw-r--r--jinja2/asyncfilters.py6
-rw-r--r--tests/test_asyncfilters.py9
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']]")