req.add_handler() and inheritance of directory to be searched for module
------------------------------------------------------------------------

         Key: MODPYTHON-155
         URL: http://issues.apache.org/jira/browse/MODPYTHON-155
     Project: mod_python
        Type: Sub-task

  Components: importer  
    Reporter: Graham Dumpleton
 Assigned to: Graham Dumpleton 


The documentation for req.add_handler() says:

"""Optional dir is a string containing the name of the directory to be added to 
the pythonpath. If no directory is specified, then, if there is already a 
handler of the same type specified, its directory is inherited, otherwise the 
directory of the presently executing handler is used. I there is a PythonPath 
directive in effect, then sys.path will be set exactly according to it (no 
directories added, the dir argument is ignored)."""

This comment about the directory being inherited from the prior or currently 
executing handler is actually bogus as the code does not do anything specific 
at all to try and implement such behaviour. If it works this way at all it is 
partly by luck as what will actually dictate where the module specified to the 
req.add_handler() method is found is the current order of directories specified 
in sys.path. Since additional directories added into sys.path by the old 
importer can be performed in effectively random order, behaviour could actually 
be quite random if the same module name were used in multiple directories.

Because the new importer doesn't add directories into sys.path for 
Python*Handler directives, a problem will currently arise if no directory is 
supplied to req.add_handler(). Specifically, a module may not be able to be 
found. This is because it can no longer fall back on to fact that with old 
module importer, the directory corresponding to the Python*Handler directive 
would be listed in sys.path somewhere.

Thus, the documented behaviour for req.add_handler() when the directory hasn't 
been set needs to actually be implemented as described with an appropriate 
directory being calculated at the time that req.add_handler() is called with 
that directory being recorded as needing to be searched for the module. In 
changing the code though, if old and new importers are going to be supported 
during a transition phase, it must detect when the new module importer is being 
used and only do this when it is, as otherwise it will screw up how modules are 
found for the old importer.

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