[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:
parent
ccba67ed53
commit
0d83089398
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue