# HG changeset patch # User cmlenz # Date 1153767453 0 # Node ID 5df0d81ac5d6235c09ef8ad0d31ec6097c138ee5 # Parent a519f581a1b18f3fe3d3a661165611b3afdb592f Ported [115] to trunk. diff --git a/markup/eval.py b/markup/eval.py --- a/markup/eval.py +++ b/markup/eval.py @@ -103,23 +103,25 @@ return gen.getCode() - def _lookup_name(self, data, name, locals=None): + def _lookup_name(data, name, locals=None): val = data.get(name) if val is None and locals: val = locals.get(name) if val is None: val = getattr(__builtin__, name, None) return val + _lookup_name = staticmethod(_lookup_name) - def _lookup_attribute(self, data, obj, key): + def _lookup_attribute(data, obj, key): if hasattr(obj, key): return getattr(obj, key) try: return obj[key] except (KeyError, TypeError): return None + _lookup_attribute = staticmethod(_lookup_attribute) - def _lookup_item(self, data, obj, key): + def _lookup_item(data, obj, key): if len(key) == 1: key = key[0] try: @@ -131,6 +133,7 @@ return getattr(obj, key) except (AttributeError, TypeError), e: pass + _lookup_item = staticmethod(_lookup_item) class ASTTransformer(object): diff --git a/markup/template.py b/markup/template.py --- a/markup/template.py +++ b/markup/template.py @@ -243,7 +243,7 @@ def __call__(self, stream, ctxt, directives): def _generate(): kind, data, pos = stream.next() - if kind is Stream.START: + if kind is START: yield kind, data, pos # emit start tag yield EXPR, self.expr, pos previous = stream.next() @@ -363,20 +363,22 @@ def __call__(self, stream, ctxt, directives): iterable = self.expr.evaluate(ctxt) - if iterable is not None: - scope = {} - stream = list(stream) - targets = self.targets - for item in iter(iterable): - if len(targets) == 1: - scope[targets[0]] = item - else: - for idx, name in enumerate(targets): - scope[name] = item[idx] - ctxt.push(scope) - for event in _apply_directives(stream, ctxt, directives): - yield event - ctxt.pop() + if iterable is None: + return + + scope = {} + stream = list(stream) + targets = self.targets + for item in iter(iterable): + if len(targets) == 1: + scope[targets[0]] = item + else: + for idx, name in enumerate(targets): + scope[name] = item[idx] + ctxt.push(scope) + for event in _apply_directives(stream, ctxt, directives): + yield event + ctxt.pop() def __repr__(self): return '<%s "%s in %s">' % (self.__class__.__name__,