[IMP] move image serialization to image widget, not all binary fields
bzr revid: xmo@openerp.com-20131007113133-y0xcj0tgp8ionrzo
This commit is contained in:
@@ -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 ('<img src="data:%s;base64,%s">' % (Image.MIME[image.format], value))
|
||||
return '<img src="data:%s;base64,%s">' % (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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
@@ -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, '<img src="data:image/jpeg;base64,%s">' % (
|
||||
content.encode('base64')
|
||||
))
|
||||
value = converter.value_to_html(
|
||||
self.cr, self.uid, content.encode('base64'), column)
|
||||
self.assertEqual(
|
||||
value, '<img src="data:image/jpeg;base64,%s">' % (
|
||||
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, {
|
||||
|
||||
Reference in New Issue
Block a user