[Welcome] [TitleIndex] [WordIndex

qxserver

A script to serve a generic Quixote project as an http or scgi process.

""" qxserver.py
"""

from quixote2.publish import Publisher
from optparse import OptionParser

SCGI_PORT = 2974
HTTP_PORT = 8080

def main ():

    # the script supports three options and one required argument.
    parser = OptionParser(usage="usage: %prog [options] QuixoteDirectory")
    parser.set_description('Publishes the Quixote Directory object at the specified ip and port.')
    parser.add_option('--standalone', dest="standalone",
                      default=False, action='store_true',
                      help="Run as a stand alone http server (useful for development)")
    parser.add_option('--ip', dest="host", 
                      default='localhost', type="str",
                      help="IP address to listen on")
    parser.add_option('--port', dest="port", 
                      default=SCGI_PORT, type="int",
                      help="Port to listen on")

    (options, args) = parser.parse_args()
   
    # process the first argument to get the module
    # name and the class name. then get the class object
    # by importing the module and calling getattr on it.
    dirname = args[0]
    i = dirname.rfind('.')
    modname = dirname[:i]
    clsname = dirname[i+1:]
    m = __import__(modname, globals(), locals(), [clsname])
    RootDirectory = getattr(m, clsname)
    
    # this should probably be replaced with a lambda function
    def create_publisher():
        return Publisher(RootDirectory(), display_exceptions='plain')

    if options.standalone:
        # serve as an http process via simple_server
        from quixote2.server.simple_server import run
        run(create_publisher, host=options.host, port=options.port)
    else:
        # serve as an scgi process via scgi_server
        from quixote2.server.scgi_server import run
        run(create_publisher, host=options.host, port=options.port, script_name='')

if __name__ == '__main__':
    main()

Usage

For these examples, assume that the mysite module exists and defines a class called MyDirectory which inherits from quixote.Directory.

mysite.py

from quixote2 import Directory

class MyDirectory (Directory):
   _q_exports = ['']

   def _q_index (self):
      return "Hello World"

Originally posted on: http://bitshaq.com/2010/07/20/a-simple-quixote-server/


2010-09-22 22:14