changeset 6d0ab34370e0 in trytond:5.2
details: https://hg.tryton.org/trytond?cmd=changeset;node=6d0ab34370e0
description:
        Import zero value as non null value

        issue8658
        review282121004
        (grafted from a0dfafa0c039cec82942302179826b6552bc1e61)
diffstat:

 trytond/model/modelstorage.py    |  21 ++++++++++++++++++---
 trytond/tests/test_importdata.py |  39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 57 insertions(+), 3 deletions(-)

diffs (138 lines):

diff -r 18c601b10b13 -r 6d0ab34370e0 trytond/model/modelstorage.py
--- a/trytond/model/modelstorage.py     Wed Sep 11 23:49:34 2019 +0200
+++ b/trytond/model/modelstorage.py     Tue Sep 17 23:12:51 2019 +0200
@@ -857,11 +857,26 @@
                         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 -r 18c601b10b13 -r 6d0ab34370e0 trytond/tests/test_importdata.py
--- a/trytond/tests/test_importdata.py  Wed Sep 11 23:49:34 2019 +0200
+++ b/trytond/tests/test_importdata.py  Tue Sep 17 23:12:51 2019 +0200
@@ -56,6 +56,9 @@
             [['1']]), 1)
 
         self.assertEqual(Integer.import_data(['integer'],
+            [[0]]), 1)
+
+        self.assertEqual(Integer.import_data(['integer'],
             [[1]]), 1)
 
         self.assertEqual(Integer.import_data(['integer'],
@@ -79,6 +82,9 @@
         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 @@
         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'
@@ -121,6 +134,9 @@
             [['1.1']]), 1)
 
         self.assertEqual(Float.import_data(['float'],
+            [[0.0]]), 1)
+
+        self.assertEqual(Float.import_data(['float'],
             [[1.1]]), 1)
 
         self.assertEqual(Float.import_data(['float'],
@@ -144,6 +160,9 @@
         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 @@
         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'
@@ -186,6 +212,9 @@
             [['1.1']]), 1)
 
         self.assertEqual(Numeric.import_data(['numeric'],
+            [[Decimal('0.0')]]), 1)
+
+        self.assertEqual(Numeric.import_data(['numeric'],
             [[Decimal('1.1')]]), 1)
 
         self.assertEqual(Numeric.import_data(['numeric'],
@@ -209,6 +238,9 @@
         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 @@
         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'

Reply via email to