FastCGIAdaptor.py :  » Web-Frameworks » Aquarium » aquarium-2.3 » aquarium » wsadaptor » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Web Frameworks » Aquarium 
Aquarium » aquarium 2.3 » aquarium » wsadaptor » FastCGIAdaptor.py
"""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()
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.