view MoinMoin/web/frontend.py @ 5378:b95d34820bc8

flup_frontend: fix wrapper class init to work for scgi and ajp (details below) I removed __init__ from wrapper class completely, it gave params to the wrapped __init__ that were not supported by all wrapped classes (esp. "multiplexed" and "umask", for ajp and scgi). The whole point of the wrapper's __init__ likely was to supply a better default value for the debug param, but our code explicitely passes in debug, so this default value is never used. Our code would even work as expected if it was used (same behaviour for debug=False and debug="off"). Another consequence of the __init__ removal is that some flup servers might use specific default values for some params now, e.g. for bindAddress: * localhost:8009 for AJP * localhost:4000 for SCGI If you don't like these defaults, you can still explicitely give --interface (and --port if needed). Removed some wrong references to CGI/FCGI scripts from generic parameter help strings.
author Thomas Waldmann <tw AT waldmann-edv DOT de>
date Tue, 15 Dec 2009 03:42:25 +0100
parents 4d01cd04af70
children
line wrap: on
line source
# -*- coding: iso-8859-1 -*-
"""
    MoinMoin - Common code for frontends (CGI/FCGI/SCGI)

    @copyright: 2008 MoinMoin:FlorianKrupicka
    @license: GNU GPL, see COPYING for details.
"""
import optparse

from MoinMoin.web.serving import make_application

from MoinMoin import log
logging = log.getLogger(__name__)

class FrontEnd(object):
    def __init__(self):
        self.parser = optparse.OptionParser()
        self.add_options()

    def add_options(self):
        parser = self.parser
        parser.add_option("-d", "--debug", dest="debug",
                          help="Debug mode of server (off/web/external, default is to use MOIN_DEBUGGER env var)")
        parser.add_option("-c", "--config-dir", dest="config_dir", metavar="DIR",
                          help=("Path to the directory containing the wiki "
                                "configuration files. Default: current directory"))
        parser.add_option("--htdocs", dest="htdocs",
                          help=("Path to the directory containing Moin's "
                                "static files. Default: use builtin MoinMoin/web/static/htdocs"))
        parser.set_default('htdocs', True)

    def run(self, args=None):
        options, args = self.parser.parse_args(args)
        logging.debug('Options: %r', options)

        application = make_application(shared=options.htdocs)

        try:
            self.run_server(application, options)
        except SystemExit, err:
            # the flup CGIRequest uses sys.exit(0) to terminate
            if err.code: # log a non-zero exit status (0 means no error)
                logging.exception('A SystemExit(%d) exception occurred.' % err.code)
            raise # exit now with this exit status
        except:
            logging.exception('An exception occurred while running %s' % self.__class__.__name__)

class ServerFrontEnd(FrontEnd):
    def add_options(self):
        super(ServerFrontEnd, self).add_options()
        parser = self.parser
        parser.add_option("-p", "--port", dest="port", type="int",
                          help="Set the port to listen on.")
        parser.add_option("-i", "--interface", dest="interface",
                          help=("Set the interface/socket to listen on. If starts "
                                "with '/' or './' it is interpreted as a path "
                                "to a unix socket."))
        # Note: interface default MUST be None, do not set it to something else!
        # Otherwise CGI (and also when the FCGI process is spawned by the web server) won't work.

class FrontEndNotAvailable(Exception):
    """ Raised if a frontend is not available for one reason or another. """
    pass