diff --git a/validata_ui_next/templates/validation_report.html b/validata_ui_next/templates/validation_report.html index 33eee74542ae2c3d3723f5a38a196d184966b8ce..cfbcfabf6d68d581d62ce621f0b771fd1241a363 100644 --- a/validata_ui_next/templates/validation_report.html +++ b/validata_ui_next/templates/validation_report.html @@ -63,7 +63,12 @@ {% for row in report.table.errors.by_rows %} + {% if 'row' in row.errors %} + {{ row.row_id + }} + {% else %} {{ row.row_id }} + {% endif %} {% for d in source_data.data_rows[row.row_id - 2] %} {% if loop.index in row.errors %} diff --git a/validata_ui_next/views.py b/validata_ui_next/views.py index 5496483ed91491d6aadd95e4e465a34c6b34c772..47a9baebf6a6e870094a3aa6791100583d678417 100644 --- a/validata_ui_next/views.py +++ b/validata_ui_next/views.py @@ -76,6 +76,28 @@ ERR_CODE_TO_CONTEXT = dict([ ]) +def improve_messages(errors): + """ Translates and improve error messages """ + + def update_message(error, new_message): + """ set a new error message """ + + # Stores previous message if exists + if 'message' in error: + error['_original_message'] = error['message'] + error['message'] = new_message + + for error in errors: + + if error['code'] == 'blank-row': + update_message(error, 'la ligne {} est vide'.format(error['row-number'])) + elif error['code'] == 'duplicate-row': + update_message(error, 'la ligne {} est identique à la précédente'.format(error['row-number'])) + + # Return updated error list + return errors + + def contextualize(errors): """ add context to errors """ @@ -89,6 +111,7 @@ def create_validata_report(goodtables_report): - error-counts is ok - errors are grouped by lines - errors are separated into "structure" and "body" + - error messages are improved """ report = copy.deepcopy(goodtables_report) @@ -100,11 +123,19 @@ def create_validata_report(goodtables_report): del report['table']['time'] del report['table']['valid'] del report['valid'] + # use _ instead of - to ease information picking in jinja2 template + report['table']['row_count'] = report['table']['row-count'] + + # Shortcut + report['table']['col_count'] = len(report['table']['headers']) # Add context to errors errors = contextualize(report['table']['errors']) del report['table']['errors'] + # Provide better (french) messages + errors = improve_messages(errors) + # Count errors report['error_count'] = len(errors) del report['error-count'] @@ -121,20 +152,19 @@ def create_validata_report(goodtables_report): rows = [] current_row_id = 0 for err in report['table']['errors']['body']: - if not 'column-number' in err: - # TODO: handle blank row - print("No column-number problem", err) - continue - row_id = err['row-number'] del err['row-number'] del err['context'] if row_id != current_row_id: current_row_id = row_id rows.append({'row_id': current_row_id, 'errors': {}}) - column_id = err['column-number'] - del err['column-number'] - rows[-1]['errors'][column_id] = err + + column_id = err.get('column-number') + if column_id is not None: + del err['column-number'] + rows[-1]['errors'][column_id] = err + else: + rows[-1]['errors']['row'] = err report['table']['errors']['by_rows'] = rows return report