summaryrefslogtreecommitdiff
path: root/odoo/cli/server.py
diff options
context:
space:
mode:
authorRaphael Collet <rco@openerp.com>2016-09-02 15:58:39 +0200
committerRaphael Collet <rco@openerp.com>2016-09-02 17:28:12 +0200
commit9e64f9f9514194d74e166b032add8511182f2677 (patch)
tree5086710c04c6b923be18a6d1d97b3f0f3a2a9c4a /odoo/cli/server.py
parent11812b0b9e82b2b1b9041d8250ce01e7b4a5f7ee (diff)
[REF] openerp: move `openerp` to `odoo`
Diffstat (limited to 'odoo/cli/server.py')
-rw-r--r--odoo/cli/server.py162
1 files changed, 162 insertions, 0 deletions
diff --git a/odoo/cli/server.py b/odoo/cli/server.py
new file mode 100644
index 00000000000..314072b69a8
--- /dev/null
+++ b/odoo/cli/server.py
@@ -0,0 +1,162 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+"""
+OpenERP - Server
+OpenERP is an ERP+CRM program for small and medium businesses.
+
+The whole source code is distributed under the terms of the
+GNU Public Licence.
+
+(c) 2003-TODAY, Fabien Pinckaers - OpenERP SA
+"""
+
+import atexit
+import csv
+import logging
+import os
+import signal
+import sys
+import threading
+import traceback
+import time
+
+import openerp
+
+from . import Command
+
+__author__ = openerp.release.author
+__version__ = openerp.release.version
+
+# Also use the `openerp` logger for the main script.
+_logger = logging.getLogger('openerp')
+
+def check_root_user():
+ """Warn if the process's user is 'root' (on POSIX system)."""
+ if os.name == 'posix':
+ import pwd
+ if pwd.getpwuid(os.getuid())[0] == 'root':
+ sys.stderr.write("Running as user 'root' is a security risk.\n")
+
+def check_postgres_user():
+ """ Exit if the configured database user is 'postgres'.
+
+ This function assumes the configuration has been initialized.
+ """
+ config = openerp.tools.config
+ if config['db_user'] == 'postgres':
+ sys.stderr.write("Using the database user 'postgres' is a security risk, aborting.")
+ sys.exit(1)
+
+def report_configuration():
+ """ Log the server version and some configuration values.
+
+ This function assumes the configuration has been initialized.
+ """
+ config = openerp.tools.config
+ _logger.info("OpenERP version %s", __version__)
+ _logger.info('addons paths: %s', openerp.modules.module.ad_paths)
+ host = config['db_host'] or os.environ.get('PGHOST', 'default')
+ port = config['db_port'] or os.environ.get('PGPORT', 'default')
+ user = config['db_user'] or os.environ.get('PGUSER', 'default')
+ _logger.info('database: %s@%s:%s', user, host, port)
+
+def rm_pid_file(main_pid):
+ config = openerp.tools.config
+ if config['pidfile'] and main_pid == os.getpid():
+ try:
+ os.unlink(config['pidfile'])
+ except OSError:
+ pass
+
+def setup_pid_file():
+ """ Create a file with the process id written in it.
+
+ This function assumes the configuration has been initialized.
+ """
+ config = openerp.tools.config
+ if not openerp.evented and config['pidfile']:
+ pid = os.getpid()
+ with open(config['pidfile'], 'w') as fd:
+ fd.write(str(pid))
+ atexit.register(rm_pid_file, pid)
+
+def export_translation():
+ config = openerp.tools.config
+ dbname = config['db_name']
+
+ if config["language"]:
+ msg = "language %s" % (config["language"],)
+ else:
+ msg = "new language"
+ _logger.info('writing translation file for %s to %s', msg,
+ config["translate_out"])
+
+ fileformat = os.path.splitext(config["translate_out"])[-1][1:].lower()
+
+ with open(config["translate_out"], "w") as buf:
+ registry = openerp.modules.registry.Registry.new(dbname)
+ with openerp.api.Environment.manage():
+ with registry.cursor() as cr:
+ openerp.tools.trans_export(config["language"],
+ config["translate_modules"] or ["all"], buf, fileformat, cr)
+
+ _logger.info('translation file written successfully')
+
+def import_translation():
+ config = openerp.tools.config
+ context = {'overwrite': config["overwrite_existing_translations"]}
+ dbname = config['db_name']
+
+ registry = openerp.modules.registry.Registry.new(dbname)
+ with openerp.api.Environment.manage():
+ with registry.cursor() as cr:
+ openerp.tools.trans_load(
+ cr, config["translate_in"], config["language"], context=context,
+ )
+
+def main(args):
+ check_root_user()
+ openerp.tools.config.parse_config(args)
+ check_postgres_user()
+ report_configuration()
+
+ config = openerp.tools.config
+
+ # the default limit for CSV fields in the module is 128KiB, which is not
+ # quite sufficient to import images to store in attachment. 500MiB is a
+ # bit overkill, but better safe than sorry I guess
+ csv.field_size_limit(500 * 1024 * 1024)
+
+ preload = []
+ if config['db_name']:
+ preload = config['db_name'].split(',')
+ for db_name in preload:
+ try:
+ openerp.service.db._create_empty_database(db_name)
+ except openerp.service.db.DatabaseExists:
+ pass
+
+ if config["translate_out"]:
+ export_translation()
+ sys.exit(0)
+
+ if config["translate_in"]:
+ import_translation()
+ sys.exit(0)
+
+ # This needs to be done now to ensure the use of the multiprocessing
+ # signaling mecanism for registries loaded with -d
+ if config['workers']:
+ openerp.multi_process = True
+
+ stop = config["stop_after_init"]
+
+ setup_pid_file()
+ rc = openerp.service.server.start(preload=preload, stop=stop)
+ sys.exit(rc)
+
+class Server(Command):
+ """Start the odoo server (default command)"""
+ def run(self, args):
+ main(args)