]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Make slice work with async generators 634/head
authorArmin Ronacher <armin.ronacher@active-4.com>
Thu, 29 Dec 2016 10:38:28 +0000 (11:38 +0100)
committerArmin Ronacher <armin.ronacher@active-4.com>
Thu, 29 Dec 2016 10:38:43 +0000 (11:38 +0100)
jinja2/asyncfilters.py
tests/test_asyncfilters.py

index 26caccbcb6b4d4d99488215811d997152d8b474c..d12afaf4909f0983ff96f6a43708c66d408a3778 100644 (file)
@@ -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,
 }
index 0fdef48114a233d23fdb10bf337bbe1b69b5d88f..162cc6d4d73fc4d92921e94054421db0d774a314 100644 (file)
@@ -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']]")