[FIX] convert endpoint responses only if it's the current request endpoint

bzr revid: fme@openerp.com-20140219135128-6rdnymufpfo1xyvf
This commit is contained in:
Fabien Meghazi 2014-02-19 14:51:28 +01:00
parent 3315938178
commit 226b154154
1 changed files with 19 additions and 13 deletions

View File

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