[IMP] fields.Date[Time]: convert_to_cache: avoid costly parsing when not validating
authorOlivier Dony <odo@openerp.com>
Thu, 7 Aug 2014 10:56:13 +0000 (12:56 +0200)
committerOlivier Dony <odo@openerp.com>
Thu, 7 Aug 2014 16:24:29 +0000 (18:24 +0200)
The extra parsing check is not necessary when we're
not validating inputs, because in that case the
values come from the database and are valid.
The validation is quite expensive due to calls
to strptime() + strftime().

openerp/fields.py

index 814bac5..683ff92 100644 (file)
@@ -1041,8 +1041,11 @@ class Date(Field):
         if not value:
             return False
         if isinstance(value, basestring):
-            value = self.from_string(value)
-        return value.strftime(DATE_FORMAT)
+            if validate:
+                # force parsing for validation
+                self.from_string(value)
+            return value[:DATE_LENGTH]
+        return self.to_string(value)
 
     def convert_to_export(self, value, env):
         if value and env.context.get('export_raw_data'):
@@ -1106,8 +1109,14 @@ class Datetime(Field):
         if not value:
             return False
         if isinstance(value, basestring):
-            value = self.from_string(value)
-        return value.strftime(DATETIME_FORMAT)
+            if validate:
+                # force parsing for validation
+                self.from_string(value)
+            value = value[:DATETIME_LENGTH]
+            if len(value) == DATE_LENGTH:
+                value += " 00:00:00"
+            return value
+        return self.to_string(value)
 
     def convert_to_export(self, value, env):
         if value and env.context.get('export_raw_data'):