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