+ {% 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
|