summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2012-09-24 12:52:30 +0200
committerXavier Morel <xmo@openerp.com>2012-09-24 12:52:30 +0200
commit877e21ffdebeba412b7cb4db5fdf352adfac2ff2 (patch)
tree390341600c55008f28e1943cb1780066ab4cb77b
parent449a86a51f62c2e3379fc649c55d89080c278fa4 (diff)
[IMP] return fields_get-style translated field strings (if available) in user-readable warning and error messages from import, rather than logical field names
bzr revid: xmo@openerp.com-20120924105230-1b7157xbruy2e5zr
-rw-r--r--openerp/osv/orm.py19
-rw-r--r--openerp/tests/addons/test_impex/tests/test_load.py26
2 files changed, 29 insertions, 16 deletions
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index 57cc5823dd9..e58d6b76a76 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -1585,8 +1585,15 @@ class BaseModel(object):
:returns: a list of triplets of (id, xid, record)
:rtype: list((int|None, str|None, dict))
"""
+ if context is None: context = {}
Converter = self.pool['ir.fields.converter']
columns = dict((k, v.column) for k, v in self._all_columns.iteritems())
+ Translation = self.pool['ir.translation']
+ field_names = dict(
+ (f, (Translation._get_source(cr, uid, self._name + ',' + f, 'field',
+ context.get('lang', False) or 'en_US')
+ or column.string or f))
+ for f, column in columns.iteritems())
converters = dict(
(k, Converter.to_field(cr, uid, self, column, context=context))
for k, column in columns.iteritems())
@@ -1619,18 +1626,24 @@ class BaseModel(object):
for field, strvalue in record.iteritems():
if field in (None, 'id', '.id'): continue
- message_base = dict(extras, record=stream.index, field=field)
+ # In warnings and error messages, use translated string as
+ # field name
+ message_base = dict(
+ extras, record=stream.index, field=field_names[field])
with warnings.catch_warnings(record=True) as w:
try:
converted[field] = converters[field](strvalue)
+ # In warning and error returned, use logical field name
+ # as field so client can reverse
for warning in w:
- log(dict(message_base, type='warning',
+ log(dict(message_base, type='warning', field=field,
message=unicode(warning.message) % message_base))
except ValueError, e:
log(dict(message_base,
type='error',
- message=unicode(e) % message_base
+ field=field,
+ message=unicode(e) % message_base,
))
yield dbid, xid, converted, dict(extras, record=stream.index)
diff --git a/openerp/tests/addons/test_impex/tests/test_load.py b/openerp/tests/addons/test_impex/tests/test_load.py
index 28957c29555..cf95f5bb6c4 100644
--- a/openerp/tests/addons/test_impex/tests/test_load.py
+++ b/openerp/tests/addons/test_impex/tests/test_load.py
@@ -186,7 +186,7 @@ class test_boolean_field(ImporterCase):
ids, messages = self.import_(['value'], trues)
self.assertEqual(len(ids), 10)
self.assertEqual(messages, [
- message(u"Unknown value '%s' for boolean field 'value', assuming 'yes'" % v[0],
+ message(u"Unknown value '%s' for boolean field 'unknown', assuming 'yes'" % v[0],
type='warning', from_=i, to_=i, record=i)
for i, v in enumerate(trues)
if v[0] != 'true' if v[0] != 'yes' if v[0] != '1'
@@ -460,7 +460,7 @@ class test_selection(ImporterCase):
'rows': {'from': 0, 'to': 0},
'record': 0,
'field': 'value',
- 'message': "Value 'Baz' not found in selection field 'value'",
+ 'message': "Value 'Baz' not found in selection field 'unknown'",
}])
ids, messages = self.import_(['value'], [[42]])
@@ -470,7 +470,7 @@ class test_selection(ImporterCase):
'rows': {'from': 0, 'to': 0},
'record': 0,
'field': 'value',
- 'message': "Value '42' not found in selection field 'value'",
+ 'message': "Value '42' not found in selection field 'unknown'",
}])
class test_selection_function(ImporterCase):
@@ -583,7 +583,7 @@ class test_m2o(ImporterCase):
ids, messages = self.import_(['value'], [[name2]])
self.assertEqual(
messages,
- [message(u"Found multiple matches for field 'value' (2 matches)",
+ [message(u"Found multiple matches for field 'unknown' (2 matches)",
type='warning')])
self.assertEqual(len(ids), 1)
self.assertEqual([
@@ -607,7 +607,7 @@ class test_m2o(ImporterCase):
[integer_id1],
])
self.assertEqual(messages, [
- message(u"No matching record found for name '%s' in field 'value'" % id,
+ message(u"No matching record found for name '%s' in field 'unknown'" % id,
from_=index, to_=index, record=index)
for index, id in enumerate([integer_id1, integer_id2, integer_id1])])
self.assertIs(ids, False)
@@ -626,19 +626,19 @@ class test_m2o(ImporterCase):
ids, messages = self.import_(['value'], [['nameisnoexist:3']])
self.assertEqual(messages, [message(
u"No matching record found for name 'nameisnoexist:3' "
- u"in field 'value'")])
+ u"in field 'unknown'")])
self.assertIs(ids, False)
ids, messages = self.import_(['value/id'], [['noxidhere']])
self.assertEqual(messages, [message(
u"No matching record found for external id 'noxidhere' "
- u"in field 'value'")])
+ u"in field 'unknown'")])
self.assertIs(ids, False)
ids, messages = self.import_(['value/.id'], [['66']])
self.assertEqual(messages, [message(
u"No matching record found for database id '66' "
- u"in field 'value'")])
+ u"in field 'unknown'")])
self.assertIs(ids, False)
def test_fail_multiple(self):
@@ -646,7 +646,7 @@ class test_m2o(ImporterCase):
['value', 'value/id'],
[['somename', 'somexid']])
self.assertEqual(messages, [message(
- u"Ambiguous specification for field 'value', only provide one of "
+ u"Ambiguous specification for field 'unknown', only provide one of "
u"name, external id or database id")])
self.assertIs(ids, False)
@@ -690,7 +690,7 @@ class test_m2m(ImporterCase):
ids, messages = self.import_(['value/.id'], [['42']])
self.assertEqual(messages, [message(
u"No matching record found for database id '42' in field "
- u"'value'")])
+ u"'unknown'")])
self.assertIs(ids, False)
def test_xids(self):
@@ -716,7 +716,7 @@ class test_m2m(ImporterCase):
ids, messages = self.import_(['value/id'], [['noxidforthat']])
self.assertEqual(messages, [message(
u"No matching record found for external id 'noxidforthat' "
- u"in field 'value'")])
+ u"in field 'unknown'")])
self.assertIs(ids, False)
def test_names(self):
@@ -745,7 +745,7 @@ class test_m2m(ImporterCase):
ids, messages = self.import_(['value'], [['wherethem2mhavenonames']])
self.assertEqual(messages, [message(
u"No matching record found for name 'wherethem2mhavenonames' in "
- u"field 'value'")])
+ u"field 'unknown'")])
self.assertIs(ids, False)
def test_import_to_existing(self):
@@ -778,7 +778,7 @@ class test_o2m(ImporterCase):
['const', 'value'],
[['5', s]])
self.assertEqual(messages, [message(
- u"No matching record found for name '%s' in field 'value'" % s)])
+ u"No matching record found for name '%s' in field 'unknown'" % s)])
self.assertIs(ids, False)
def test_single(self):