summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Kersten <jke@odoo.com>2020-03-26 18:06:57 +0000
committerRomain Derie <rde@odoo.com>2020-03-26 18:12:47 +0000
commit1606d22d40cd431a02e73bb0661a192bb12edf85 (patch)
tree7a59fed29a3248d886655d948cd3e28486c12ff5
parent6d6b505598413b0d766a8394c7131351ade64266 (diff)
[FIX] base: perf - binary_record, don't rebrowse ir.attachment
If model is already an ir.attachment we don't need to do a new search_read. We can use it record directly. After this commit, we don't do extra request if we already have the info, else we don't change the behavior. task-2211013
-rw-r--r--addons/website/tests/test_performance.py2
-rw-r--r--odoo/addons/base/models/ir_http.py15
2 files changed, 11 insertions, 6 deletions
diff --git a/addons/website/tests/test_performance.py b/addons/website/tests/test_performance.py
index b7683e96068..0cbc7ce214d 100644
--- a/addons/website/tests/test_performance.py
+++ b/addons/website/tests/test_performance.py
@@ -119,4 +119,4 @@ class TestWebsitePerformance(UtilPerf):
# assets route /web/content/..
self.url_open('/') # create assets attachments
assets_url = self.env['ir.attachment'].search([('url', '=like', '/web/content/%/web.assets_common%.js')], limit=1).url
- self.assertEqual(self._get_url_hot_query(assets_url), 3)
+ self.assertEqual(self._get_url_hot_query(assets_url), 2)
diff --git a/odoo/addons/base/models/ir_http.py b/odoo/addons/base/models/ir_http.py
index ece858f5a0f..ba771a95753 100644
--- a/odoo/addons/base/models/ir_http.py
+++ b/odoo/addons/base/models/ir_http.py
@@ -370,11 +370,16 @@ class IrHttp(models.AbstractModel):
field_def = record._fields[field]
if field_def.type == 'binary' and field_def.attachment:
- field_attachment = self.env['ir.attachment'].sudo().search_read(domain=[('res_model', '=', model), ('res_id', '=', record.id), ('res_field', '=', field)], fields=['datas', 'mimetype', 'checksum'], limit=1)
- if field_attachment:
- mimetype = field_attachment[0]['mimetype']
- content = field_attachment[0]['datas']
- filehash = field_attachment[0]['checksum']
+ if model != 'ir.attachment':
+ field_attachment = self.env['ir.attachment'].sudo().search_read(domain=[('res_model', '=', model), ('res_id', '=', record.id), ('res_field', '=', field)], fields=['datas', 'mimetype', 'checksum'], limit=1)
+ if field_attachment:
+ mimetype = field_attachment[0]['mimetype']
+ content = field_attachment[0]['datas']
+ filehash = field_attachment[0]['checksum']
+ else:
+ mimetype = record['mimetype']
+ content = record['datas']
+ filehash = record['checksum']
if not content:
content = record[field] or ''