Reviewers: ,


Please review this at http://codereview.tryton.org/339001/

Affected files:
  M tryton/common/domain_parser.py


Index: tryton/common/domain_parser.py
===================================================================
--- a/tryton/common/domain_parser.py
+++ b/tryton/common/domain_parser.py
@@ -177,28 +177,35 @@
     "Convert value for field"

     def convert_boolean():
-        return any(test.lower().startswith(value.lower())
-            for test in (_('y'), _('yes'), _('true'), _('t'), '1'))
+        if isinstance(value, basestring):
+            return any(test.lower().startswith(value.lower())
+                for test in (_('y'), _('yes'), _('true'), _('t'), '1'))
+        else:
+            return bool(value)

     def convert_float():
         try:
             return locale.atof(value)
-        except ValueError:
-            return 0.0
+        except (ValueError, AttributeError):
+            return

     def convert_integer():
-        return int(convert_float())
+        try:
+            return int(locale.atof(value))
+        except (ValueError, AttributeError):
+            return

     def convert_numeric():
         try:
             return locale.atof(value, Decimal)
-        except decimal.InvalidOperation:
-            return Decimal(0)
+        except (decimal.InvalidOperation, AttributeError):
+            return

     def convert_selection():
-        for key, text in field['selection']:
-            if value.lower() == text.lower():
-                return key
+        if isinstance(value, basestring):
+            for key, text in field['selection']:
+                if value.lower() == text.lower():
+                    return key
         return value

     def convert_datetime():
@@ -210,19 +217,21 @@
return untimezoned_date(datetime.datetime(*time.strptime(value,
                             date_format())[:6]))
             except ValueError:
-                return False
+                return
+        except TypeError:
+            return

     def convert_date():
         try:
             return datetime.date(*time.strptime(value, date_format())[:3])
-        except ValueError:
-            return False
+        except (ValueError, TypeError):
+            return

     def convert_time():
         try:
             return datetime.time(*time.strptime(value, HM_FORMAT)[3:6])
-        except ValueError:
-            return False
+        except (ValueError, TypeError):
+            return

     converts = {
         'boolean': convert_boolean,
@@ -251,6 +260,7 @@
             ('False', False),
             ('no', False),
             ('0', False),
+            (None, False),
             ):
         assert convert_value(field, value) == result

@@ -262,8 +272,9 @@
     for value, result in (
             ('1', 1.0),
             ('1.5', 1.5),
-            ('', 0.0),
-            ('test', 0.0),
+            ('', None),
+            ('test', None),
+            (None, None),
             ):
         assert convert_value(field, value) == result

@@ -275,8 +286,9 @@
     for value, result in (
             ('1', 1),
             ('1.5', 1),
-            ('', 0),
-            ('test', 0),
+            ('', None),
+            ('test', None),
+            (None, None),
             ):
         assert convert_value(field, value) == result

@@ -288,8 +300,9 @@
     for value, result in (
             ('1', Decimal(1)),
             ('1.5', Decimal('1.5')),
-            ('', Decimal(0)),
-            ('test', Decimal(0)),
+            ('', None),
+            ('test', None),
+            (None, None),
             ):
         assert convert_value(field, value) == result

@@ -306,6 +319,7 @@
             ('Male', 'male'),
             ('male', 'male'),
             ('test', 'test'),
+            (None, None),
             ):
         assert convert_value(field, value) == result

@@ -317,7 +331,8 @@
     for value, result in (
             ('12/04/2002', datetime.datetime(2002, 12, 4)),
('12/04/2002 12:30:00', datetime.datetime(2002, 12, 4, 12, 30)),
-            ('test', False),
+            ('test', None),
+            (None, None),
             ):
         assert convert_value(field, value) == result

@@ -328,7 +343,8 @@
         }
     for value, result in (
             ('12/04/2002', datetime.date(2002, 12, 4)),
-            ('test', False),
+            ('test', None),
+            (None, None),
             ):
         assert convert_value(field, value) == result

@@ -339,7 +355,8 @@
         }
     for value, result in (
             ('12:30:00', datetime.time(12, 30, 0)),
-            ('test', False),
+            ('test', None),
+            (None, None),
             ):
         assert convert_value(field, value) == result

@@ -407,6 +424,7 @@
     for value, result in (
             (True, 'True'),
             (False, 'False'),
+            (None, 'False'),
             ):
         assert format_value(field, value) == result

@@ -421,6 +439,7 @@
             (0, '0'),
             (0.0, '0'),
             (False, ''),
+            (None, ''),
             ):
         assert format_value(field, value) == result

@@ -436,6 +455,7 @@
             (0, '0.00'),
             (0.0, '0.00'),
             (False, ''),
+            (None, ''),
             ):
         assert format_value(field, value) == result

@@ -451,6 +471,7 @@
             (Decimal(0), '0.00'),
             (Decimal('0.0'), '0.00'),
             (False, ''),
+            (None, ''),
             ):
         assert format_value(field, value) == result

@@ -467,6 +488,7 @@
             ('male', 'Male'),
             ('test', 'test'),
             (False, ''),
+            (None, ''),
             ):
         assert format_value(field, value) == result

@@ -480,6 +502,7 @@
             (datetime.datetime(2002, 12, 4), '12/04/2002'),
(datetime.datetime(2002, 12, 4, 12, 30), '"12/04/2002 12:30:00"'),
             (False, ''),
+            (None, ''),
             ):
         assert format_value(field, value) == result

@@ -491,6 +514,7 @@
     for value, result in (
             (datetime.date(2002, 12, 4), '12/04/2002'),
             (False, ''),
+            (None, ''),
             ):
         assert format_value(field, value) == result

@@ -502,6 +526,7 @@
     for value, result in (
             (datetime.time(12, 30, 0), '"12:30:00"'),
             (False, ''),
+            (None, ''),
             ):
         assert format_value(field, value) == result



--
[email protected] mailing list

Reply via email to