Graham Dumpleton
grahamd at dscpl.com.au
Mon Apr 17 17:34:29 EDT 2006
BTW, since you are modifying the length of the content, you must ensure you delete any content length header in the req.headers_out, otherwise it will disagree with what is actually sent and clients may hang waiting for data or prematurely truncate data. The deletion of the header must be done before the first call to filter.write(). On 18/04/2006, at 2:36 AM, Lee Brown wrote: > Greetings! > > This is the code for a Mod Python output filter that performs an > XSLT transform on XML data that I published a few weeks ago. I've > restructured it as an example application of the filter template: > > from mod_python import apache > from cStringIO import StringIO > import lxml.etree > import time > > name = 'LXML' > timestring = 'Time to process XML/XSLT files using %s: %.3f > milliseconds (%s pages per second) [%s pass]\n' > > xsltfile = open('c:/webdev/sites/crashtest/templates/ > template.xslt', 'rU') > styledoc = lxml.etree.parse(StringIO(xsltfile.read())) > transformer = lxml.etree.XSLT(styledoc) > xsltfile.close() > > def outputfilter (filter): > try: > streambuffer = filter.req.streambuffer > except AttributeError: try: del filter.req.headers_out["Content-Length"] except: pass > filter.req.streambuffer = StringIO() > streambuffer = filter.req.streambuffer > filter.req.start = time.clock() > filter.req.passes = 0 > > streamlet = filter.read() > while streamlet: > filter.req.passes += 1 > streambuffer.write(streamlet.replace('\r\n', '\n')) > streamlet = filter.read() > > if streamlet is None: > doc = lxml.etree.parse(streambuffer) > doc.xinclude() > result = str(transformer(doc)) > end = time.clock() > start = filter.req.start > passes = filter.req.passes > ms = (end-start)*1000 > pps = int(1/(end-start)) > timestamp = timestring % (name, ms, pps, passes) > filter.write(result.replace('benchmark', timestamp)) > filter.close() > > > > Best Regards, > Lee E. Brown > (leebrown at leebrown.org) > > _______________________________________________ > Mod_python mailing list > Mod_python at modpython.org > http://mailman.modpython.org/mailman/listinfo/mod_python
|