[ 
http://issues.apache.org/jira/browse/MODPYTHON-161?page=comments#action_12378282
 ] 

Graham Dumpleton commented on MODPYTHON-161:
--------------------------------------------

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.

> Wrong interpreter chosen with req.add_handler()/PythonInterpPerDirective.
> -------------------------------------------------------------------------
>
>          Key: MODPYTHON-161
>          URL: http://issues.apache.org/jira/browse/MODPYTHON-161
>      Project: mod_python
>         Type: Bug

>   Components: core
>     Versions: 3.3
>     Reporter: Graham Dumpleton
>     Assignee: Graham Dumpleton

>
> Having fixed MODPYTHON-160, if using:
> # .htaccess
> SetHandler mod_python
> PythonInterpPerDirective On
> PythonFixupHandler interpreter_1
> # interpreter_1.py
> from mod_python import apache
> import os, sys
> directory = os.path.dirname(__file__)
> def fixuphandler(req):
>     req.log_error("fixuphandler")
>     req.log_error("interpreter=%s"%req.interpreter)
>     req.log_error("directory=%s"%req.hlist.directory)
>     req.add_handler("PythonHandler","interpreter_1",directory)
>     return apache.OK
> def handler(req):
>     req.log_error("handler")
>     req.log_error("interpreter=%s"%req.interpreter)
>     req.log_error("directory=%s"%req.hlist.directory)
>     req.content_type = 'text/plain'
>     req.write('hello')
>     return apache.OK
> when select_interp_name() in src/mod_python.c tries to determine the 
> interpreter name, for PythonInterPerDirective, it will use the value as 
> supplied as directory argument to req.add_handler(). In doing this though, it 
> doesn't consider the fact that the directory may not have a trailing slash 
> and since interpreter names for PythonInterpPerDirective always have a 
> trailing slash, the handler will not be executed in correct interpreter 
> context.
> [Sun Apr 16 17:20:00 2006] [notice] mod_python: (Re)importing module 
> 'interpreter_1'
> [Sun Apr 16 17:20:00 2006] [error] [client ::1] fixuphandler
> [Sun Apr 16 17:20:00 2006] [error] [client ::1] 
> interpreter=/Users/grahamd/Workspaces/testing/interpreter-1/
> [Sun Apr 16 17:20:00 2006] [error] [client ::1] 
> directory=/Users/grahamd/Workspaces/testing/interpreter-1/
> [Sun Apr 16 17:20:00 2006] [notice] mod_python: (Re)importing module 
> 'interpreter_1'
> [Sun Apr 16 17:20:00 2006] [error] [client ::1] handler
> [Sun Apr 16 17:20:00 2006] [error] [client ::1] 
> interpreter=/Users/grahamd/Workspaces/testing/interpreter-1
> [Sun Apr 16 17:20:00 2006] [error] [client ::1] 
> directory=/Users/grahamd/Workspaces/testing/interpreter-1
> A further problem is that normally the path indicating where a directive was 
> defined is internally calculated from Apache configuration and thus always 
> uses POSIX directory conventions, ie., forward slash. If the above code were 
> run on Win32, the directory calculated from __file__ is going to most likely 
> use DOS directory conventions, ie., backward slash. Thus, even if a trailing 
> slash were to be added, it still will not work because the remainder of the 
> path is going to use backward slash and thus the interpreter name still will 
> not match what it probably should be.
> The main purpose of the directory argument to req.add_handler() is to know 
> where to find the module referenced in the handler argument. In this case it 
> is also used to determine the Python interpreter name. The fix may be that 
> the interpreter name be determined in some other way based on the interpreter 
> in use when the req.add_handler() call was made.
> This is just part of problems I can possibly see with calculation of 
> interpreter names for handlers. More on this another time. :-)

-- 
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

Reply via email to