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):
if len(ok_values) == 1:
return u_err(err, 'Valeur incorrecte', 'L\'unique valeur autorisée pour cette colonne est: {}'.format(ok_values[0]))
else:
ok_values_str = et_join(ok_values)
return u_err(err, 'Valeur incorrecte', 'Les valeurs autorisées pour cette colonne sont : {}'.format(ok_values_str))
html_str = '<ul>' + '\n'.join(['<li>{}</li>'.format(val.strip('"')) for val in ok_values]) + '</ul>'
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):
""" minimum-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):
""" 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 minimum_length_constraint(err, headers, schema):
""" minimum-length-constraint """
min_value = err['message-data']['constraint']
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):
""" pattern-constraint """
column_number = err['column-number']
field = schema['fields'][column_number]
field = schema['fields'][column_number - 1]
col_name = field['name']
addon_info_list = []
if 'description' in field:
......@@ -91,7 +105,7 @@ def pattern_constraint(err, headers, schema):
if 'example' in field:
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 ''
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):
......@@ -145,6 +159,20 @@ def type_or_format_error(err, headers, schema):
# Default msg
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
......
......@@ -57,20 +57,26 @@ def extract_source_data(source: ValidataSource, preview_rows_nb=5):
ERROR_MESSAGE_FUNC = {
# Core checks
# blank-header
'blank-row': error_messages.blank_row,
# duplicate-header
'duplicate-row': error_messages.duplicate_row,
'enumerable-constraint': error_messages.enumerable_constraint,
'minimum-constraint': error_messages.minimum_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,
'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
'extra-headers': error_messages.extra_headers,
'invalid-column-delimiter': error_messages.invalid_column_delimiter,
'wrong-headers-order': error_messages.wrong_headers_order,
'missing-headers': error_messages.missing_headers,
'wrong-headers-order': error_messages.wrong_headers_order,
# Validata custom checks
'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