view wsgintegrate/main.py @ 3:05683af3240c

fix up main.py
author Jeff Hammel <jhammel@mozilla.com>
date Mon, 13 Jun 2011 17:55:34 -0700
parents ec815b7cb142
children 30e69abaadbb
line wrap: on
line source

#!/usr/bin/env python

"""
command line entry point for wsgintegrate
serves an application from a .ini file 
"""

import sys
from factory import WSGIfactory
from optparse import OptionParser
from server import wsgiref

def main(args=sys.argv[1:]):

    # parse command line options
    usage = '%prog [options] config-file'
    parser = OptionParser(usage=usage, description=__doc__)
    parser.add_option('-a', '--app', dest='app', default='',
                      help='which app to serve from the configuration')
    parser.add_option('-p', '--port', dest='port',
                      type='int', default=80,
                      help='which port to serve on, if server not specified in configuration')
    parser.add_option('--list-apps', dest='list_apps',
                      action='store_true', default=False,
                      help='list the WSGI apps available in the configuration')
    parser.add_option('--print-json', dest='print_json',
                      action='store_true', default=False,
                      help='print JSON format of the configuration')
    parser.add_option('--print-ini', dest='print_ini',
                      action='store_true', default=False,
                      help='print .ini format of the configuration')
    options, args = parser.parse_args(args)

    # check for single configuration file
    if len(args) != 1: # TODO: could munge multiple configs
        parser.print_usage()
        parser.exit()
    config = args[0]

    # create a factory from configuration
    # TODO: interpret if the configuration is .ini, JSON, etc
    factory = IniFactory(config, main=options.app)

    # print configuration, if specified
    if options.list_apps:
        for app in sorted(factory.config.keys()):
            print app
        return
    if options.print_json:
        print factory.json_config()
        return
    if options.print_ini:
        print factory.ini_config()
        return

    # serve it
    wsgiref(app=factory.load(), port=options.port)

if __name__ == '__main__':
  main()