2013/2/6 Skip Montanaro <span dir="ltr"><<a href="mailto:skip@pobox.com" target="_blank">skip@pobox.com</a>></span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'm slowly working through some little tests which don't require and<br>
of our libraries at work.  My current test is a script which uses the<br>
Cheetah template engine.  I see that it is buried somewhere in PyPy's<br>
tests (inside genshi?), but my straightforward install of Cheetah<br>
2.4.4 doesn't work because the str() of a compiled template doesn't do<br>
any of the required template expansion.  It just returns what looks<br>
suspiciously like the repr() of the object.<br>
<br>
Is there a modified version of Cheetah somewhere (or patch) which<br>
coaxes it to work with PyPy?  Failing that, where is the test suite<br>
code?  I see no references to it as a standalone download, and am<br>
currently working with a binary build of 1.9<br></blockquote><div><br></div><div>It's due a small incompatibility between CPython and PyPy.</div><div><br></div><div>You are right that __str__ is not correctly set on Cheetah templates, this is because of this statement in Cheetah/Template.py:</div>
</div><div>    concreteTemplateClass.__str__ is object.__str__</div><div>A fix is to replace the "is" operator by "==".</div><div>This is correcly covered by the tests in Cheetah/Tests/Template.py (just run this file with pypy)</div>
<div><br></div><div>The explanation origins from a CPython oddity (IMHO):</div><div>CPython has no "unbound built-in methods" for C types, and object.__str__ yields the same object every time.</div><div>This is not the case for user-defined classes, for example "type(help).__repr__ is type(help).__repr__" is False.</div>
<div><br></div><div>PyPy is more regular here, and has real unbound built-in methods. On the other hand this means that the "is" comparison should not be used, even for built-in methods.</div><div>A similar pattern existed in the stdlib pprint.py, and we chose to fix the module.</div>
<div><br></div>-- <br>Amaury Forgeot d'Arc