|
Michael Owens
mike at mikesclutter.com
Sun Nov 2 16:18:44 EST 2003
All,
I have been using mod_python for over two years now, and since I first
started, I've been adding little utility libraries here and there. I now have
one (more or less) integrated library that supports several different things:
- PHP Style embedded python in HTML, with page caching.
Documents with embedded python can be parsed, compiled, and cached in
memory that is limited by a global administrative setting on how much
cache mem to use. Pages are swapped out based on use. Your basic .psp
page looks something like this:
#include some_header.psp
<html><body>
<?
x = 1
print "There's no language like Python"
?>
<p>Shorthand printing of a variable/expression
x=<?$x?>
</body>
</html>
- Shared database connections. There is a simple class which wraps the DBA API
connection objects for MySQL, PostgreSQL, and SAPDB. It just adds enough
code to transparently recover from a connection timeout.
- Session management. This includes support for
- automatically generating session_ids for clients.
- Authentication from a database (assigning a user_id to a session_id) and
maintaining it in a sessions table.
- storing state to a database (mysql/postgresql) or to browser. State is
stored using a modified pickle algorithm (as pickle at the time was
insecure). You can basically serialize all python primitives and
containers (dicts, lists), and can include custom classes if you derive
from a simple base class.
- Simple access/manipulation of queries, POST headers, and cookies:
Automatically parse, read, and generate all of the above. Set/unset
cookies. Cookies are automatically set using the virtual host domain ---
you don't have to worry about which domain or vhost you are working in.
Pickle data stuctures into cookies using base64. Query generation from
dict and urlencoding.
- Util functions: Setting page expiry's, getting client info, generating
urls.
- Global and per virtual host configuration/resource pools. For each
virtual host, the core PSP handler will look for a module by that server
name in the Python path and import it into a virtual host namespace (if it
has not already been imported). This serves as a common resource pool for
that virtual host. When each page is processed, this pool is imported into
the global namespace in a dict call resource. The global resource pool is
first loaded on startup and vhost resources are added to it.
- HTML library. This includes support for
- Form/widget generation. Basic HTML widgets can be created using simple
functions. Similar to Perl's cgi module. Generate listboxs from SQL.
- Support for OLTP gateways. There are two currently supported: SecurePay and
Authorize.net. This works on top of m2crypto.
There are other little bells and whistles here and there that I am sure I
forgot about. Anyway, it has started to get too big for me to maintain on my
own and I figure perhaps it can be helpful to others. It would be nice to
have other good Python/mod_python programmers with more experience than me
hacking on it.
The project is located at gila.sourceforge.net. Currently, I only have the
code in CVS and a tarball on the home page (gila.sourceforge.net). I have
very little documentation, but it's not hard to set up. The INSTALL should do
it. If you have problems, email me.
Anyway, I hope some of you might find this useful.
Mike
|