|
FWIW, problems can also arise with PythonInterpPerDirectory. In this case the issue is that the interpreter name in that case is derived from the value of req.filename at the time the handler is called. The same issues as above can therefore arise in that req.filename could be given a value that doesn't have a trailing slash or which uses Win32 forward slashes instead of backslashes. This could therefore mean a different interpreter to that which was expected might be used for a subsequent handler phase if req.filename was modified.
In general there are possible also issues with req.hlist.directory derived from Apache configuration on Win32 when a user uses backslash instead of foward slash in Directory directive. See:
http://www.mail-archive.com/python-dev@httpd.apache.org/msg01839.html for examples. What mod_python probably needs to do is to ensure that it normalises paths to a POSIX style path, with allowance for drive specifier on Win32, in the same sort of format that Apache uses when it sets up req.filename. This would bring some consistency to interpreter naming. The directory supplied to req.register_input_filter() and req.register_output_filter() also needs to be canonicalised (made POSIX style) and trailing slash added to fix issues with PythonInterpPerDirective.
The issues with Win32 backward slash versus forward slash are a non issue for directory derived from directive specified in configuration as that was to do with incomplete changes related to I am going to break out the problem of non POSIX style names being assigned to req.filename as a separate issue as there are wider implications in that which potentially need to be discussed.
In respect of the fact that arbitrary directories supplied to req.add_handler(), req.register_input_filter() and req.register_output_filter() can be interpreted as a directory associated with a directive when PythonInterpPerDirective is used, when in fact they aren't linked to any directive, is probably just a quirk that has to be accepted and left as is. Especially with the new importer where modules can be specified by full path, there are other options to ensure things can be made to work how desired. |
||||||||||||||||||||||||||||||||||||||||||||||||||
req.add_handler("PythonHandler","xxx","/tmp")
In this case you get:
[Sun Apr 16 17:43:00 2006] [error] [client ::1] handler
[Sun Apr 16 17:43:00 2006] [error] [client ::1] interpreter=/tmp
[Sun Apr 16 17:43:00 2006] [error] [client ::1] directory=/tmp
Ie., interpreter name ends up being "/tmp".