Re: 2.2 equivalents for transform.expr() and transform.dynamic()?

Philip Semanchuk <[email protected]> Mon, 9 Apr 2007 19:22:03 -0400
Newsgroups gmane.comp.python.spyce.general
Message-ID <[email protected]>
On Apr 9, 2007, at 4:17 PM, Jonathan Ellis wrote:

> On Mon, 9 Apr 2007 13:18:24 -0400, "Philip Semanchuk"
> <[email protected]> said:
>> Thanks. I looked through the response module and I can see how this
>> works now that you've pointed me to it. I found that I had to add a
>> dummy flush() method to my class, too, so I ended up with something
>> like this:
>>
>> [[\
>> class MyOut:
>>    def __init__(self, out):
>>      self.out = out
>>      self.writeStatic = out.write
>>      self.writeExpr = self.write
>>    def write(self, s):
>>      self.out.write(Utf8ify(ReplaceHtmlSpecials(s)))
>>    def flush(self):
>>      pass
>>
>> response.addFilter(MyOut)
>> ]]
>>
>> However this isn't the equivalent of what I'm doing with the transform
>> module. The filter above transforms *all* output whereas I only want 
>> to
>> run my functions on dynamic output.
>
> that should be the difference between writeStatic and writeExpr.  If 
> not
> it sounds like a bug.

I've spent a lot of time looking through response.py, spyce.py, 
spyceCompile.py, etc. and I can't figure out what's going wrong here. 
Maybe I'm doing something wrong? It looks like MyOut's writeStatic() 
and writeExpr() are never called directly; only write is called 
directly. For instance, using this version of MyOut, I see only !w! and 
!/w! added to the output stream:

class MyOut:
     def __init__(self, out):
         self.out = out

     def writeStatic(self, s):
         self.out.write("!s!" + s + "!/s!")

     def writeExpr(self, s):
         self.out.write("!e!" + s + "!/e!")

     def write(self, s):
         self.out.write("!w!" + s + "!/w!")

     def flush(self):
         pass


This is despite the fact that this Spyce code --
    <p>[[="<Dimmesdale!>"]]</p>

-- compiles to this:
     response.writeStatic('\n\n<p>')
     response.writeExpr('<Dimmesdale!>')
     response.writeStatic('</p>\n\n</body>\n</html>\n')


Suggestions?

Thanks
Philip


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV