annotate wsgintegrate/main.py @ 0:ec815b7cb142

initial commit of wsgintegrate
author Jeff Hammel <jhammel@mozilla.com>
date Tue, 07 Jun 2011 08:03:09 -0700
parents
children 05683af3240c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
1 #!/usr/bin/env python
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
2
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
3 """
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
4 command line entry point for wsgiblob
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
5 serves an application from a .ini file using the [server]
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
6 section specified or wsgiref otherwise
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
7 """
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
8
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
9 import sys
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
10 from pyloader.factory import IniFactory
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
11 from optparse import OptionParser
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
12 from server import wsgiref
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
13
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
14 def main(args=sys.argv[1:]):
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
15
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
16 # parse command line options
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
17 usage = '%prog [options] config-file'
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
18 parser = OptionParser(usage=usage, description=__doc__)
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
19 parser.add_option('-a', '--app', dest='app', default='',
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
20 help='which app to serve from the configuration')
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
21 parser.add_option('-p', '--port', dest='port',
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
22 type='int', default=80,
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
23 help='which port to serve on, if server not specified in configuration')
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
24 parser.add_option('--list-apps', dest='list_apps',
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
25 action='store_true', default=False,
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
26 help='list the WSGI apps available in the configuration')
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
27 parser.add_option('--print-json', dest='print_json',
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
28 action='store_true', default=False,
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
29 help='print JSON format of the configuration')
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
30 parser.add_option('--print-ini', dest='print_ini',
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
31 action='store_true', default=False,
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
32 help='print .ini format of the configuration')
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
33 options, args = parser.parse_args(args)
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
34
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
35 # check for single configuration file
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
36 if len(args) != 1: # TODO: could munge multiple configs
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
37 parser.print_usage()
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
38 parser.exit()
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
39 config = args[0]
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
40
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
41 # create a factory from configuration
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
42 # TODO: interpret if the configuration is .ini, JSON, etc
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
43 factory = IniFactory(config, main=options.app)
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
44
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
45 # print configuration, if specified
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
46 if options.list_apps:
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
47 for app in sorted(factory.config.keys()):
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
48 print app
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
49 return
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
50 if options.print_json:
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
51 print factory.json_config()
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
52 return
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
53 if options.print_ini:
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
54 print factory.ini_config()
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
55 return
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
56
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
57 wsgiref(app=factory.load(), port=options.port)
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
58
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
59 if __name__ == '__main__':
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
60 main()