[ http://issues.apache.org/jira/browse/MODPYTHON-125?page=all ]
Graham Dumpleton resolved MODPYTHON-125:
----------------------------------------
Resolution: Fixed
> 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