summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabien Meghazi <fme@openerp.com>2012-06-18 17:47:10 +0200
committerFabien Meghazi <fme@openerp.com>2012-06-18 17:47:10 +0200
commit5436e4fea87bb1c4e9db11bc444f82e3d3753fbd (patch)
tree2b2d2c3d3d254f03e9f36b368c40b1997642ca58
parent623c6d20f2451200187ece582e74a6ac6584e02b (diff)
[ADD] Added support for ETag in Binary#image
[REM] Removed kanban hack using Date#getDate() in url bzr revid: fme@openerp.com-20120618154710-luw8bt50bjtdlj7t
-rw-r--r--addons/web/controllers/main.py23
-rw-r--r--addons/web_kanban/static/src/js/kanban.js4
2 files changed, 19 insertions, 8 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index 8203efc969e..2966b34ab19 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -1331,19 +1331,34 @@ class Binary(openerpweb.Controller):
@openerpweb.httprequest
def image(self, req, model, id, field, **kw):
+ last_update = '__last_update'
Model = req.session.model(model)
context = req.session.eval_context(req.context)
+ headers = [('Content-Type', 'image/png')]
+ etag = req.httprequest.headers.get('If-None-Match')
+ hashed_session = hashlib.md5(req.session_id).hexdigest()
+ if etag:
+ if not id and hashed_session == etag:
+ return werkzeug.wrappers.Response(status=304)
+ else:
+ date = Model.read([int(id)], [last_update], context)[0].get(last_update)
+ if hashlib.md5(date).hexdigest() == etag:
+ return werkzeug.wrappers.Response(status=304)
+ retag = hashed_session
try:
if not id:
res = Model.default_get([field], context).get(field)
+ image_data = base64.b64decode(res)
else:
- res = Model.read([int(id)], [field], context)[0].get(field)
- image_data = base64.b64decode(res)
+ res = Model.read([int(id)], [last_update, field], context)[0]
+ retag = hashlib.md5(res.get(last_update)).hexdigest()
+ image_data = base64.b64decode(res.get(field))
except (TypeError, xmlrpclib.Fault):
image_data = self.placeholder(req)
- return req.make_response(image_data, [
- ('Content-Type', 'image/png'), ('Content-Length', len(image_data))])
+ headers.append(('ETag', retag))
+ headers.append(('Content-Length', len(image_data)))
+ return req.make_response(image_data, headers)
def placeholder(self, req):
addons_path = openerpweb.addons_manifest['web']['addons_path']
return open(os.path.join(addons_path, 'web', 'static', 'src', 'img', 'placeholder.png'), 'rb').read()
diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js
index 7e3d8c10e6b..2b123468260 100644
--- a/addons/web_kanban/static/src/js/kanban.js
+++ b/addons/web_kanban/static/src/js/kanban.js
@@ -743,10 +743,6 @@ instance.web_kanban.KanbanRecord = instance.web.OldWidget.extend({
kanban_image: function(model, field, id) {
id = id || '';
var url = instance.connection.prefix + '/web/binary/image?session_id=' + this.session.session_id + '&model=' + model + '&field=' + field + '&id=' + id;
- if (this.record.__last_update && this.record.__last_update.raw_value) {
- var time = instance.web.str_to_datetime(this.record.__last_update.raw_value).getTime();
- url += '&t=' + time;
- }
return url;
},
kanban_text_ellipsis: function(s, size) {