Ticket #221: genshi-py24-star-import.patch
| File genshi-py24-star-import.patch, 2.0 KB (added by aronacher, 15 years ago) |
|---|
-
template/base.py
254 254 """Pop the top-most scope from the stack.""" 255 255 256 256 257 # check for a python 2.4 bug in the ceval loop. 258 try: 259 exec 'from sys import *' in {}, Context() 260 except SystemError: 261 def _star_import_compat(self, module): 262 namespace = self.frames[0] 263 mod = __import__(module, None, None, ['__all__']) 264 if hasattr(mod, '__all__'): 265 members = mod.__all__ 266 else: 267 members = [x for x in mod.__dict__.items() 268 if not x.startswith('_')] 269 for member in members: 270 namespace[member] = getattr(mod, member) 271 Context._star_import_compat = _star_import_compat 272 del _star_import_compat 273 274 257 275 def _apply_directives(stream, directives, ctxt, **vars): 258 276 """Apply the given directives to the stream. 259 277 -
template/eval.py
26 26 from textwrap import dedent 27 27 28 28 from genshi.core import Markup 29 from genshi.template.base import TemplateRuntimeError 29 from genshi.template.base import TemplateRuntimeError, Context 30 30 from genshi.util import flatten 31 31 32 32 __all__ = ['Code', 'Expression', 'Suite', 'LenientLookup', 'StrictLookup', … … 520 520 [self.visit(x) for x in node.subs] 521 521 ) 522 522 523 def visitFrom(self, node): 524 if not hasattr(Context, '_star_import_compat') or \ 525 node.names != [('*', None)]: 526 return node 527 # this is a python 2.x bug. Only if we have a broken python 528 # version we have to apply that hack. 529 return ast.Discard(ast.CallFunc( 530 ast.Getattr(ast.Name('__data__'), '_star_import_compat'), 531 [ast.Const(node.modname)], None, None 532 ), lineno=node.lineno) 533 523 534 # Statements 524 535 525 536 def visitAssert(self, node):
