[mod_python] mod_python.Importer.path; set dynamically

Graham Dumpleton graham.dumpleton at gmail.com
Tue Feb 5 05:12:17 EST 2008


Sorry for the delay.

To make things work transparently across a lot of modules, for both
import_module() and 'import' where possible, what you can do is modify
the value of option 'mod_python.importer.path' dynamically from code.
This can be done from memory using:

  req.options['mod_python.importer.path'] = "...."

You obviously can query this first if you need to somehow manipulate
it to add stuff.

All you then need is a level of indirection. Has to be from inside of
handler, can't be at global scope. So,
/var/www/python_modules/index.py might do:

  def index(req, *args, **kwargs):
    req.options['mod_python.importer.path'] = \
        '/var/www/python_modules/%s:/var/www/python_modules' % req.user
    module = apache.import_module('index-core')
    return module.index(req, *args, **kwargs)

If there is only one level of module imports, you could also do just:

  def index(req, *args, **kwargs):
    module = apache.import_module('index-core', \
        path=['/var/www/python_modules/%s:/var/www/python_modules' % req.user]))
    return module.index(req, *args, **kwargs)

but think that if subdirectory uses 'import', then it might not look
in all the directories. Can't remember how it works now.

Anyway the suggestion is look at changing req.options if you haven't already.

Graham

On 01/02/2008, Martijn Moeling <martijn at xs4us.nu> wrote:
>
>
>
> Graham,
>
>  As you might remember I added a MySQLdb section to session.
>  (to be able to save sessions across computers)
>
>  In my system a lot of additional data is added to the req object, which is
> passed
>  around. in my case it is req.Session.user.
>
>  (I do not use http based auth, since this is in conflict with my web based
> desktop)
>
>  nevertheless, i can change your "example code" to my needs, consider
> req.user as the distinguisher for ease of thinking.
>
>  Martijn
>
>
>
>
>  -----Original Message-----
>  From: Graham Dumpleton [mailto:graham.dumpleton at gmail.com]
>  Sent: Thu 31.01.2008 23:03
>  To: Martijn Moeling
>  Cc: mod_python at modpython.org
>  Subject: Re: [mod_python] mod_python.Importer.path; set dynamically
>
>  On 01/02/2008, Martijn Moeling <martijn at xs4us.nu> wrote:
>  > Hi!
>  >
>  >  I am an extensive mod_python user and my system needs something special.
>  >
>  >  Consider the following:
>  >
>  >  in httpd.conf I have :
>  >
>  >  PythonOption mod_python.importer.path ["/var/www/python_modules"]
>  >
>  >  /var/www/html/index.py is linked to ../python_modules/index.py
>  >
>  >  the python_modules directory has subdirectories, like; developer1,
>  > developer2
>  >
>  >  the python_modules contains stable modules and developerX holds
> development
>  > versions.
>  >
>  >  I have load balancing with multiple frond-ends (apache/MP) and one
> backend
>  > (MySQL).
>  >
>  >  I would like to dynamically change the mod_python.importer.path so that
>  > developer1 runs code in the corresponding subdir if the module exists,
>  >  else fall back to the python_modules directory.
>  >
>  >  Any tips, suggestions, remarks?
>
>  What is the distinguisher used to know which developer it is? Are you
>  using something like Basic authentication and so could distinguish
>  based on req.user?
>
>  If you tell me what the distinguisher is, probably have an idea.
>
>  Graham
>
>


More information about the Mod_python mailing list