diff --git a/trytond/model/modelstorage.py b/trytond/model/modelstorage.py index 4947ad43bc..40772807c1 100644 --- a/trytond/model/modelstorage.py +++ b/trytond/model/modelstorage.py @@ -859,11 +859,26 @@ class ModelStorage(Model): else: res = bool(int(value)) elif field_type == 'integer': - res = int(value) if value else None + if isinstance(value, int): + res = value + elif value: + res = int(value) + else: + res = None elif field_type == 'float': - res = float(value) if value else None + if isinstance(value, float): + res = value + elif value: + res = float(value) + else: + res = None elif field_type == 'numeric': - res = Decimal(value) if value else None + if isinstance(value, Decimal): + res = value + elif value: + res = Decimal(value) + else: + res = None elif field_type == 'date': if isinstance(value, datetime.date): res = value diff --git a/trytond/tests/test_importdata.py b/trytond/tests/test_importdata.py index bff8307f85..f05f25355d 100644 --- a/trytond/tests/test_importdata.py +++ b/trytond/tests/test_importdata.py @@ -55,6 +55,9 @@ class ImportDataTestCase(unittest.TestCase): self.assertEqual(Integer.import_data(['integer'], [['1']]), 1) + self.assertEqual(Integer.import_data(['integer'], + [[0]]), 1) + self.assertEqual(Integer.import_data(['integer'], [[1]]), 1) @@ -79,6 +82,9 @@ class ImportDataTestCase(unittest.TestCase): self.assertEqual(Integer.import_data(['integer'], [['0']]), 1) + self.assertEqual(Integer.import_data(['integer'], + [[None]]), 1) + @with_transaction() def test_integer_required(self): 'Test required integer' @@ -111,6 +117,13 @@ class ImportDataTestCase(unittest.TestCase): self.assertEqual(IntegerRequired.import_data(['integer'], [['0']]), 1) + self.assertEqual(IntegerRequired.import_data(['integer'], + [[0]]), 1) + + with self.assertRaises(RequiredValidationError): + IntegerRequired.import_data(['integer'], [[None]]) + transaction.rollback() + @with_transaction() def test_float(self): 'Test float' @@ -120,6 +133,9 @@ class ImportDataTestCase(unittest.TestCase): self.assertEqual(Float.import_data(['float'], [['1.1']]), 1) + self.assertEqual(Float.import_data(['float'], + [[0.0]]), 1) + self.assertEqual(Float.import_data(['float'], [[1.1]]), 1) @@ -144,6 +160,9 @@ class ImportDataTestCase(unittest.TestCase): self.assertEqual(Float.import_data(['float'], [['0.0']]), 1) + self.assertEqual(Float.import_data(['float'], + [[None]]), 1) + @with_transaction() def test_float_required(self): 'Test required float' @@ -176,6 +195,13 @@ class ImportDataTestCase(unittest.TestCase): self.assertEqual(FloatRequired.import_data(['float'], [['0.0']]), 1) + self.assertEqual(FloatRequired.import_data(['float'], + [[0.0]]), 1) + + with self.assertRaises(RequiredValidationError): + FloatRequired.import_data(['float'], [[None]]) + transaction.rollback() + @with_transaction() def test_numeric(self): 'Test numeric' @@ -185,6 +211,9 @@ class ImportDataTestCase(unittest.TestCase): self.assertEqual(Numeric.import_data(['numeric'], [['1.1']]), 1) + self.assertEqual(Numeric.import_data(['numeric'], + [[Decimal('0.0')]]), 1) + self.assertEqual(Numeric.import_data(['numeric'], [[Decimal('1.1')]]), 1) @@ -209,6 +238,9 @@ class ImportDataTestCase(unittest.TestCase): self.assertEqual(Numeric.import_data(['numeric'], [['0.0']]), 1) + self.assertEqual(Numeric.import_data(['numeric'], + [[None]]), 1) + @with_transaction() def test_numeric_required(self): 'Test required numeric' @@ -241,6 +273,13 @@ class ImportDataTestCase(unittest.TestCase): self.assertEqual(NumericRequired.import_data(['numeric'], [['0.0']]), 1) + self.assertEqual(NumericRequired.import_data(['numeric'], + [[Decimal('0.0')]]), 1) + + with self.assertRaises(RequiredValidationError): + NumericRequired.import_data(['numeric'], [[None]]) + transaction.rollback() + @with_transaction() def test_char(self): 'Test char'