[IMP] ir_http: don't handle exception in dev mode but use the werkzeug debugger excep...
authorJeremy Kersten <jke@odoo.com>
Mon, 8 Dec 2014 15:25:30 +0000 (16:25 +0100)
committerJeremy Kersten <jke@odoo.com>
Mon, 8 Dec 2014 15:25:30 +0000 (16:25 +0100)
addons/website/models/ir_http.py
openerp/addons/base/ir/ir_http.py
openerp/service/server.py

index 44f9dca..ac92036 100644 (file)
@@ -211,6 +211,8 @@ class ir_http(orm.AbstractModel):
                     # if parent excplicitely returns a plain response, then we don't touch it
                     return response
             except Exception, e:
+                if openerp.tools.config['dev_mode'] and (not isinstance(exception, ir_qweb.QWebException) or not exception.qweb.get('cause')):
+                    raise
                 exception = e
 
             values = dict(
index 64e6636..c70be2c 100644 (file)
@@ -96,6 +96,10 @@ class ir_http(osv.AbstractModel):
 
     def _handle_exception(self, exception):
         # If handle_exception returns something different than None, it will be used as a response
+
+        # Don't handle exception but use werkeug debugger if server in --dev mode
+        if openerp.tools.config['dev_mode']:
+            raise
         try:
             return request._handle_exception(exception)
         except openerp.exceptions.AccessDenied:
@@ -119,7 +123,6 @@ class ir_http(osv.AbstractModel):
         if processing:
             return processing
 
-
         # set and execute handler
         try:
             request.set_handler(func, arguments, auth_method)
index 9d10e29..12f0505 100644 (file)
@@ -19,6 +19,7 @@ import time
 import unittest2
 
 import werkzeug.serving
+from werkzeug.debug import DebuggedApplication
 
 if os.name == 'posix':
     # Unix only for workers
@@ -894,6 +895,7 @@ def start(preload=None, stop=False):
             watcher.start()
         else:
             _logger.warning("'watchdog' module not installed. Code autoreload feature is disabled")
+        server.app = DebuggedApplication(server.app, evalex=True)
 
     rc = server.run(preload, stop)