[ http://issues.apache.org/jira/browse/MODPYTHON-103?page=all ]
Graham Dumpleton updated MODPYTHON-103:
---
Attachment: grahamd_20060108_1_requestobject.c.diff
Attaching file grahamd_20060108_1_requestobject.c.diff.
This is the easy bit of the suggested changes. It allows a pre registered
filter to be added into either the input or output filter chain.
For example, one could do:
from mod_python import apache
def handler(req):
req.add_output_filter(CONTENT_LENGTH)
req.content_type = 'text/plain'
req.write(str(globals()),0)
req.write('\n',0)
req.write(str(locals()),0)
req.write('\n',0)
return apache.OK
Provides that no req.write() flushes the output, the CONTENT_LENGTH output
filter provided by Apache will add a valid content length header to the
response automatically.
Alternatively, if you have mod_deflate built into Apache, you could use:
from mod_python import apache
def handler(req):
req.add_output_filter(DEFLATE)
req.headers_in[Accept-Encoding] = gzip
req.content_type = 'text/plain'
req.write(str(globals()),0)
req.write('\n',0)
req.write(str(locals()),0)
req.write('\n',0)
return apache.OK
This will have the effect or forcing the output sent to the browser to be
compressed, ie., response header would look like:
HTTP/1.1 200 OK
Date: Sun, 08 Jan 2006 02:04:37 GMT
Server: Apache/2.0.55 (Unix) mod_python/3.2.6-dev-20051229 Python/2.3
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 1917
Connection: close
Content-Type: text/plain
The content would be compressed accordingly. Not sure if the Vary header would
be an issue in this case, but no way to tell mod_deflate not to include it.
Now on to the next bit, allow filters to be registered from mod_python using
req.register_input_filter() and req.register_output_filter(). The registration
only being active for the current request. :-)
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
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 through 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 equivlent seems to allow it.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira