[FIX] /web/binary/{image,saveas}: use request.registry instead of deprecated `request.session.model`

This makes the controllers work also for
public users, e.g. in the frontend.
This commit is contained in:
Olivier Dony 2014-11-10 15:05:19 +01:00
parent ccba67ed53
commit 0d83089398
1 changed files with 9 additions and 7 deletions

View File

@ -1019,7 +1019,8 @@ class Binary(http.Controller):
@http.route('/web/binary/image', type='http', auth="public") @http.route('/web/binary/image', type='http', auth="public")
def image(self, model, id, field, **kw): def image(self, model, id, field, **kw):
last_update = '__last_update' last_update = '__last_update'
Model = request.session.model(model) Model = request.registry[model]
cr, uid, context = request.cr, request.uid, request.context
headers = [('Content-Type', 'image/png')] headers = [('Content-Type', 'image/png')]
etag = request.httprequest.headers.get('If-None-Match') etag = request.httprequest.headers.get('If-None-Match')
hashed_session = hashlib.md5(request.session_id).hexdigest() hashed_session = hashlib.md5(request.session_id).hexdigest()
@ -1032,15 +1033,15 @@ class Binary(http.Controller):
if not id and hashed_session == etag: if not id and hashed_session == etag:
return werkzeug.wrappers.Response(status=304) return werkzeug.wrappers.Response(status=304)
else: else:
date = Model.read([id], [last_update], request.context)[0].get(last_update) date = Model.read(cr, uid, [id], [last_update], context)[0].get(last_update)
if hashlib.md5(date).hexdigest() == etag: if hashlib.md5(date).hexdigest() == etag:
return werkzeug.wrappers.Response(status=304) return werkzeug.wrappers.Response(status=304)
if not id: if not id:
res = Model.default_get([field], request.context).get(field) res = Model.default_get(cr, uid, [field], context).get(field)
image_base64 = res image_base64 = res
else: else:
res = Model.read([id], [last_update, field], request.context)[0] res = Model.read(cr, uid, [id], [last_update, field], context)[0]
retag = hashlib.md5(res.get(last_update)).hexdigest() retag = hashlib.md5(res.get(last_update)).hexdigest()
image_base64 = res.get(field) image_base64 = res.get(field)
@ -1086,14 +1087,15 @@ class Binary(http.Controller):
:param str filename_field: field holding the file's name, if any :param str filename_field: field holding the file's name, if any
:returns: :class:`werkzeug.wrappers.Response` :returns: :class:`werkzeug.wrappers.Response`
""" """
Model = request.session.model(model) Model = request.registry[model]
cr, uid, context = request.cr, request.uid, request.context
fields = [field] fields = [field]
if filename_field: if filename_field:
fields.append(filename_field) fields.append(filename_field)
if id: if id:
res = Model.read([int(id)], fields, request.context)[0] res = Model.read(cr, uid, [int(id)], fields, context)[0]
else: else:
res = Model.default_get(fields, request.context) res = Model.default_get(cr, uid, fields, context)
filecontent = base64.b64decode(res.get(field, '')) filecontent = base64.b64decode(res.get(field, ''))
if not filecontent: if not filecontent:
return request.not_found() return request.not_found()