Improve error messages by showing the failing value

issue3489
review1671002
This commit is contained in:
Sergi Almacellas Abellana
2013-12-22 10:24:05 +01:00
parent ad12f36ecd
commit e54317cfca
4 changed files with 48 additions and 35 deletions
+1
View File
@@ -1,3 +1,4 @@
* Improve error messages by showing the failing value
* Remove relation field actions:
- delete_all
- unlink_all
+18 -18
View File
@@ -109,8 +109,8 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">domain_validation_record</field>
<field name="lang">en_US</field>
<field name="type">error</field>
<field name="src">The value of the field "%s" on "%s" is not valid according to its domain.</field>
<field name="value">The value of the field "%s" on "%s" is not valid according to its domain.</field>
<field name="src">The value of the field "%(field)s" on "%(model)s" is not valid according to its domain.</field>
<field name="value">The value of the field "%(field)s" on "%(model)s" is not valid according to its domain.</field>
<field name="module">ir</field>
<field name="fuzzy" eval="False"/>
</record>
@@ -118,8 +118,8 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">required_validation_record</field>
<field name="lang">en_US</field>
<field name="type">error</field>
<field name="src">The field "%s" on "%s" is required.</field>
<field name="value">The field "%s" on "%s" is required.</field>
<field name="src">The field "%(field)s" on "%(model)s" is required.</field>
<field name="value">The field "%(field)s" on "%(model)s" is required.</field>
<field name="module">ir</field>
<field name="fuzzy" eval="False"/>
</record>
@@ -127,8 +127,8 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">size_validation_record</field>
<field name="lang">en_US</field>
<field name="type">error</field>
<field name="src">The field "%s" on "%s" is too long.</field>
<field name="value">The field "%s" on "%s" is too long.</field>
<field name="src">The size "%(size)s" of the field "%(field)s" on "%(model)s" is too long.</field>
<field name="value">The size "%(size)s" of the field "%(field)s" on "(model)%s" is too long.</field>
<field name="module">ir</field>
<field name="fuzzy" eval="False"/>
</record>
@@ -136,8 +136,8 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">digits_validation_record</field>
<field name="lang">en_US</field>
<field name="type">error</field>
<field name="src">The field "%s" on "%s" has too many decimal digits.</field>
<field name="value">The field "%s" on "%s" has too many decimal digits.</field>
<field name="src">The number of digits "%(digits)s" of field "%(field)s" on "%(value)s" exceeds it's limit.</field>
<field name="value">The number of digits "%(digits)s" of field "%(field)s" on "%(value)s" exceeds it's limit.</field>
<field name="module">ir</field>
<field name="fuzzy" eval="False"/>
</record>
@@ -146,8 +146,8 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">selection_validation_record</field>
<field name="lang">en_US</field>
<field name="type">error</field>
<field name="src">The field "%s" on "%s" is not in the selection.</field>
<field name="value">The field "%s" on "%s" is not in the selection.</field>
<field name="src">The value "%(value)s" of field "%(field)s" on "%(model)s" is not in the selection.</field>
<field name="value">The value "%(value)s" of field "%(field)s" on "%(model)s" is not in the selection.</field>
<field name="module">ir</field>
<field name="fuzzy" eval="False"/>
</record>
@@ -155,8 +155,8 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">time_format_validation_record</field>
<field name="lang">en_US</field>
<field name="type">error</field>
<field name="src">The time value of field "%s" on "%s" is not valid.</field>
<field name="value">The time value of field "%s" on "%s" is not valid.</field>
<field name="src">The time value "%(value)s" of field "%(field)s" on "%(model)s" is not valid.</field>
<field name="value">The time value "%(value)s" of field "%(field)s" on "%(model)s" is not valid.</field>
<field name="module">ir</field>
<field name="fuzzy" eval="False"/>
</record>
@@ -197,8 +197,8 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">required_field</field>
<field name="lang">en_US</field>
<field name="type">error</field>
<field name="src">The field "%s" on "%s" is required.</field>
<field name="value">The field "%s" on "%s" is required.</field>
<field name="src">The field "%(field)s" on "%(model)s" is required.</field>
<field name="value">The field "%(field)s" on "%(model)s" is required.</field>
<field name="module">ir</field>
<field name="fuzzy" eval="False"/>
</record>
@@ -206,8 +206,8 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">foreign_model_missing</field>
<field name="lang">en_US</field>
<field name="type">error</field>
<field name="src">The value of field "%s" on "%s" doesn't exist.</field>
<field name="value">The value of field "%s" on "%s" doesn't exist.</field>
<field name="src">The value "%(value)s" of field "%(field)s" on "%(model)s" doesn't exist.</field>
<field name="value">The value "%(value)s" of field "%(field)s" on "%(model)s" doesn't exist.</field>
<field name="module">ir</field>
<field name="fuzzy" eval="False"/>
</record>
@@ -215,8 +215,8 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">foreign_model_exist</field>
<field name="lang">en_US</field>
<field name="type">error</field>
<field name="src">Could not delete "%s" records because they are used on field "%s" of "%s".</field>
<field name="value">Could not delete "%s" records because they are used on field "%s" of "%s".</field>
<field name="src">Could not delete "%(value)s" records because they are used on field "%(field)s" of "%(model)s".</field>
<field name="value">Could not delete "%(value)s" records because they are used on field "%(field)s" of "%(model)s".</field>
<field name="module">ir</field>
<field name="fuzzy" eval="False"/>
</record>
+6 -6
View File
@@ -218,8 +218,10 @@ class ModelSQL(ModelStorage):
if not ((target_records
or (values[field_name] in create_records))
and (values[field_name] not in delete_records)):
error_args = cls._get_error_args(field_name)
error_args['value'] = values[field_name]
cls.raise_user_error('foreign_model_missing',
error_args=cls._get_error_args(field_name))
error_args=error_args)
for name, _, error in cls._sql_constraints:
if name in exception[0]:
cls.raise_user_error(error)
@@ -839,12 +841,10 @@ class ModelSQL(ModelStorage):
if Model.search([
(field_name, 'in', sub_ids),
], order=[]):
error_args = []
error_args.append(cls._get_error_args('id')[1])
error_args.extend(list(
Model._get_error_args(field_name)))
error_args = Model._get_error_args(field_name)
error_args['value'] = cls._get_error_args('id')[1]
cls.raise_user_error('foreign_model_exist',
error_args=tuple(error_args))
error_args=error_args)
super(ModelSQL, cls).delete(sub_records)
+23 -11
View File
@@ -849,7 +849,10 @@ class ModelStorage(Model):
def _get_error_args(cls, field_name):
pool = Pool()
ModelField = pool.get('ir.model.field')
error_args = (field_name, cls.__name__)
error_args = {
'field': field_name,
'model': cls.__name__
}
if ModelField:
model_fields = ModelField.search([
('name', '=', field_name),
@@ -857,8 +860,10 @@ class ModelStorage(Model):
], limit=1)
if model_fields:
model_field, = model_fields
error_args = (model_field.field_description,
model_field.model.name)
error_args.update({
'field': model_field.field_description,
'model': model_field.model.name,
})
return error_args
@classmethod
@@ -1023,16 +1028,19 @@ class ModelStorage(Model):
field_size = PYSONDecoder(env).decode(pyson_size)
else:
field_size = field.size
if (len(getattr(record, field_name) or '')
> field_size >= 0):
cls.raise_user_error(
'size_validation_record',
error_args=cls._get_error_args(field_name))
size = len(getattr(record, field_name) or '')
if (size > field_size >= 0):
error_args = cls._get_error_args(field_name)
error_args['size'] = size
cls.raise_user_error('size_validation_record',
error_args=error_args)
def digits_test(value, digits, field_name):
def raise_user_error():
error_args = cls._get_error_args(field_name)
error_args['digits'] = digits[1]
cls.raise_user_error('digits_validation_record',
error_args=cls._get_error_args(field_name))
error_args=error_args)
if value is None:
return
if isinstance(value, Decimal):
@@ -1084,8 +1092,10 @@ class ModelStorage(Model):
test.add('')
test.add(None)
if value not in test:
error_args = cls._get_error_args(field_name)
error_args['value'] = value
cls.raise_user_error('selection_validation_record',
error_args=cls._get_error_args(field_name))
error_args=error_args)
def format_test(value, format, field_name):
if not value:
@@ -1094,8 +1104,10 @@ class ModelStorage(Model):
value = value.time()
if value != datetime.datetime.strptime(
value.strftime(format), format).time():
error_args = cls._get_error_args(field_name)
error_args['value'] = value
cls.raise_user_error('time_format_validation_record',
error_args=cls._get_error_args(field_name))
error_args=error_args)
# validate time format
if (field._type in ('datetime', 'time')