[mod_python] Output Filters Redeaux

Lee Brown administrator at leebrown.org
Mon Apr 17 12:21:28 EDT 2006


Greetings!

Just for fun, here is a handy template for constructing Mod Python output
filters:

    from mod_python import apache
    from cStringIO import StringIO

    def outputfilter (filter):
            
        try:
            streambuffer = filter.req.streambuffer
        except AttributeError:
            filter.req.streambuffer = StringIO() # See Note 1
            streambuffer = filter.req.streambuffer
		# See Note 2
        
        streamlet = filter.read()
        while streamlet:
		# See Note 3
            streambuffer.write(streamlet)
            streamlet = filter.read()

        if streamlet is None:
		# See Note 4
            filter.write(streambuffer)
            filter.close()

This is as stripped-down, bare-bones as a filter can get, IMHO.  Of course,
this is just an echo filter until you add your own code to it.

Note 1:

When a filter is invoked once or only a few times, there is no real
advantage in using a cStringIO buffer over a Python List buffer.
As the number of re-invocations goes up, cStringIO starts to show a speed
advantage.

Note 2:

Anything else that you may want to initialize at the start of a request
should go here, ex:
    filter.req.some_variable = some_value

Note 3:

Depending on your application, you may want to hack at the raw stream before
putting it in the buffer, ex:
    streambuffer.write(streamlet.replace('\r\n', '\n'))

Note 4:

At this point, streambuffer contains the entire request response and you may
go ahead and do whatever it is you wanted to accomplish, ex:
    filter.write(my_tranform_function(streambuffer))



Best Regards,
Lee E. Brown
(leebrown at leebrown.org)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mm_cfg_has_not_been_edited_to_set_host_domains/pipermail/mod_python/attachments/20060417/22d132a2/attachment.html


More information about the Mod_python mailing list