[mod_python] Re: Re: any way to get the current handler's directory?

vegetax vegeta.z at gmail.com
Sun May 1 02:29:02 EDT 2005


Graham Dumpleton wrote:

> 
> On 01/05/2005, at 3:40 PM, vegetax wrote:
>>> Depends on which version of mod_python you are using. If you need to
>>> be
>>> portable to older versions of mod_python, use:
>>>
>>>        if hasattr(req,"hlist"):
>>>          # In mod_python 3.X have the req.hlist member.
>>>          handler_root = req.hlist.directory
>>>        elif hasattr(req,"get_dirs"):
>>>          # In mod_python 2.X have the req.get_dirs() method.
>>>          handler_root = req.get_dirs()["PythonHandler"]
>>>
>>> Graham
>>
>>
>> Thanks graham, forgot to mention that i also need the uri part of the
>> current handler,ie:
>>
>> <Directory "/var/www/mywebapp/handler_root">
>>   SetHandler mod_python
>>   PythonHandler myhandler
>>   PythonOption dirpath "/mywebapp/handler_root"
>> <Directory/>
>>
>> Any way to get this information in one step? without having to
>> req.filename[len(req.hlist.directory): ]
> 
> Use a package which has worked it out for you and already provides a
> dispatch mechanism. ;-)
> 
> That would at least save you having to work out how to do it yourself
> which would I guess eliminate the step altogether. Have you ever looked
> at Vampire (http://www.dscpl.com.au/projects/vampire).
> 
> Anyway, I would recommend not trying to cut corners, have seen it
> many times on the list where people write their own dispatch mechanisms
> not knowing that it will not work in all situations. Ie., would break
> if done in mod_userdir directory, would break in a subdirectory of
> handler root etc etc.
> 
> In Vampire where this sort of determination of additional path_info
> is calculated, I use:
> 
>        handler_root = None
> 
>        if hasattr(req,"hlist"):
>          # In mod_python 3.X have the req.hlist member.
>          handler_root = req.hlist.directory
>        elif hasattr(req,"get_dirs"):
>          # In mod_python 2.X have the req.get_dirs() method.
>          handler_root = req.get_dirs()["PythonHandler"]
> 
>        if handler_root is None:
>          raise apache.SERVER_RETURN, apache.HTTP_INTERNAL_SERVER_ERROR
> 
>        length = len(req.filename) - len(handler_root)
> 
>        path_info = "/"
> 
>        if length != 0:
>          path_info += req.filename[-length:]
> 
> What is it that you are actually trying to do? See if Vampire might
> already provide what you need and save yourself some work. Am happy
> to explain whether Vampire might help in what you are doing.
> 
> Graham

Basically is a version of publisher handler,targeted to a specific
webframework,the publisher handler is sloww cause it tries to be
everything,too generic, my handler will just serve .py scripts and thats
all, is not meant to serve several resources,or work with user_dir or have
subdirectories, since subdirectories will be mapped to python packages by
the handler.
I am obsessed about making it fast, so thats why i wanted to get that info
in one step instead of two.




More information about the Mod_python mailing list