view wsgintegrate/main.py @ 19:4d9a2a2fb8c0

print out the localhost url and other minor fixes
author Jeff Hammel <jhammel@mozilla.com>
date Sat, 09 Mar 2013 23:03:48 -0800
parents 30e69abaadbb
children caf763fc1c7d
line wrap: on
line source

#!/usr/bin/env python

"""
command line entry point for wsgintegrate
serves an application from a .ini file
(really, a DAG)

uses wsgiref, though could in theory make use of
other WSGI servers, if available (TODO)
"""

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 = WSGIfactory(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
    print 'http://localhost:%d/' % options.port
    wsgiref(app=factory.load(), port=options.port)

if __name__ == '__main__':
  main()