[FIX] conversion and validation of date and datetime field imports
bzr revid: xmo@openerp.com-20121001134330-za8hqctrghmw08i4
This commit is contained in:
parent
84332d8aad
commit
aed20ca5d7
|
@ -3,8 +3,11 @@ import functools
|
|||
import operator
|
||||
import itertools
|
||||
import psycopg2
|
||||
import time
|
||||
from openerp.osv import orm, fields
|
||||
from openerp.tools.translate import _
|
||||
from openerp.tools.misc import DEFAULT_SERVER_DATE_FORMAT,\
|
||||
DEFAULT_SERVER_DATETIME_FORMAT
|
||||
|
||||
REFERENCING_FIELDS = set([None, 'id', '.id'])
|
||||
def only_ref_fields(record):
|
||||
|
@ -114,14 +117,25 @@ class ir_fields_converter(orm.Model):
|
|||
_(u"'%s' does not seem to be a number for field '%%(field)s'")
|
||||
% value)
|
||||
|
||||
def _str_to_char(self, cr, uid, model, column, value, context=None):
|
||||
def _str_id(self, cr, uid, model, column, value, context=None):
|
||||
return value, []
|
||||
_str_to_char = _str_to_text = _str_to_binary = _str_id
|
||||
|
||||
def _str_to_text(self, cr, uid, model, column, value, context=None):
|
||||
return value, []
|
||||
def _str_to_date(self, cr, uid, model, column, value, context=None):
|
||||
try:
|
||||
time.strptime(value, DEFAULT_SERVER_DATE_FORMAT)
|
||||
return value, []
|
||||
except ValueError:
|
||||
raise ValueError(
|
||||
_(u"'%s' does not seem to be a valid date for field '%%(field)s'") % value)
|
||||
|
||||
def _str_to_binary(self, cr, uid, model, column, value, context=None):
|
||||
return value, []
|
||||
def _str_to_datetime(self, cr, uid, model, column, value, context=None):
|
||||
try:
|
||||
time.strptime(value, DEFAULT_SERVER_DATETIME_FORMAT)
|
||||
return value, []
|
||||
except ValueError:
|
||||
raise ValueError(
|
||||
_(u"'%s' does not seem to be a valid datetime for field '%%(field)s'") % value)
|
||||
|
||||
def _get_translations(self, cr, uid, types, src, context):
|
||||
types = tuple(types)
|
||||
|
|
|
@ -339,13 +339,8 @@ class test_float_field(ImporterCase):
|
|||
def test_nonsense(self):
|
||||
result = self.import_(['value'], [['foobar']])
|
||||
self.assertIs(result['ids'], False)
|
||||
self.assertEqual(result['messages'], [{
|
||||
'type': 'error',
|
||||
'rows': {'from': 0, 'to': 0},
|
||||
'record': 0,
|
||||
'field': 'value',
|
||||
'message': u"'foobar' does not seem to be a number for field 'unknown'",
|
||||
}])
|
||||
self.assertEqual(result['messages'], [
|
||||
message(u"'foobar' does not seem to be a number for field 'unknown'")])
|
||||
|
||||
class test_string_field(ImporterCase):
|
||||
model_name = 'export.string.bounded'
|
||||
|
@ -981,5 +976,45 @@ class test_realworld(common.TransactionCase):
|
|||
self.assertFalse(result['messages'])
|
||||
self.assertEqual(len(result['ids']), len(data))
|
||||
|
||||
class test_date(ImporterCase):
|
||||
model_name = 'export.date'
|
||||
|
||||
def test_empty(self):
|
||||
self.assertEqual(
|
||||
self.import_(['value'], []),
|
||||
{'ids': [], 'messages': []})
|
||||
|
||||
def test_basic(self):
|
||||
result = self.import_(['value'], [['2012-02-03']])
|
||||
self.assertFalse(result['messages'])
|
||||
self.assertEqual(len(result['ids']), 1)
|
||||
|
||||
def test_invalid(self):
|
||||
result = self.import_(['value'], [['not really a date']])
|
||||
self.assertEqual(result['messages'], [
|
||||
message(u"'not really a date' does not seem to be a valid date "
|
||||
u"for field 'unknown'")])
|
||||
self.assertIs(result['ids'], False)
|
||||
|
||||
class test_datetime(ImporterCase):
|
||||
model_name = 'export.datetime'
|
||||
|
||||
def test_empty(self):
|
||||
self.assertEqual(
|
||||
self.import_(['value'], []),
|
||||
{'ids': [], 'messages': []})
|
||||
|
||||
def test_basic(self):
|
||||
result = self.import_(['value'], [['2012-02-03 11:11:11']])
|
||||
self.assertFalse(result['messages'])
|
||||
self.assertEqual(len(result['ids']), 1)
|
||||
|
||||
def test_invalid(self):
|
||||
result = self.import_(['value'], [['not really a datetime']])
|
||||
self.assertEqual(result['messages'], [
|
||||
message(u"'not really a datetime' does not seem to be a valid "
|
||||
u"datetime for field 'unknown'")])
|
||||
self.assertIs(result['ids'], False)
|
||||
|
||||
# function, related, reference: written to db as-is...
|
||||
# => function uses @type for value coercion/conversion
|
||||
|
|
Loading…
Reference in New Issue