From 7a8ea1eb7580eee31a0a1b09837813c32cd32404 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 7 Oct 2013 13:31:33 +0200 Subject: [PATCH] [IMP] move image serialization to image widget, not all binary fields bzr revid: xmo@openerp.com-20131007113133-y0xcj0tgp8ionrzo --- openerp/addons/base/ir/ir_qweb.py | 8 +++--- .../addons/base/security/ir.model.access.csv | 2 +- .../addons/test_converter/tests/test_html.py | 27 +++++++++++-------- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py index 8d9bd97adf6..39a7bb804b1 100644 --- a/openerp/addons/base/ir/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb.py @@ -482,20 +482,20 @@ class HTMLConverter(osv.AbstractModel): def value_to_html(self, cr, uid, value, column, options=None): return value -class BinaryConverter(osv.AbstractModel): - _name = 'ir.qweb.field.binary' +class ImageConverter(osv.AbstractModel): + _name = 'ir.qweb.field.image' _inherit = 'ir.qweb.field' def value_to_html(self, cr, uid, value, column, options=None): try: image = Image.open(cStringIO.StringIO(value.decode('base64'))) + image.verify() except IOError: raise ValueError("Non-image binary fields can not be converted to HTML") - try: image.verify() except: # no idea what "suitable exceptions" are raise ValueError("Invalid image content") - return ('' % (Image.MIME[image.format], value)) + return '' % (Image.MIME[image.format], value) def get_field_type(column, options): """ Gets a t-field's effective type from the field's column and its options diff --git a/openerp/addons/base/security/ir.model.access.csv b/openerp/addons/base/security/ir.model.access.csv index 8003579b2ae..dcb56f93f7c 100644 --- a/openerp/addons/base/security/ir.model.access.csv +++ b/openerp/addons/base/security/ir.model.access.csv @@ -117,4 +117,4 @@ access_ir_qweb_field_text,access_ir_qweb_field_text,model_ir_qweb_field_text,,0, access_ir_qweb_field_selection,access_ir_qweb_field_selection,model_ir_qweb_field_selection,,0,0,0,0 access_ir_qweb_field_many2one,access_ir_qweb_field_many2one,model_ir_qweb_field_many2one,,0,0,0,0 access_ir_qweb_field_html,access_ir_qweb_field_html,model_ir_qweb_field_html,,0,0,0,0 -access_ir_qweb_field_binary,access_ir_qweb_field_binary,model_ir_qweb_field_binary,,0,0,0,0 +access_ir_qweb_field_image,access_ir_qweb_field_image,model_ir_qweb_field_image,,0,0,0,0 diff --git a/openerp/tests/addons/test_converter/tests/test_html.py b/openerp/tests/addons/test_converter/tests/test_html.py index 7f2713b2761..342864df044 100644 --- a/openerp/tests/addons/test_converter/tests/test_html.py +++ b/openerp/tests/addons/test_converter/tests/test_html.py @@ -108,28 +108,33 @@ class TestHTMLExport(common.TransactionCase): value = converter(Sub.browse(self.cr, self.uid, id1)) self.assertEqual(value, "Fo<b>o</b>") - def test_binary(self): - converter = self.get_converter('binary') + def test_image(self): + column = self.get_column('binary') + converter = self.registry('ir.qweb.field.image') + with open(os.path.join(directory, 'test_vectors', 'image'), 'rb') as f: content = f.read() - value = converter(content.encode('base64')) - self.assertEqual( - value, '' % ( - content.encode('base64') - )) + value = converter.value_to_html( + self.cr, self.uid, content.encode('base64'), column) + self.assertEqual( + value, '' % ( + content.encode('base64') + )) with open(os.path.join(directory, 'test_vectors', 'pdf'), 'rb') as f: content = f.read() - with self.assertRaises(ValueError): - converter(content.encode('base64')) + with self.assertRaises(ValueError): + converter.value_to_html( + self.cr, self.uid, 'binary', content.encode('base64'), column) with open(os.path.join(directory, 'test_vectors', 'pptx'), 'rb') as f: content = f.read() - with self.assertRaises(ValueError): - converter(content.encode('base64')) + with self.assertRaises(ValueError): + converter.value_to_html( + self.cr, self.uid, 'binary', content.encode('base64'), column) def test_selection(self): [record] = self.Model.browse(self.cr, self.uid, [self.Model.create(self.cr, self.uid, {