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):
_(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)
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'
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