Commit fef8b69e authored by Pierre Dittgen's avatar Pierre Dittgen

Improving error messages

parent 10a2fc6b
...@@ -64,26 +64,40 @@ def enumerable_constraint(err, headers, schema): ...@@ -64,26 +64,40 @@ def enumerable_constraint(err, headers, schema):
if len(ok_values) == 1: if len(ok_values) == 1:
return u_err(err, 'Valeur incorrecte', 'L\'unique valeur autorisée pour cette colonne est: {}'.format(ok_values[0])) return u_err(err, 'Valeur incorrecte', 'L\'unique valeur autorisée pour cette colonne est: {}'.format(ok_values[0]))
else: else:
ok_values_str = et_join(ok_values) html_str = '<ul>' + '\n'.join(['<li>{}</li>'.format(val.strip('"')) for val in ok_values]) + '</ul>'
return u_err(err, 'Valeur incorrecte', 'Les valeurs autorisées pour cette colonne sont : {}'.format(ok_values_str)) return u_err(err, 'Valeur incorrecte', 'Les seules valeurs autorisées pour cette colonne sont : {}'.format(html_str))
def maximum_constraint(err, headers, schema):
""" maximum-constraint """
max_value = err['message-data']['constraint']
return u_err(err, 'Valeur trop grande', 'La valeur attendue doit être inférieure à {}'.format(max_value))
def maximum_length_constraint(err, headers, schema):
""" maximum-length-constraint """
max_value = err['message-data']['constraint']
text_value_len = len(err['message-data']['value'])
return u_err(err, 'Valeur trop longue', 'La valeur texte attendue ne doit pas comporter plus de {} caractère(s) (au lieu de {} actuellement)'.format(max_value, text_value_len))
def minimum_constraint(err, headers, schema): def minimum_constraint(err, headers, schema):
""" minimum-constraint """ """ minimum-constraint """
min_value = err['message-data']['constraint'] min_value = err['message-data']['constraint']
return u_err(err, 'Valeur trop petite', 'La valeur attendue doit être supérieure à {}'.format(min_value)) return u_err(err, 'Valeur trop petite', 'La valeur attendue doit être au moins égale à {}'.format(min_value))
def maximum_constraint(err, headers, schema): def minimum_length_constraint(err, headers, schema):
""" maximum-constraint """ """ minimum-length-constraint """
max_value = err['message-data']['constraint'] min_value = err['message-data']['constraint']
return u_err(err, 'Valeur trop grande', 'La valeur attendue doit être inférieure à {}'.format(max_value)) text_value_len = len(err['message-data']['value'])
return u_err(err, 'Valeur trop courte', 'Le texte attendu doit comporter au moins {} caractère(s) (au lieu de {} actuellement)'.format(min_value, text_value_len))
def pattern_constraint(err, headers, schema): def pattern_constraint(err, headers, schema):
""" pattern-constraint """ """ pattern-constraint """
column_number = err['column-number'] column_number = err['column-number']
field = schema['fields'][column_number] field = schema['fields'][column_number - 1]
col_name = field['name'] col_name = field['name']
addon_info_list = [] addon_info_list = []
if 'description' in field: if 'description' in field:
...@@ -91,7 +105,7 @@ def pattern_constraint(err, headers, schema): ...@@ -91,7 +105,7 @@ def pattern_constraint(err, headers, schema):
if 'example' in field: if 'example' in field:
addon_info_list.append('Exemple(s) de valeur correcte : {}'.format(field['example'])) addon_info_list.append('Exemple(s) de valeur correcte : {}'.format(field['example']))
addon_info = '<br/>' + '<br/>'.join(addon_info_list) if addon_info_list else '' addon_info = '<br/>' + '<br/>'.join(addon_info_list) if addon_info_list else ''
return u_err(err, 'Erreur de format', 'La valeur ne respecte pas le format attendu pour la colonne « {} ».{}'.format(col_name, addon_info)) return u_err(err, 'Erreur de format', 'La valeur ne respecte pas le format attendu pour la colonne <strong>{}</strong>.{}'.format(col_name, addon_info))
def required_constraint(err, headers, schema): def required_constraint(err, headers, schema):
...@@ -145,6 +159,20 @@ def type_or_format_error(err, headers, schema): ...@@ -145,6 +159,20 @@ def type_or_format_error(err, headers, schema):
# Default msg # Default msg
return u_err(err, 'Type ou format incorrect', 'La valeur de la cellule n\'est pas de type {}'.format(err_type)) return u_err(err, 'Type ou format incorrect', 'La valeur de la cellule n\'est pas de type {}'.format(err_type))
def unique_constraint(err, headers, schema):
""" unique-constraint """
msg_prefix = 'Cette valeur est déjà présente '
row_numbers = err['message-data']['row_numbers']
if not ',' in row_numbers:
msg = msg_prefix + "à la ligne {}.".format(row_numbers)
else:
msg = msg_prefix + "aux lignes {}.".format(et_join(row_numbers))
msg += " Or une contrainte d'unicité est définie pour cette colonne."
msg += "Veuillez corriger les doublons de retirez la contrainte d'unicité du schéma."
return u_err(err, 'Valeur déjà utilisée', msg)
# Validata custom checks # Validata custom checks
......
...@@ -57,20 +57,26 @@ def extract_source_data(source: ValidataSource, preview_rows_nb=5): ...@@ -57,20 +57,26 @@ def extract_source_data(source: ValidataSource, preview_rows_nb=5):
ERROR_MESSAGE_FUNC = { ERROR_MESSAGE_FUNC = {
# Core checks # Core checks
# blank-header
'blank-row': error_messages.blank_row, 'blank-row': error_messages.blank_row,
# duplicate-header
'duplicate-row': error_messages.duplicate_row, 'duplicate-row': error_messages.duplicate_row,
'enumerable-constraint': error_messages.enumerable_constraint, 'enumerable-constraint': error_messages.enumerable_constraint,
'minimum-constraint': error_messages.minimum_constraint,
'maximum-constraint': error_messages.maximum_constraint, 'maximum-constraint': error_messages.maximum_constraint,
'maximum-length-constraint': error_messages.maximum_length_constraint,
'minimum-constraint': error_messages.minimum_constraint,
'minimum-length-constraint': error_messages.minimum_length_constraint,
# missing-value
'pattern-constraint': error_messages.pattern_constraint,
'required-constraint': error_messages.required_constraint, 'required-constraint': error_messages.required_constraint,
'type-or-format-error': error_messages.type_or_format_error, 'type-or-format-error': error_messages.type_or_format_error,
'pattern-constraint': error_messages.pattern_constraint, 'unique-constraint': error_messages.unique_constraint,
# Validata pre-checks # Validata pre-checks
'extra-headers': error_messages.extra_headers, 'extra-headers': error_messages.extra_headers,
'invalid-column-delimiter': error_messages.invalid_column_delimiter, 'invalid-column-delimiter': error_messages.invalid_column_delimiter,
'wrong-headers-order': error_messages.wrong_headers_order,
'missing-headers': error_messages.missing_headers, 'missing-headers': error_messages.missing_headers,
'wrong-headers-order': error_messages.wrong_headers_order,
# Validata custom checks # Validata custom checks
'french-siret-value': error_messages.french_siret_value, 'french-siret-value': error_messages.french_siret_value,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment