From 35050c4ba0de4fc3d2a3db8bd4b534ced3069038 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 23 Jan 2014 16:12:07 +0100 Subject: [PATCH] IMP] Launch a 404 when ModelConverter's browse records can't resolve _rec_name. Also serves as automatic preload bzr revid: fme@openerp.com-20140123151207-3wp77801g44b2822 --- openerp/addons/base/ir/ir_http.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/openerp/addons/base/ir/ir_http.py b/openerp/addons/base/ir/ir_http.py index 7d0c4be8bc1..a4eaf216381 100644 --- a/openerp/addons/base/ir/ir_http.py +++ b/openerp/addons/base/ir/ir_http.py @@ -15,9 +15,7 @@ from openerp.osv import osv, orm _logger = logging.getLogger(__name__) - -# FIXME: replace by proxy on request.uid? -_uid = object() +UID_PLACEHOLDER = object() class ModelConverter(werkzeug.routing.BaseConverter): @@ -29,7 +27,7 @@ class ModelConverter(werkzeug.routing.BaseConverter): def to_python(self, value): m = re.match(self.regex, value) return request.registry[self.model].browse( - request.cr, _uid, int(m.group(1)), context=request.context) + request.cr, UID_PLACEHOLDER, int(m.group(1)), context=request.context) def to_url(self, value): return value.id @@ -46,7 +44,7 @@ class ModelsConverter(werkzeug.routing.BaseConverter): # TODO: # - raise routing.ValidationError() if no browse record can be createdm # - support slug - return request.registry[self.model].browse(request.cr, _uid, [int(i) for i in value.split(',')], context=request.context) + return request.registry[self.model].browse(request.cr, UID_PLACEHOLDER, [int(i) for i in value.split(',')], context=request.context) def to_url(self, value): return ",".join(i.id for i in value) @@ -108,8 +106,12 @@ class ir_http(osv.AbstractModel): # post process arg to set uid on browse records for arg in arguments.itervalues(): - if isinstance(arg, orm.browse_record) and arg._uid is _uid: + if isinstance(arg, orm.browse_record) and arg._uid is UID_PLACEHOLDER: arg._uid = request.uid + try: + arg[arg._rec_name] + except KeyError: + return self._handle_exception(werkzeug.exceptions.NotFound()) # set and execute handler try: