10 import werkzeug.serving
11 import werkzeug.contrib.fixers
13 path_root = os.path.dirname(os.path.abspath(__file__))
14 path_addons = os.path.join(path_root, 'addons')
15 if path_addons not in sys.path:
16 sys.path.insert(0, path_addons)
18 optparser = optparse.OptionParser()
19 optparser.add_option("-s", "--session-path", dest="session_storage",
20 default=os.path.join(tempfile.gettempdir(), "oe-sessions"),
21 help="directory used for session storage", metavar="DIR")
22 optparser.add_option("--server-host", dest="server_host",
23 default='127.0.0.1', help="OpenERP server hostname", metavar="HOST")
24 optparser.add_option("--server-port", dest="server_port", default=8069,
25 help="OpenERP server port", type="int", metavar="NUMBER")
26 optparser.add_option("--db-filter", dest="dbfilter", default='.*',
27 help="Filter listed database", metavar="REGEXP")
28 optparser.add_option('--addons-path', dest='addons_path', default=[path_addons], action='append',
29 help="Path do addons directory", metavar="PATH")
30 optparser.add_option('--load', dest='server_wide_modules', default=['web'], action='append',
31 help="Load a additional module before login (by default only 'web' is loaded)", metavar="MODULE")
33 server_options = optparse.OptionGroup(optparser, "Server configuration")
34 server_options.add_option("-p", "--port", dest="socket_port", default=8002,
35 help="listening port", type="int", metavar="NUMBER")
36 server_options.add_option('--reloader', dest='reloader',
37 default=False, action='store_true',
38 help="Reload application when python files change")
39 server_options.add_option('--no-serve-static', dest='serve_static',
40 default=True, action='store_false',
41 help="Do not serve static files via this server")
42 server_options.add_option('--multi-threaded', dest='threaded',
43 default=False, action='store_true',
44 help="Spawn one thread per HTTP request")
45 server_options.add_option('--proxy-mode', dest='proxy_mode',
46 default=False, action='store_true',
47 help="Enable correct behavior when behind a reverse proxy")
48 optparser.add_option_group(server_options)
50 logging_opts = optparse.OptionGroup(optparser, "Logging")
51 logging_opts.add_option("--log-level", dest="log_level", type="choice",
52 default='debug', help="Global logging level", metavar="LOG_LEVEL",
53 choices=['debug', 'info', 'warning', 'error', 'critical'])
54 logging_opts.add_option("--log-config", dest="log_config", default=os.path.join(os.path.dirname(__file__), "logging.json"),
55 help="Logging configuration file", metavar="FILE")
56 optparser.add_option_group(logging_opts)
58 import web.common.http
60 if __name__ == "__main__":
61 (options, args) = optparser.parse_args(sys.argv[1:])
62 options.backend = 'xmlrpc'
64 os.environ["TZ"] = "UTC"
66 if sys.version_info >= (2, 7):
67 with open(options.log_config) as file:
69 logging.config.dictConfig(dct)
70 logging.getLogger("").setLevel(getattr(logging, options.log_level.upper()))
72 logging.basicConfig(level=getattr(logging, options.log_level.upper()))
74 app = web.common.http.Root(options)
76 if options.proxy_mode:
77 app = werkzeug.contrib.fixers.ProxyFix(app)
79 werkzeug.serving.run_simple(
80 '0.0.0.0', options.socket_port, app,
81 use_reloader=options.reloader, threaded=options.threaded)