Source code for anybox.recipe.openerp.runtime.start_openerp

"""This module bridges the classical ``openerp-server`` as a console script.

The :func:`main` function gets registered on the fly by the server recipe as
a console script entry point and used in particular for ``start_openerp`` and

Some version independence logic for the startup process also get bootstrapped
from here.

import sys
import os
from . import patch_openerp_v5
from . import patch_odoo

[docs]def insert_args(arguments): """Insert `arguments` in ``sys.argv`` (direct impact on child script). """ for i, a in enumerate(arguments): sys.argv.insert(i+1, a)
[docs]def main(starter, conf, version=None, just_test=False, server_wide_modules=None, gevent_script_path=None): """Call the `starter` script, dispatching configuration. All arguments are set in the standalone script produced by buildout through entry point options. :param starter: path to the main script source file (currently ``openerp-server``) :param conf: path to the OpenERP configuration file (managed by the recipe) :param version: OpenERP major version :param server_wide_modules: additional server wide modules, to pass with the ``--load`` command-line option (ignored if the option is actually there on the command line) :type version: tuple of integers :param just_test: if True, only run unit tests """ arguments = ['-c', conf] if just_test: arguments.extend(('--log-level', 'test' if version >= (6, 0) else 'info', '--stop-after-init')) if version >= (7, 0): arguments.append('--test-enable') if server_wide_modules: for opt in sys.argv[1:]: if opt.startswith('--load'): break else: arguments.append('--load=' + ','.join(server_wide_modules)) if '--install-all' in sys.argv: sys.argv.remove('--install-all') from import config # Maybe we should preparse config in all cases and therefore avoid # adding the '-c' on the fly ? # Still, cautious about pre-6.1 versions config.parse_config(['-c', conf]) from openerp.modules import get_modules arguments.extend(('-i', ','.join(get_modules()))) insert_args(arguments) if version == (5, 0): patch_openerp_v5.do_patch() if version >= (7, 3): assert gevent_script_path is not None patch_odoo.do_patch(gevent_script_path) os.chdir(os.path.split(starter)[0]) glob = globals() glob['__name__'] = '__main__' glob['__file__'] = starter sys.argv[0] = starter try: execfile(starter, globals()) except SystemExit as exc: if version == (5, 0): # Without Agent.quit() the Timer threads may go on forever # and the script will never stop import netsvc netsvc.Agent.quit() return exc.code