From eea8d81a86b6513c16c4b634ae33c5544fa15984 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 3 Sep 2014 14:45:05 +0200 Subject: [PATCH] [IMP] use http.send_file() for /logo.png --- addons/web/controllers/main.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 2ab0095365f..908f56c11a0 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -32,6 +32,7 @@ except ImportError: import openerp import openerp.modules.registry from openerp.addons.base.ir.ir_qweb import AssetsBundle, QWebTemplateNotFound +from openerp.modules import get_module_resource from openerp.tools import topological_sort from openerp.tools.translate import _ from openerp import http @@ -1180,7 +1181,8 @@ class Binary(http.Controller): '/logo.png', ], type='http', auth="none") def company_logo(self, dbname=None, **kw): - # TODO add etag, refactor to use /image code for etag + imgname = 'logo.png' + placeholder = functools.partial(get_module_resource, 'web', 'static', 'src', 'img') uid = None if request.session.db: dbname = request.session.db @@ -1192,13 +1194,13 @@ class Binary(http.Controller): uid = openerp.SUPERUSER_ID if not dbname: - image_data = self.placeholder('logo.png') + response = http.send_file(placeholder(imgname)) else: try: # create an empty registry registry = openerp.modules.registry.Registry(dbname) with registry.cursor() as cr: - cr.execute("""SELECT c.logo_web + cr.execute("""SELECT c.logo_web, c.write_date FROM res_users u LEFT JOIN res_company c ON c.id = u.company_id @@ -1206,17 +1208,14 @@ class Binary(http.Controller): """, (uid,)) row = cr.fetchone() if row and row[0]: - image_data = str(row[0]).decode('base64') + image_data = StringIO(str(row[0]).decode('base64')) + response = http.send_file(image_data, filename=imgname, mtime=row[1]) else: - image_data = self.placeholder('nologo.png') + response = http.send_file(placeholder('nologo.png')) except Exception: - image_data = self.placeholder('logo.png') + response = http.send_file(placeholder(imgname)) - headers = [ - ('Content-Type', 'image/png'), - ('Content-Length', len(image_data)), - ] - return request.make_response(image_data, headers) + return response class Action(http.Controller):