"""This subclass of WebServerAdaptor is for FastCGI."""
__docformat__ = "restructuredtext"
# Created: Tue Jan 18 15:57:08 PST 2005
# Author: Jeffrey Wescott, Shannon -jj Behrens
# Email: jjinux@users.sourceforge.net
#
# Copyright (c) Jeffrey Wescott, Shannon -jj Behrens. All rights reserved.
import traceback
from aquarium.util.Aquarium import Aquarium
from aquarium.util import HTTPResponses
from WebServerAdaptor import WebServerAdaptor
class FastCGIAdaptor(WebServerAdaptor):
"""This subclass of WebServerAdaptor is for FastCGI.
To use this, you'll need to download thfcgi.py_ and install it into
Python's site-packages directory or somewhere else in your PYTHONPATH. I
can't distribute it with Aquarium because it's GPL and Aquarium's not (this
is a statement of fact, not a complaint).
Here is a minimal FastCGI entry point. Naturally, you'll almost assuredly
want to add code to update ``sys.path`` and ``packagePath`` *before*
importing anything from Aquarium::
#!/usr/bin/python
from thfcgi import THFCGI
from aquarium.wsadaptor.FastCGIAdaptor import handler
THFCGI(handler).run()
The following urlscheme modules can be used with this Web server adaptor:
QueryParameters_, PathInfo_.
The following private variables are used:
_req, _cgiEnv, _form
The request, CGI environment dict, and form given to use by thfcgi.
.. _thfcgi.py:
http://cvs.lysator.liu.se/viewcvs/viewcvs.cgi/*checkout*/webkom/thfcgi.py?root=webkom&content-type=text%2Fplain
.. _QueryParameters:
aquarium.urlscheme.QueryParameters.QueryParameters-class.html
.. _PathInfo:
aquarium.urlscheme.PathInfo.PathInfo-class.html
"""
def __init__(self, req, cgiEnv, form):
"""Accept all the arguments."""
self._req = req
self._cgiEnv = cgiEnv
self._form = form
def setResponseCode(self, code=HTTPResponses.OK,
__ignored_msg="Script output follows"):
"""Set the Web server response code and message.
Keword arguments:
code
The default means "OK".
__ignored_msg
mod_fastcgi does not have a place for this.
mod_fastcgi sets the response code by using a fake "Status" header.
"""
self.write("Status: %s\r\n" % code)
def write(self, s):
"""Output a string."""
self._req.out.write(s)
def getCgiEnv(self):
"""Return CGI-like environmental variables."""
return self._cgiEnv
def getForm(self):
"""Instantiate some ``cgi.FieldStorage`` and return the instance."""
return self._form
def handler(req, env, form):
"""Use this as your FastCGI handler.
If you need to use your own subclass of aquarium.util.Aquarium, do this::
from aquarium.wsadaptor import FastCGIAdaptor
FastCGIAdaptor.Aquarium = SpecialAquariumSubclass
from FastCGIAdaptor import handler
...as before...
"""
try:
try:
wsadaptor = FastCGIAdaptor(req, env, form)
Aquarium(wsadaptor)()
except:
traceback.print_exc()
finally:
req.finish()
|