]> Devi Nivas Git - chevron.git/commitdiff
Tokens needs to be a generator, not a list.
authornoah morrison <noah@morrison.ph>
Fri, 16 Jan 2015 15:52:47 +0000 (10:52 -0500)
committernoah morrison <noah@morrison.ph>
Fri, 16 Jan 2015 15:52:47 +0000 (10:52 -0500)
At first I thought they were pretty much the same thing.
But generators pick up from where they left off,
while lists don't.

This fixes the edge-case infinite loop
that was happening last commit.

from the python repl

Lists
>>> data = [1,2,3,4,5]
>>> for i in data:
...     print(i)
...     if i == 2:
...         for ii in data:
...             print('>', ii)
...             if ii == 4:
...                 break
...
1
2
> 1
> 2
> 3
> 4
3
4
5

Generators
>>> data = [1,2,3,4,5]
>>> gen = (d for d in data)
>>> for i in gen:
...     print(i)
...     if i == 2:
...         for ii in gen:
...             print('>', ii)
...             if ii == 4:
...                 break
...
1
2
> 3
> 4
5

chevron/renderer.py

index ac2da27032a04ea86758ca743b355d5774597bd1..9f03736077ff2e7e048218052647284fa22d7979 100644 (file)
@@ -144,7 +144,8 @@ def render(template='', data={}, partials_path='.', partials_ext='mustache',
     # If the template is a list
     if type(template) is list:
         # Then we don't need to tokenize it
-        tokens = template
+        # But it does need to be a generator
+        tokens = (token for token in template)
     else:
         # Otherwise make a generator
         tokens = tokenize(template, def_ldel, def_rdel)