From 4c8c7224014a1997c9896180922a6ef9f2eeca01 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 7 Aug 2014 12:56:13 +0200 Subject: [PATCH] [IMP] fields.Date[Time]: convert_to_cache: avoid costly parsing when not validating 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 | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/openerp/fields.py b/openerp/fields.py index 814bac5612e..683ff922adc 100644 --- a/openerp/fields.py +++ b/openerp/fields.py @@ -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'):