[FIX] website: improve performance for attachment creation

website introduces two new stored function fields, which depend on the attachment data
The thing is, these two fields are pertinent for website attachments only
Therefore, we avoid to read the datas field when the attachment is not a website attachment(when not needed), as this is the most costly field to read
This commit is contained in:
Denis Ledoux 2014-11-25 14:36:56 +01:00
parent 20a8b0e66a
commit a3e578068e
1 changed files with 7 additions and 7 deletions

View File

@ -684,12 +684,12 @@ class ir_attachment(osv.osv):
result[attach.id] = self.pool['website'].image_url(cr, uid, attach, 'datas')
return result
def _datas_checksum(self, cr, uid, ids, name, arg, context=None):
return dict(
(attach['id'], self._compute_checksum(attach))
for attach in self.read(
cr, uid, ids, ['res_model', 'res_id', 'type', 'datas'],
context=context)
)
result = dict.fromkeys(ids, False)
attachments = self.read(cr, uid, ids, ['type'], context=context)
view_attachment_ids = [attachment['id'] for attachment in attachments if attachment['type'] == 'ir.ui.view']
for attach in self.read(cr, uid, view_attachment_ids, ['res_model', 'res_id', 'type', 'datas'], context=context):
result[attach['id']] = self._compute_checksum(attach)
return result
def _compute_checksum(self, attachment_dict):
if attachment_dict.get('res_model') == 'ir.ui.view'\
@ -705,7 +705,7 @@ class ir_attachment(osv.osv):
return result
for record in self.browse(cr, uid, ids, context=context):
if not record.datas: continue
if record.type != 'ir.ui.view' or not record.datas: continue
try:
result[record.id] = openerp.tools.image_resize_image_big(record.datas)
except IOError: # apparently the error PIL.Image.open raises