Please review this at http://codereview.appspot.com/4298053/
Affected files:
M trytond/model/modelstorage.py
M trytond/tests/test_fields.py
Index: trytond/model/modelstorage.py
===================================================================
--- a/trytond/model/modelstorage.py
+++ b/trytond/model/modelstorage.py
@@ -1080,6 +1080,17 @@
'size_validation_record',
error_args=self._get_error_args(field_name))
+ def digits_test(value, digits, field_name):
+ def raise_user_error():
+ self.raise_user_error('digits_validation_record',
+ error_args=self._get_error_args(field_name))
+ if isinstance(value, Decimal):
+ if not
(value.quantize(Decimal(str(10.0**-digits[1])))
+ == value):
+ raise_user_error()
+ else:
+ if not (round(value, digits[1]) == float(value)):
+ raise_user_error()
# validate digits
if hasattr(field, 'digits') and field.digits:
if is_pyson(field.digits):
@@ -1092,20 +1103,11 @@
env['context'] = Transaction().context
env['active_id'] = record.id
digits = PYSONDecoder(env).decode(pyson_digits)
- if not round(record[field_name],
digits[1]) == \
- float(record[field_name]):
- self.raise_user_error(
- 'digits_validation_record',
- error_args=self._get_error_args(
- field_name))
+ digits_test(record[field_name], digits,
field_name)
else:
for record in records:
- if not round(record[field_name],
field.digits[1]) == \
- float(record[field_name]):
- self.raise_user_error(
- 'digits_validation_record',
- error_args=self._get_error_args(
- field_name))
+ digits_test(record[field_name], field.digits,
+ field_name)
def _clean_defaults(self, defaults):
vals = {}
Index: trytond/tests/test_fields.py
===================================================================
--- a/trytond/tests/test_fields.py
+++ b/trytond/tests/test_fields.py
@@ -763,6 +763,11 @@
self.failUnlessRaises(Exception, self.numeric_digits.write,
numeric6_id, {
+ 'numeric': Decimal('0.10000000000000001'),
+ })
+
+ self.failUnlessRaises(Exception, self.numeric_digits.write,
+ numeric6_id, {
'digits': 0,
})
--
Cédric Krier
B2CK SPRL
Rue de Rotterdam, 4
4000 Liège
Belgium
Tel: +32 472 54 46 59
Email/Jabber: [email protected]
Website: http://www.b2ck.com/
pgpL4PJWj3QYN.pgp
Description: PGP signature
