[ 
https://issues.apache.org/jira/browse/MODPYTHON-170?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Graham Dumpleton closed MODPYTHON-170.
--------------------------------------


> Allow access to request_rec/server_rec/conn_rec/filter_rec as Python CObject.
> -----------------------------------------------------------------------------
>
>                 Key: MODPYTHON-170
>                 URL: https://issues.apache.org/jira/browse/MODPYTHON-170
>             Project: mod_python
>          Issue Type: New Feature
>          Components: core
>            Reporter: Graham Dumpleton
>         Assigned To: Graham Dumpleton
>             Fix For: 3.3
>
>
> At the moment, if mod_python doesn't expose a feature of Apache that you may 
> want to use, you are stuffed and either have to convince mod_python 
> maintainers to add it, patch your mod_python or create a Python loadable 
> module that builds against both mod_python headers and Apache headers.
> In the latter, it needs access to mod_python headers so as to be able to look 
> inside the mod_python requestobject to get at the request_rec Apache 
> structure. In practice, the only thing from the mod_python requestobject that 
> such a extension module is going to want, is the request_rec structure, thus 
> it is probably simpler and makes building such an extension easier, if the 
> mod_python requestobject provided a "request_rec" attribute which was a 
> Python CObject wrapper which wrapped the C request_rec pointer. Similarly, 
> access to server_rec/conn_rec/filter_rec could also be provided.
> For example, you might have a C extension function like:
> typedef int (*ssl_is_https_t)(conn_rec*);
> static PyObject* is_https(PyObject* module, PyObject* args)
> {
>   PyObject* req_object = 0;
>   request_rec* req;
>   ssl_is_https_t ssl_is_https = 0;
>   int result = 0;
>   if (!PyArg_ParseTuple(args,"O",&req_object))
>     return 0;
>   if (! PyCObject_Check(req_object))
>     PyErr_SetString(PyExc_TypeError,"not a CObject");
>   req = PyCObject_AsVoidPtr(req_object);
>   ssl_is_https = (ssl_is_https_t)apr_dynamic_fn_retrieve("ssl_is_https");
>   if (ssl_is_https == 0)
>     return Py_BuildValue("i",0);
>   result = ssl_is_https(req->connection);
>   return Py_BuildValue("i",result);
> }
> The call to this form Python code would be:
> import myextension
> def handler(req):
>     if myextension.is_https(req.request_rec):
>        ...
> Note that something like this was posted some time back:
>   http://www.modpython.org/pipermail/mod_python/2006-February/020340.html
> but the problem with it was that it needed the mod_python header files when 
> compiling. Using the Python CObject avoids that. Any Python distutils 
> setup.py file still needs to know where the Apache header files etc are, but 
> it can use apxs to get that.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to