Vo Minh Thu (OpenERP) has proposed merging lp:~openerp-dev/openobject-server/trunk-yawn-thu into lp:openobject-server.
Requested reviews: OpenERP Core Team (openerp) For more details, see: https://code.launchpad.net/~openerp-dev/openobject-server/trunk-yawn-thu/+merge/143854 -- https://code.launchpad.net/~openerp-dev/openobject-server/trunk-yawn-thu/+merge/143854 Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-server/trunk-yawn-thu.
=== modified file 'openerp/addons/base/ir/ir_cron.py' --- openerp/addons/base/ir/ir_cron.py 2012-12-22 01:13:55 +0000 +++ openerp/addons/base/ir/ir_cron.py 2013-01-18 11:02:23 +0000 @@ -135,6 +135,10 @@ _logger.debug('%.3fs (%s, %s)' % (end_time - start_time, model_name, method_name)) except Exception, e: self._handle_callback_exception(cr, uid, model_name, method_name, args, job_id, e) + else: + msg = "Method `%s.%s` do not exist." % (model._name, method_name) \ + if model else "Model `%s` do not exist." % model._name + _logger.warning(msg) def _process_job(self, job_cr, job, cron_cr): """ Run a given job taking care of the repetition. === modified file 'openerp/service/wsgi_server.py' --- openerp/service/wsgi_server.py 2012-12-10 13:24:06 +0000 +++ openerp/service/wsgi_server.py 2013-01-18 11:02:23 +0000 @@ -410,30 +410,27 @@ # The WSGI server, started by start_server(), stopped by stop_server(). httpd = None -def serve(): +def serve(interface, port, threaded): """ Serve HTTP requests via werkzeug development server. - If werkzeug can not be imported, we fall back to wsgiref's simple_server. - Calling this function is blocking, you might want to call it in its own thread. """ global httpd - + httpd = werkzeug.serving.make_server(interface, port, application, threaded=threaded) + httpd.serve_forever() + +def start_service(): + """ Call serve() in its own thread. + + The WSGI server can be shutdown with stop_server() below. + """ # TODO Change the xmlrpc_* options to http_* interface = config['xmlrpc_interface'] or '0.0.0.0' port = config['xmlrpc_port'] - httpd = werkzeug.serving.make_server(interface, port, application, threaded=True) _logger.info('HTTP service (werkzeug) running on %s:%s', interface, port) - httpd.serve_forever() - -def start_service(): - """ Call serve() in its own thread. - - The WSGI server can be shutdown with stop_server() below. - """ - threading.Thread(target=serve).start() + threading.Thread(target=serve, args=(interface, port, True)).start() def stop_service(): """ Initiate the shutdown of the WSGI server. === modified file 'openerpcommand/__init__.py' --- openerpcommand/__init__.py 2013-01-11 13:46:57 +0000 +++ openerpcommand/__init__.py 2013-01-18 11:02:23 +0000 @@ -8,6 +8,7 @@ from . import common from . import conf # Not really server-side (in the `for` below). +from . import cron from . import drop from . import initialize from . import model @@ -17,9 +18,10 @@ from . import scaffold from . import uninstall from . import update +from . import web -command_list_server = (conf, drop, initialize, model, module, read, run_tests, - scaffold, uninstall, update, ) +command_list_server = (conf, cron, drop, initialize, model, module, read, run_tests, + scaffold, uninstall, update, web, ) command_list_client = (Call, Open, Show, ConsumeNothing, ConsumeMemory, LeakMemory, ConsumeCPU, Bench, BenchRead, === modified file 'openerpcommand/common.py' --- openerpcommand/common.py 2013-01-11 13:46:57 +0000 +++ openerpcommand/common.py 2013-01-18 11:02:23 +0000 @@ -3,6 +3,10 @@ """ import argparse import os +try: + from setproctitle import setproctitle +except ImportError: + setproctitle = lambda x: None import sys def add_addons_argument(parser): === added file 'openerpcommand/cron.py' --- openerpcommand/cron.py 1970-01-01 00:00:00 +0000 +++ openerpcommand/cron.py 2013-01-18 11:02:23 +0000 @@ -0,0 +1,59 @@ +""" +Run an OpenERP cron process. +""" + +import os + +import common + +def set_addons(args): + import openerp.tools.config + config = openerp.tools.config + + assert hasattr(args, 'addons') + if args.addons: + args.addons = args.addons.split(':') + else: + args.addons = [] + + config['addons_path'] = ','.join(args.addons) + +def run(args): + import openerp + import openerp.cli.server + import openerp.tools.config + import openerp.service.cron + config = openerp.tools.config + + os.environ["TZ"] = "UTC" + set_addons(args) + args.database = args.database or [] + + config['log_handler'] = [':WARNING', 'openerp.addons.base.ir.ir_cron:DEBUG'] + + openerp.multi_process = True + common.setproctitle('openerp-cron [%s]' % ', '.join(args.database)) + + openerp.cli.server.check_root_user() + openerp.netsvc.init_logger() + #openerp.cli.server.report_configuration() + openerp.cli.server.configure_babel_localedata_path() + openerp.cli.server.setup_signal_handlers() + import openerp.addons.base + if args.database: + for db in args.database: + openerp.cli.server.preload_registry(db) + openerp.service.cron.start_service() + openerp.cli.server.quit_on_signals() + else: + print "No database given." + + +def add_parser(subparsers): + parser = subparsers.add_parser('cron', + description='Run an OpenERP cron process.') + common.add_addons_argument(parser) + parser.add_argument('--database', action='append', + help='Database for which cron jobs are processed (can be given repeated)') + + parser.set_defaults(run=run) === added file 'openerpcommand/web.py' --- openerpcommand/web.py 1970-01-01 00:00:00 +0000 +++ openerpcommand/web.py 2013-01-18 11:02:23 +0000 @@ -0,0 +1,66 @@ +""" +Run a normal OpenERP HTTP process. +""" + +import logging +import os +import threading + +import openerp.cli.server +import openerp.service.wsgi_server +import openerp.tools.config + +import common + +_logger = logging.getLogger(__name__) + +def run(args): + os.environ["TZ"] = "UTC" + + if args.addons: + args.addons = args.addons.split(':') + else: + args.addons = [] + + config = openerp.tools.config + config['addons_path'] = ','.join(args.addons) + + openerp.cli.server.check_root_user() + openerp.netsvc.init_logger() + #openerp.cli.server.report_configuration() + openerp.cli.server.configure_babel_localedata_path() + openerp.cli.server.setup_signal_handlers() + + target = openerp.service.wsgi_server.serve + if not args.gevent: + arg = (args.interface, int(args.port), args.threaded) + threading.Thread(target=target, args=arg).start() + openerp.cli.server.quit_on_signals() + else: + config.options["gevent"] = True + import gevent.monkey + import gevent.wsgi + import gevent_psycopg2 + gevent.monkey.patch_all() + gevent_psycopg2.monkey_patch() + + app = openerp.service.wsgi_server.application + server = gevent.wsgi.WSGIServer((args.interface, int(args.port)), app) + server.serve_forever() + # TODO quit_on_signals + +def add_parser(subparsers): + parser = subparsers.add_parser('web', + description='Run a normal OpenERP HTTP process. By default a ' + 'singly-threaded Werkzeug server is used.') + common.add_addons_argument(parser) + parser.add_argument('--interface', default='0.0.0.0', + help='HTTP interface to listen on (default is %(default)s)') + parser.add_argument('--port', metavar='INT', default=8069, + help='HTTP port to listen on (default is %(default)s)') + parser.add_argument('--threaded', action='store_true', + help='Use a multithreaded Werkzeug server (incompatible with --gevent)') + parser.add_argument('--gevent', action='store_true', + help="Use gevent's WSGI server (incompatible with --threaded)") + + parser.set_defaults(run=run)
_______________________________________________ Mailing list: https://launchpad.net/~openerp-dev-gtk Post to : openerp-dev-gtk@lists.launchpad.net Unsubscribe : https://launchpad.net/~openerp-dev-gtk More help : https://help.launchpad.net/ListHelp