equal
deleted
inserted
replaced
303 |
303 |
304 def runmap(context, mapping, data): |
304 def runmap(context, mapping, data): |
305 func, data, ctmpl = data |
305 func, data, ctmpl = data |
306 d = func(context, mapping, data) |
306 d = func(context, mapping, data) |
307 if util.safehasattr(d, 'itermaps'): |
307 if util.safehasattr(d, 'itermaps'): |
308 d = d.itermaps() |
308 diter = d.itermaps() |
309 |
309 else: |
310 for i in d: |
310 try: |
|
311 diter = iter(d) |
|
312 except TypeError: |
|
313 if func is runsymbol: |
|
314 raise error.ParseError(_("keyword '%s' is not iterable") % data) |
|
315 else: |
|
316 raise error.ParseError(_("%r is not iterable") % d) |
|
317 |
|
318 for i in diter: |
311 lm = mapping.copy() |
319 lm = mapping.copy() |
312 if isinstance(i, dict): |
320 if isinstance(i, dict): |
313 lm.update(i) |
321 lm.update(i) |
314 lm['originalnode'] = mapping.get('node') |
322 lm['originalnode'] = mapping.get('node') |
315 yield runtemplate(context, lm, ctmpl) |
323 yield runtemplate(context, lm, ctmpl) |