Apache Mod-Python - Updated: (MODPYTHON-165) Exporting functions from mod_python

This is Interesting: Free IT Magazines  
Home > Archive > Apache Mod-Python > August 2006 > Updated: (MODPYTHON-165) Exporting functions from mod_python





You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

Author Updated: (MODPYTHON-165) Exporting functions from mod_python
Graham Dumpleton (JIRA)

2006-08-20, 7:12 am

[ http://issues.apache.org/jira/brows...ON-165?page=all ]

Graham Dumpleton updated MODPYTHON-165:
---------------------------------------

Attachment: mptest.tar.gz

Attached "mptest.tar.gz". This provides an example of how these functions can be used in practice.

So far all functions described except for that for creating filter objects has been created and added to subversion trunk. It could be argued that if wanting to build filters one should just use mod_python and so possibly not much sense providing access t
o such a function. This can be reviewed later as necessary.

Other functions which could be investigated for inclusion are ones for determining interpreter based on target of request, access to PythonOption and PythonConfig tables objects etc.

> Exporting functions from mod_python to allow access to interpreters etc.
> ------------------------------------------------------------------------
>
> Key: MODPYTHON-165
> URL: http://issues.apache.org/jira/browse/MODPYTHON-165
> Project: mod_python
> Issue Type: New Feature
> Components: core
> Reporter: Graham Dumpleton
> Assigned To: Graham Dumpleton
> Attachments: mptest.tar.gz
>
>
> I have ranted a bit about this before:
> http://www.mail-archive.com/python-...g/msg01087.html
> and issue came up again recently on httpd mailing list so thought it was time to note my ideas about it.
> The idea is that mod_python should export a number of functions using:
> APR_DECLARE_OPTIONAL_FN
> macro so that they are available to other Apache modules.
> These functions would allow access to interpreter instances, the stored Python request object for the current request, as well as functions for creating server, filter and connection Python wrapper objects. The functions and prototypes would be somethin

g like the following:
> PyInterpreterState *mp_acquire_interpreter(const char *name);
> Get/create the Python interpreter instance called "name". A thread state
> object would be created as necessary.
> void mp_release_interpreter(void);
> Release the currently held thread state object for the interpreter.
> PyObject *mp_get_request_object(request_rec *req);
> Get the Python request object wrapper for "req". A new reference is returned
> which will need to Py_DECREF'd when no longer required. If the request object
> instance had already been created within mod_python or through an earlier call,
> it is a reference to the existing instance that is returned.
> PyObject *mp_create_server_object(server_rec *server);
> Create a new instance of Python server object wrapper for "server". This is a
> new reference and will need to be Py_DECREF'd when no longer required.
> PyObject* mp_create_connection_object(conn_rec *connection);
> Create a new instance of Python connection object wrapper for "connection".
> This is a new reference and will need to be Py_DECREF'd when no longer required.
> PyObject* mp_create_filter_object(ap_filter_t *f, apr_bucket_brigade *bb, int is_input,
> ap_input_mode_t mode, apr_size_t readbytes);
> Create a new instance of Python filter object wrapper for filter and bucket brigade.
> This is a new reference and will need to be Py_DECREF'd when no longer required.
> It is actually quite simple to create these wrappers around current mod_python internals. What it would effectively allow you to do is to create an Apache module which is written principally in C code and which therefore has access to all features of Ap

ache. Ie., it could define its own directives or even access stuff like mod_dav hooking mechanism. Having used all those mechanisms to set it self up, when it executes it could acquire a Python interpreter instance and make calls out to Python code to per
form work. The Python wrapped request/server/connection/filter objects can be supplied to the Python code, as well as any other Python objects the module itself creates which wrap up other parts of Apache, for example, mod_dav structures.
> The only part of the current mod_python that needs to be changed to support this is that how the interpreter name is stored in the Python request object needs to be changed, specifically it has to be removed. This doesn't mean req.interpreter will not w

ork, when that is accessed it would behind the scenes link back to apache.interpreter for the name of the interpreter the code is executing under and get it from there.

Sponsored Links






Free braindumps | Software forum | Database administration forum

Copyright 2003 - 2008 webservertalk.com