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

Reply via email to