# HG changeset patch # User cmlenz # Date 1236795192 0 # Node ID f807fb8900ca1ba6aea0bb107cefc3aca2c74b5a # Parent 9755836bb396763a9f467a190df8e397713a9786 inline-branch: Fix for `for` directive. diff --git a/genshi/template/directives.py b/genshi/template/directives.py --- a/genshi/template/directives.py +++ b/genshi/template/directives.py @@ -344,8 +344,8 @@ raise TemplateSyntaxError('"in" keyword missing in "for" directive', template.filepath, lineno, offset) assign, value = value.split(' in ', 1) - self.target = _parse(assign, 'exec') - self.assign = _assignment(self.target.body[0].value) + self.target = _parse(assign, 'exec').body[0].value + self.assign = _assignment(self.target) value = 'iter(%s)' % value.strip() self.filename = template.filepath Directive.__init__(self, value, template, namespaces, lineno, offset) diff --git a/genshi/template/inline.py b/genshi/template/inline.py --- a/genshi/template/inline.py +++ b/genshi/template/inline.py @@ -11,10 +11,10 @@ # individuals. For the exact contribution history, see the revision # history and logs, available at http://genshi.edgewall.org/log/. -import compiler import imp from genshi.core import Attrs, Stream, _ensure, START, END, TEXT +from genshi.template.astutil import _ast from genshi.template.base import EXPR, SUB from genshi.template.directives import * @@ -64,11 +64,11 @@ def _assign(ast): buf = [] def _build(node, indices): - if isinstance(node, (compiler.ast.AssTuple, compiler.ast.Tuple)): - for idx, child in enumerate(node.nodes): - _build(child, indices + (idx,)) - elif isinstance(node, (compiler.ast.AssName, compiler.ast.Name)): - buf.append('%r: v%s' % (node.name, ''.join(['[%s]' % i for i in indices]))) + if isinstance(node, _ast.Tuple): + for idx, elt in enumerate(node.elts): + _build(elt, indices + (idx,)) + elif isinstance(node, _ast.Name): + buf.append('%r: v%s' % (node.id, ''.join(['[%s]' % i for i in indices]))) _build(ast, ()) return '{%s}' % ', '.join(buf)