[ http://issues.apache.org/jira/browse/MODPYTHON-125?page=all ]
Graham Dumpleton updated MODPYTHON-125: --------------------------------------- Fix Version: 3.3 Assign To: Graham Dumpleton > Improvements associated with req.handler for type checker phase. > ---------------------------------------------------------------- > > Key: MODPYTHON-125 > URL: http://issues.apache.org/jira/browse/MODPYTHON-125 > Project: mod_python > Type: Improvement > Components: core > Versions: 3.3 > Reporter: Graham Dumpleton > Assignee: Graham Dumpleton > Fix For: 3.3 > > One purpose of the type checker phase in Apache, as able to be hooked using > the PythonTypeHandler directive, is to use it to make decisions as to which > actual handler should be used to deliver up the content for a request. It is > also intended to be used to set up attributes such as req.content_type, > req.content_encoding and req.content_languages. An example of an Apache > module which supplies a function for this phase is mod_mime. That module uses > lookups based on content type as derived from request URL extension type, to > specify which handler should be used to generate the content. Another is > mod_negotiation, which performs other sorts of determinations based on the > request extension. > In mod_python, there are a few missing bits which would allow you to use > mod_python to do the same sorts of things. These are that req.handler, > req.content_encoding and req.content_languages are not writable. Of these the > most important is probably req.handler. > To illustrate how it might be used, imagine an Apache configuration for a > directory of: > PythonTypeHandler select_handler > PythonHandler deliver_content > Although the PythonHandler directive is specified here, it is never actually > called. This is because the configuration doesn't specify either "SetHandler" > or "AddHandler" directives. When the SetHandler directive is used, normally > the Apache core would see it and trigger mod_python for the content handler > phase. If AddHandler is instead used, it is mod_mime that would trigger > mod_python be used if the extension matches that in the request URL. > Instead of using either of these directives, what should instead be able to > be done is that a handler associated with PythonTypeHandler could say that > mod_python should be triggered for the content phase. This might be done > something like: > def typehandler(req): > if os.path.splitext(req.filename)[1] == ".py": > req.handler = "mod_python" > return apache.OK > return apache.DECLINED > You might even say exactly which handler should be called as well. > def typehandler(req): > if os.path.splitext(req.filename)[1] == ".py": > req.handler = "mod_python" > req.add_handler("PythonHandler","mod_python.publisher") > return apache.OK > return apache.DECLINED > Unfortunately, this doesn't work because req.handler isn't writable. With > req.handler writable it does work and the handler associated with > PythonHandler, or as specified using req.add_handler() will be executed for > the content phase. > Now the main intent of this JIRA issue is to make req.handler writable, but > at the same time it is to highlight that for completeness, that > req.content_encoding and req.content_languages should also probably be made > writable as they are values which for example are modifed by mod_mime in this > phase of processing. Note that req.content_type is already writable, which is > another attribute which mod_mime modifies in this phase. > -- 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