[mod_python] get_options() in apache module

Graham Dumpleton grahamd at dscpl.com.au
Wed Aug 9 05:42:17 EDT 2006


On 09/08/2006, at 5:28 PM, Alex Greif wrote:

> Hi,
> in the docs I only find req.get_options()
>
> But I need access to the options before the first request.
> Is there a similar method in the  apache object? Unfortunately I did
> not find one
>
> <Directory ...>
>  SetHandler mod_python
>  PythonHandler mod_python.publisher
>  PythonOption key "value"                       <---- this one
> </Directory>
>
> The workaround I use now is to start apache with a -D and then call
> apache.exists_config_define()
> But for my needs this is a smelling workaround :((
>
> So a apache.get_options() would be the best because the options are
> global anyway, so I dont understand why access to them is only
> possible through the request object

When you use req.get_options() the result is the combination of all  
options
from global scope, through VirtualHost, Directory/Location/Files  
and .htaccess
files which are relevant to the target of the request.

Thus req.get_options() would already return the specific PythonOption  
your
mail points at when executed from within a handler.

There is also req.connection.base_server.get_options() which equates to
the combination of options down to VirtualHost level. This will not  
contain
any overrides for specific options inside of Directory/Location/Files  
directives
or .htaccess file relevant to the specific request.

In mod_python 3.2.10, there is also req.server.get_options(). This is
similar to req.get_options(), but returns only the options defined at  
global
scope within the Apache configuration. That is, outside of the  
context of
any VirtualHost, Location, Directory or Files directives.

In mod_python 3.3, one will also be able to access the main server  
object
through apache.main_server. Thus apache.main_server.get_options() will
return the same as req.server.get_options() except that since it is  
in the apache
module it can be used at global scope within modules at the time they  
are
being imported.

The apache.main_server object in mod_python 3.3 did exist in mod_python
3.2.10, but was called apache._server and wasn't officially part of  
the public
API at that point.

Thus apache.main_server may be what you want if you mean to be able to
access it outside of any handler (before a request arrives), but your  
PythonOption
must be at global scope, not within the Directory directive as you  
have it.

Graham


More information about the Mod_python mailing list