|
Martijn Moeling
martijn at xs4us.nu
Tue Feb 12 04:43:48 EST 2008
Graham,
Thank you, I did not mess around with it yet, I am planning a
versioning system to be added to my webbased development platform.
I am still having some trouble with my webdav module, I have to taccle
that one first.
Your help is usefull one question though:
say the inporterpath is set to:
".../python_modules/me:.../python_modules"
in the apacheconfig the importerpath is set to .../python_modules
in both directories stays:
modulex.py ( in the me directory is the lates version)
in my handler module:
import modulex
de handler(req):
....... (some code)
if req.debug and req.session.loggedIn:
req.options['mod_python.path'] = ".../me:../"
importedModules=[]
modules=filesInUserDirectory(req.session.user)
for module in modules:
module.append( apache.import_module(module)
return module.index(req,*args,**kwargs) # return apache.OK?
......... (some code)
return apache.OK
what happens to the interpreter for the next requests? which "modulex"
is used ? The are supposed to get the "stable" one from .../
python_modules/
I don't understand what the return line does, what happens if I return
apache.OK in this case?
Martijn
On Feb 5, 2008, at 11:12 AM, Graham Dumpleton wrote:
> 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
>>
>>
|