[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.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)