[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")
def image(self, model, id, field, **kw):
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')]
etag = request.httprequest.headers.get('If-None-Match')
hashed_session = hashlib.md5(request.session_id).hexdigest()
@ -1032,15 +1033,15 @@ class Binary(http.Controller):
if not id and hashed_session == etag:
return werkzeug.wrappers.Response(status=304)
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:
return werkzeug.wrappers.Response(status=304)
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
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()
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
: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]
if filename_field:
fields.append(filename_field)
if id:
res = Model.read([int(id)], fields, request.context)[0]
res = Model.read(cr, uid, [int(id)], fields, context)[0]
else:
res = Model.default_get(fields, request.context)
res = Model.default_get(cr, uid, fields, context)
filecontent = base64.b64decode(res.get(field, ''))
if not filecontent:
return request.not_found()