I've run across a few blog entries that indicate other people have
managed to get this working, but I don't see any hints around (or even
about) this particular problem. Maybe it's something that is just really well known for Genshi and Mako, and I just didn't make the connection.
Anyway, setup.py installs fine, with the pure python name mapper.
When I try to actually start using variables in my template, I get this exception:
'module' object has no attribute 'get_suffixes'
Traceback (most recent call last): File "blah/main.py", line 132, in Twiddle result = self.fill_view(variables)
File "blah/main.py", line 109, in fill_view return str(t)
File "blah/Cheetah/Template.py", line 982, in __str__ def __str__(self): return getattr(self, mainMethName)()
File "blah/applications/init/views/whatever/default.py", line 96, in
respond _v = VFFSL(SL,"name",True) # '$name' on line 10, col 11
(That's my compiled template)
File "blah/Cheetah/NameMapper.py", line 255, in valueFromFrameOrSearchList frame = inspect.stack()
File "/tmp/python.6884/usr/lib/python2.5/inspect.py", line 885, in stack return getouterframes(sys._getframe(1), context)
File "/tmp/python.6884/usr/lib/python2.5/inspect.py", line 866, in
getouterframes framelist.append((frame,) + getframeinfo(frame,
File "/tmp/python.6884/usr/lib/python2.5/inspect.py", line 837, in
getframeinfo filename = getsourcefile(frame) or getfile(frame)
File "/tmp/python.6884/usr/lib/python2.5/inspect.py", line 386, in
getsourcefile for suffix, mode, kind in imp.get_suffixes():
AttributeError: 'module' object has no attribute 'get_suffixes'
get_suffixes is a method that Google doesn't allow into their sandbox. The solution is to add a monkey patch in NameMapper.py.
Underneath the opening document comments, there's a credits section, followed by some imports:
from types import StringType, InstanceType, ClassType, TypeType
from pprint import pformat
You need to update the
inspect module's reference to the
imp module (do this just below the import):
return [('.py', 'U', 1)]
inspect.imp.get_suffixes = get_suffixes
Actually, that's probably simple enough that it's worth putting into a lambda:
inspect.imp.get_suffixes = lambda : [('.py', 'U', 1)]