#!/usr/bin/env python
+import json
+import logging
+import logging.config
import optparse
import os
import sys
-import json
import tempfile
-import logging
-import logging.config
import werkzeug.serving
import werkzeug.contrib.fixers
optparser = optparse.OptionParser()
optparser.add_option("-s", "--session-path", dest="session_storage",
default=os.path.join(tempfile.gettempdir(), "oe-sessions"),
- help="directory used for session storage", metavar="DIR")
+ help="Directory used for session storage", metavar="DIR")
optparser.add_option("--server-host", dest="server_host",
default='127.0.0.1', help="OpenERP server hostname", metavar="HOST")
optparser.add_option("--server-port", dest="server_port", default=8069,
help="OpenERP server port", type="int", metavar="NUMBER")
optparser.add_option("--db-filter", dest="dbfilter", default='.*',
- help="Filter listed database", metavar="REGEXP")
+ help="Filter listed databases", metavar="REGEXP")
optparser.add_option('--addons-path', dest='addons_path', default=[], action='append',
- help="Path do addons directory", metavar="PATH")
+ help="Path to addons directory", metavar="PATH")
optparser.add_option('--load', dest='server_wide_modules', default=['web'], action='append',
- help="Load a additional module before login (by default only 'web' is loaded)", metavar="MODULE")
+ help="Load an additional module before login (by default only 'web' is loaded)", metavar="MODULE")
server_options = optparse.OptionGroup(optparser, "Server configuration")
server_options.add_option("-p", "--port", dest="socket_port", default=8002,
help="Logging configuration file", metavar="FILE")
optparser.add_option_group(logging_opts)
+testing_opts = optparse.OptionGroup(optparser, "Testing")
+testing_opts.add_option('--test-mode', dest='test_mode',
+ action='store_true', default=False,
+ help="Starts test mode, which provides a few"
+ " (utterly unsafe) APIs for testing purposes and"
+ " sets up a special connector which always raises"
+ " errors on tentative server access. These errors"
+ " serialize RPC query information (service,"
+ " method, arguments list) in the fault_code"
+ " attribute of the error object returned to the"
+ " client. This lets javascript code assert the" \
+ " XMLRPC consequences of its queries.")
+optparser.add_option_group(testing_opts)
if __name__ == "__main__":
(options, args) = optparser.parse_args(sys.argv[1:])
if os.path.exists(path_addons):
options.addons_path.append(path_addons)
- def remove_end_slash(text):
- if text[-1] in '/\\':
- return text[:-1]
- return text
-
- def drop_false_path(path):
- if os.path.exists(path):
- return True
-
- options.addons_path = map(remove_end_slash, options.addons_path)
- options.addons_path = filter(drop_false_path, options.addons_path)
+ options.addons_path = [
+ path[:-1] if path[-1] in r'\/' else path
+ for path in options.addons_path
+ if os.path.exists(path)
+ ]
for path_addons in options.addons_path:
if path_addons not in sys.path:
options.backend = 'xmlrpc'
os.environ["TZ"] = "UTC"
+ if options.test_mode:
+ import web.test_support
+ import web.test_support.controllers
+ options.connector = web.test_support.TestConnector()
+ logging.getLogger('werkzeug').setLevel(logging.WARNING)
+
if sys.version_info >= (2, 7) and os.path.exists(options.log_config):
with open(options.log_config) as file:
dct = json.load(file)
logging.config.dictConfig(dct)
- logging.getLogger("").setLevel(getattr(logging, options.log_level.upper()))
+ logging.getLogger().setLevel(getattr(logging, options.log_level.upper()))
else:
logging.basicConfig(level=getattr(logging, options.log_level.upper()))
- app = web.common.http.Root(options)
+ app = web.common.http.Root(options, openerp_addons_namespace=False)
if options.proxy_mode:
app = werkzeug.contrib.fixers.ProxyFix(app)