[FIX] convert endpoint responses only if it's the current request endpoint
authorFabien Meghazi <fme@openerp.com>
Wed, 19 Feb 2014 13:51:28 +0000 (14:51 +0100)
committerFabien Meghazi <fme@openerp.com>
Wed, 19 Feb 2014 13:51:28 +0000 (14:51 +0100)
bzr revid: fme@openerp.com-20140219135128-6rdnymufpfo1xyvf

openerp/http.py

index ed66e13..ebca5ef 100644 (file)
@@ -129,6 +129,7 @@ class WebRequest(object):
         self.session_id = httprequest.session.sid
         self.disable_db = False
         self.uid = None
+        self.endpoint = None
         self.func = None
         self.func_arguments = {}
         self.auth_method = None
@@ -199,6 +200,8 @@ class WebRequest(object):
         arguments = dict((k, v) for k, v in arguments.iteritems()
                          if not k.startswith("_ignored_"))
 
+        self.endpoint = func
+        # TODO: get rid of func_*
         self.func = func
         self.func_request_type = func.routing['type']
         self.func_arguments = arguments
@@ -271,20 +274,22 @@ def route(route=None, **kw):
         @functools.wraps(f)
         def response_wrap(*args, **kw):
             response = f(*args, **kw)
-            if isinstance(response, Response) or request.func_request_type == 'json':
-                return response
-            elif isinstance(response, LazyResponse):
-                raise "TODO: remove LazyResponses ???"
-            elif isinstance(response, werkzeug.wrappers.BaseResponse):
-                response = Response.force_type(response)
-                response.set_default()
-                return response
-            elif isinstance(response, basestring):
-                return Response(response)
-            else:
-                raise "TODO: shall we autorise this ?"
-                return response
+            if request.endpoint.original == f:
+                if isinstance(response, Response) or request.func_request_type == 'json':
+                    return response
+                elif isinstance(response, LazyResponse):
+                    raise "TODO: remove LazyResponses ???"
+                elif isinstance(response, werkzeug.wrappers.BaseResponse):
+                    response = Response.force_type(response)
+                    response.set_default()
+                    return response
+                elif isinstance(response, basestring):
+                    return Response(response)
+                else:
+                    raise "TODO: shall we autorise this ?"
+            return response
         response_wrap.routing = routing
+        response_wrap.original_func = f
         return response_wrap
     return decorator
 
@@ -561,6 +566,7 @@ class Controller(object):
 class EndPoint(object):
     def __init__(self, method, routing):
         self.method = method
+        self.original = getattr(method, 'original_func', method)
         self.routing = routing
     def __call__(self, *args, **kw):
         return self.method(*args, **kw)