Apache Mod-Python - Updated: (MODPYTHON-103) Implement req.add_output_filter().

This is Interesting: Free IT Magazines  
Home > Archive > Apache Mod-Python > January 2006 > Updated: (MODPYTHON-103) Implement req.add_output_filter().





You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

Author Updated: (MODPYTHON-103) Implement req.add_output_filter().
Graham Dumpleton (JIRA)

2006-01-08, 7:46 am

[ http://issues.apache.org/jira/brows...ON-103?page=all ]

Graham Dumpleton updated MODPYTHON-103:
---------------------------------------

Attachment: grahamd_20060108_2_multiple.diff

You can ignore "grahamd_20060108_1_requestobject.c.diff" now.

I have superseded this with "grahamd_20060108_2_multiple.diff". This is done as a context diff as well to make it easier to see where changes need to go.

This later patch includes support for dynamic registration of new Python filters from a request handler. For example:

from mod_python import apache

def uppercase(filter):
apache.log_error("uppercase")
apache.log_error(filter.name)
apache.log_error(filter.handler)
apache.log_error("is_input "+repr(filter.is_input))
s = filter.read()
while s:
filter.write(s.upper())
s = filter.read()
if s is None:
apache.log_error("close")
filter.close()
apache.log_error("end")

def handler(req):
req.register_output_filter("UPPERCASE","example::uppercase")
req.add_input_filter("UPPERCASE")
req.add_input_filter("CONTENT_LENGTH")

req.content_type = 'text/plain'
req.write('hello',0)
return apache.OK

All up this adds the following methods to the request object:

register_input_filter()
register_output_filter()
add_input_filter()
add_output_filter()

The 'add' methods can be used to add to the filter stack either predefined filters, or those registered from the handler. Those registered from the handler only have a registration lifetime of that request. Multiple calls can be made to the 'add' methods
to chain more than one filter.


> Implement req.add_output_filter().
> ----------------------------------
>
> Key: MODPYTHON-103
> URL: http://issues.apache.org/jira/browse/MODPYTHON-103
> Project: mod_python
> Type: New Feature
> Components: core
> Reporter: Graham Dumpleton
> Fix For: 3.3
> Attachments: grahamd_20060108_1_requestobject.c.diff, grahamd_20060108_2_multiple.diff
>
> Add new member function to request object called "add_output_filter()". This would be a wrapper around the function "ap_add_output_filter()" and allow previously defined filters to be attached to the current request such that output can be filtered thro

ugh them. For example:
> req.add_output_filter("INCLUDES")
> It would probably be necessary for any such call to be done prior to the first output being generated from the request handler.
> In addition to this member function, it may be necessary to also provide another member function called something like "req.add_python_output_filter()". This would be called something like:
> req.add_python_output_filter("module_name::filter_name",path)
> Ie., like "req.add_handler()" but no first argument for phase.
> This method would allow a specific Python filter handler function to be specified. This would be equivalent to using the PythonOutputFilter directive to first name a mod_python based filter handler function and then adding it as an output filter.
> # Main Apache config.
> PythonOutputFilter module_name::filter_name MYFILTER
> # Handler code.
> req.add_output_filter("MYFILTER")
> Note that the PythonOutputFilter directive can only be used in the main Apache configuration file, it cannot be used in a .htaccess file. Whether it could be made to work in a .htaccess file in some way needs to be investigated. In mod_perl their equivl

ent seems to allow it.

Sponsored Links






Free braindumps | Software forum | Database administration forum

Copyright 2003 - 2008 webservertalk.com