summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphael Collet <rco@odoo.com>2019-10-22 08:48:12 +0000
committerfw-bot <otis@odoo.com>2019-10-22 12:25:52 +0000
commit6973dfbaefb7ef2c2c8809bcca0b56565e868124 (patch)
tree4dcaab54a450b615b3637acb6b1d2d08ff09618a
parent202de0324ad3eaf7331c69a94eb4242892d4f4f5 (diff)
[FIX] fields: 'bin_size' must have no effect on arbitrary binary field values
This fixes a regression introduced by 291a0e99d137142bd24addd1054c1357ddd7125a. closes odoo/odoo#39178 X-original-commit: 852ee32e3419c210a3844b0f943af8dd2bbdae88 Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
-rw-r--r--odoo/addons/test_new_api/models.py7
-rw-r--r--odoo/addons/test_new_api/tests/test_new_fields.py12
-rw-r--r--odoo/fields.py3
3 files changed, 21 insertions, 1 deletions
diff --git a/odoo/addons/test_new_api/models.py b/odoo/addons/test_new_api/models.py
index 6d90119aba7..3f45466efa3 100644
--- a/odoo/addons/test_new_api/models.py
+++ b/odoo/addons/test_new_api/models.py
@@ -525,6 +525,13 @@ class ModelBinary(models.Model):
binary = fields.Binary()
binary_related_store = fields.Binary("Binary Related Store", related='binary', store=True, readonly=False)
binary_related_no_store = fields.Binary("Binary Related No Store", related='binary', store=False, readonly=False)
+ binary_computed = fields.Binary(compute='_compute_binary')
+
+ @api.depends('binary')
+ def _compute_binary(self):
+ # arbitrary value: 'bin_size' must have no effect
+ for record in self:
+ record.binary_computed = [(record.id, bool(record.binary))]
class ModelImage(models.Model):
diff --git a/odoo/addons/test_new_api/tests/test_new_fields.py b/odoo/addons/test_new_api/tests/test_new_fields.py
index 692245c849c..da078a00137 100644
--- a/odoo/addons/test_new_api/tests/test_new_fields.py
+++ b/odoo/addons/test_new_api/tests/test_new_fields.py
@@ -1598,6 +1598,18 @@ class TestFields(common.TransactionCase):
assertBinaryValue(record_no_bin_size, binary_value)
assertBinaryValue(record_bin_size, binary_size)
+ # check computed binary field with arbitrary Python value
+ record = self.env['test_new_api.model_binary'].create({})
+ record.flush()
+ record.invalidate_cache()
+ record_no_bin_size = record.with_context(bin_size=False)
+ record_bin_size = record.with_context(bin_size=True)
+
+ expected_value = [(record.id, False)]
+ self.assertEqual(record.binary_computed, expected_value)
+ self.assertEqual(record_no_bin_size.binary_computed, expected_value)
+ self.assertEqual(record_bin_size.binary_computed, expected_value)
+
class TestX2many(common.TransactionCase):
def test_definition_many2many(self):
diff --git a/odoo/fields.py b/odoo/fields.py
index fdb56fc898a..f244eb56163 100644
--- a/odoo/fields.py
+++ b/odoo/fields.py
@@ -1921,7 +1921,8 @@ class Binary(Field):
except (TypeError, binascii.Error):
pass
try:
- value = human_size(len(value))
+ if isinstance(value, (bytes, _BINARY)):
+ value = human_size(len(value))
except (TypeError):
pass
cache_value = self.convert_to_cache(value, record)