Add more user-friendly error handling for common errors, so they don't
[invirt/packages/invirt-web.git] / code / invirt.fcgi
1 #!/usr/bin/python
2 """Main FastCGI entry point for web interface"""
3
4 import cherrypy
5 import os
6 import sys
7
8 import main
9
10 dev = False
11 base_dir = os.path.dirname(__file__)
12
13 def usage():
14     argv0_dir = os.path.dirname(sys.argv[0])
15     print >>sys.stderr, """%s <unauth|auth> [config]
16
17 Or via the provided wrapper scripts:
18 %s/auth.fcgi [config]
19 %s/unauth.fcgi [config]
20
21 Run server as FastCGI, with CherryPy config from "main.conf".
22 With `config`, run standalone with CherryPy config from `config`.
23
24 Serve the authenticated site with 'auth' or under 'auth.fcgi',
25 and the unauthenticated site with 'unauth' or under 'unauth.fcgi'.
26 """ % (sys.argv[0], argv0_dir, argv0_dir)
27     sys.exit(2)
28
29 if __name__ == "__main__":
30     if '-h' in sys.argv or '--help' in sys.argv:
31         usage()
32     if not (2 <= len(sys.argv) <= 3):
33         usage()
34
35     mode = sys.argv[1]
36     if len(sys.argv) == 3:
37         conf_file = sys.argv[2]
38         dev = True
39     else:
40         conf_file = os.path.join(base_dir, 'main.conf')
41
42     app_config = {
43         '/': {
44             'tools.invirtwebstate.on': True,
45             },
46         }
47
48     if mode.startswith('auth'):
49         root = main.InvirtWeb()
50         app_config['/']['tools.mako.module_directory'] = "/tmp/invirt-auth-web-templatecache"
51     elif mode.startswith('unauth'):
52         root = main.InvirtUnauthWeb()
53         app_config['/']['tools.mako.module_directory'] = "/tmp/invirt-unauth-web-templatecache"
54     else:
55         usage()
56
57     app = cherrypy.tree.mount(root, '/', app_config)
58     app.merge(conf_file)
59     cherrypy.config.update(conf_file)
60
61     if dev:
62         cherrypy.server.quickstart()
63         cherrypy.engine.start()
64         cherrypy.engine.block()
65     else:
66         cherrypy.engine.start(blocking=False)
67         from flup.server.fcgi import WSGIServer
68         server = WSGIServer(cherrypy.tree)
69         server.run()