Graham Dumpleton commented on MODPYTHON-126:

FWIW, I think I know how to fix the above so it works. This time I stumbled 
onto the fact that in Apache one can programmatically query back through the 
contexts of directives defined in a configuration. This will allow the code 
which deals with Python*Handler directives to query back looking for the 
Directory or DirectoryMatch directive it was used in.

If it can't find either, then it would have been a Location directive and it 
now will know the URL should not be used as the handler directory. If it did 
find Directory, it could work out the argument to it and use that as the basis 
for working out the directory. Ie., it would skip past any File directives and 
go direct to the Directory context.

The only trick to solve is the best way of dealing with wildcards or regexes 
for directory. One probably has to leave it until the very point that request 
is being handled, which means that Apache wildcard/regex matching routines may 
need to be exposed in mod_python Python APIs to ensure same matching scheme can 
be used against the req.filename member.

Thus, my whole idea of being able to mark base directories as discussed on 
mailing list is no longer relevant to solving this particular issue.

> PythonHandler in <Files> directive sets req.hlist.directory to useless value.
> -----------------------------------------------------------------------------
>          Key: MODPYTHON-126
>          URL: http://issues.apache.org/jira/browse/MODPYTHON-126
>      Project: mod_python
>         Type: Bug
>   Components: core
>     Versions: 3.2
>     Reporter: Graham Dumpleton

> When you have Apache ".htaccess" configuration like:
>   SetHandler mod_python
>   #PythonPath "['/Users/grahamd/Sites/auth']+sys.path"
>   <Files "page1.txt">
>   PythonHandler page1::handler_txt
>   </Files>
>   <Files "page2.txt">
>   PythonHandler page2::handler_txt
>   </Files>
> and "page1.txt" is accessed, the req.hlist.directory attribute, which is 
> supposed to list the name of the directory the PythonHandler directive was 
> used in, gets set to "page1.txt/" instead.
> This value then gets added into "sys.path". Because it doesn't actually 
> identify the directory, the module "page1" cannot actually be found when the 
> import is performed.
> [Fri Feb 10 09:08:40 2006] [error] [client] PythonHandler 
> page1::handler_txt: Traceback (most recent call last):
> [Fri Feb 10 09:08:40 2006] [error] [client] PythonHandler 
> page1::handler_txt:   File 
> "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/mod_python/apache.py",
>  line 288, in HandlerDispatch\n    log=debug)
> [Fri Feb 10 09:08:40 2006] [error] [client] PythonHandler 
> page1::handler_txt:   File 
> "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/mod_python/apache.py",
>  line 508, in import_module\n    f, p, d = imp.find_module(parts[i], path)
> [Fri Feb 10 09:08:40 2006] [error] [client] PythonHandler 
> page1::handler_txt: ImportError: No module named page1
> The only workaround at this point is to explicitly define the PythonPath 
> directive to include the directory the modules and ".htaccess" file are in. 
> Not sure yet whether there is a way in Apache of determining the directory 
> the "Files" directive is used in and set "req.hlist.directory" correctly.

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

Reply via email to