[IMP] oe web: use openerp/__init__ instead of tools.config to store the gevent flag...
[odoo/odoo.git] / openerpcommand / web.py
1 """
2 Run a normal OpenERP HTTP process.
3 """
4
5 import logging
6 import os
7 import threading
8
9 import common
10
11 _logger = logging.getLogger(__name__)
12
13 def run(args):
14     import openerp
15     import openerp.cli.server
16     import openerp.service.wsgi_server
17     import openerp.tools.config
18     config = openerp.tools.config
19
20     os.environ["TZ"] = "UTC"
21     common.set_addons(args)
22
23     openerp.multi_process = True
24     common.setproctitle('openerp-web')
25
26     openerp.cli.server.check_root_user()
27     openerp.netsvc.init_logger()
28     #openerp.cli.server.report_configuration()
29     openerp.cli.server.configure_babel_localedata_path()
30     openerp.cli.server.setup_signal_handlers()
31
32     target = openerp.service.wsgi_server.serve
33     if not args.gevent:
34         openerp.evented = False
35         # TODO openerp.multi_process with a multi-threaded process probably
36         # doesn't work very well (e.g. waiting for all threads to complete
37         # before killing the process is not implemented).
38         arg = (args.interface, int(args.port), args.threaded)
39         threading.Thread(target=target, args=arg).start()
40         openerp.cli.server.quit_on_signals()
41     else:
42         openerp.evented = True
43         import gevent.monkey
44         import gevent.wsgi
45         import gevent_psycopg2
46         gevent.monkey.patch_all()
47         gevent_psycopg2.monkey_patch()
48
49         app = openerp.service.wsgi_server.application
50         server = gevent.wsgi.WSGIServer((args.interface, int(args.port)), app)
51         server.serve_forever()
52         # TODO quit_on_signals
53
54 def add_parser(subparsers):
55     parser = subparsers.add_parser('web',
56         description='Run a normal OpenERP HTTP process. By default a '
57         'singly-threaded Werkzeug server is used.')
58     common.add_addons_argument(parser)
59     parser.add_argument('--interface', default='0.0.0.0',
60         help='HTTP interface to listen on (default is %(default)s)')
61     parser.add_argument('--port', metavar='INT', default=8069,
62         help='HTTP port to listen on (default is %(default)s)')
63     parser.add_argument('--threaded', action='store_true',
64         help='Use a multithreaded Werkzeug server (incompatible with --gevent)')
65     parser.add_argument('--gevent', action='store_true',
66         help="Use gevent's WSGI server (incompatible with --threaded)")
67
68     parser.set_defaults(run=run)