|
Nick
nick at dd.revealed.net
Mon Apr 17 12:43:22 EDT 2006
Great example! Thanks.
On a devel note, it looks like the filter object would be very handy if it
could be treated as in iterator, such as (using the sample code's nomenclature):
for streamlet in filter:
[do something with streamlet here]
It would definitely turn filter writing into something more Pythonic. Does
that seem like something that would be useful?
Thanks,
Nick
Lee Brown wrote:
>
>
> 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)
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://mailman.modpython.org/mailman/listinfo/mod_python
|