Commit bbf34190 authored by Pierre Dittgen's avatar Pierre Dittgen

Add datetime in validation report

parent 876fad22
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<h1>{{ title }}</h1> <h1>{{ title }}</h1>
<p class="text">Validation effectuée {{ validation_date }}</p>
{# Schema info #} {# Schema info #}
<div class="row"> <div class="row">
......
...@@ -19,6 +19,15 @@ from validata_ui.util import (ValidataSource, flash_error, flash_info, ...@@ -19,6 +19,15 @@ from validata_ui.util import (ValidataSource, flash_error, flash_info,
from validata_ui.validate_helper import ValidatorHelper from validata_ui.validate_helper import ValidatorHelper
from validata_validate import csv_helpers from validata_validate import csv_helpers
from validata_validate.loaders import custom_loaders from validata_validate.loaders import custom_loaders
from validata_ui import app
from validata_ui.util import flash_error, flash_info, flash_success, flash_warning, ValidataSource
from validata_ui.validate_helper import ValidatorHelper
from validata_ui import error_messages
from flask import Flask, jsonify, redirect, render_template, request, url_for
import tabulator
from io import BytesIO
def extract_source_data(source: ValidataSource, preview_rows_nb=5): def extract_source_data(source: ValidataSource, preview_rows_nb=5):
...@@ -52,41 +61,34 @@ def extract_source_data(source: ValidataSource, preview_rows_nb=5): ...@@ -52,41 +61,34 @@ def extract_source_data(source: ValidataSource, preview_rows_nb=5):
'preview_rows': rows[:preview_rows_nb]} 'preview_rows': rows[:preview_rows_nb]}
def improve_errors(errors): def improve_messages(errors, headers, schema):
""" add context to errors, converts markdown content to HTML""" """ Translates and improve error messages """
def improve_err(err): def error_message_default_func(error, headers, schema):
""" Adds context info based on row-nb presence and converts content to HTML""" """ Sets a new better error message """
error['title'] = error['code']
error['content'] = error.get('message', 'pas d\'information complémentaire')
return error
# Context improved_errors = []
update_keys = {
'context': 'body' if 'row-number' in err and not err['row-number'] is None else 'table',
}
# markdown to HTML (with default values for 'title' and 'content') for error in errors:
# Use default values to insure right error display in validation report
# until validata.validate finished its message migration
# Set default title if no title improve_func = ERROR_MESSAGE_FUNC.get(error['code'], error_message_default_func)
if not 'title' in err: improved_errors.append(improve_func(error, headers, schema))
update_keys['title'] = '[{}]'.format(err['code'])
# Convert message to markdown only if no content return improved_errors
# => for pre-checks errors
if 'message' in err and not 'content' in err:
update_keys['message'] = commonmark(err['message'])
# Else, default message
elif not 'message' in err or err['message'] is None:
update_keys['message'] = '[{}]'.format(err['code'])
# Message content def contextualize(errors):
md_content = '*content soon available*' if not 'content' in err else err['content'] """ add context to errors """
update_keys['content'] = commonmark(md_content)
return {**err, **update_keys} def add_context(err):
""" Adds context info based on row-nb presence """
context = 'body' if 'row-number' in err and not err['row-number'] is None else 'table'
return {**err, 'context': context}
return list(map(improve_err, errors)) return list(map(add_context, errors))
def create_validata_report(goodtables_report, schema): def create_validata_report(goodtables_report, schema):
...@@ -122,10 +124,13 @@ def create_validata_report(goodtables_report, schema): ...@@ -122,10 +124,13 @@ def create_validata_report(goodtables_report, schema):
report['table']['headers_description'] = [fields_dict[h][1] report['table']['headers_description'] = [fields_dict[h][1]
if h in fields_dict else 'Cette colonne n\'est pas définie dans le schema' for h in headers] if h in fields_dict else 'Cette colonne n\'est pas définie dans le schema' for h in headers]
# Contextualize errors and convert content from markdown to HTML # Add context to errors
errors = improve_errors(report['table']['errors']) errors = contextualize(report['table']['errors'])
del report['table']['errors'] del report['table']['errors']
# Provide better (french) messages
errors = improve_messages(errors, headers, schema)
# Count errors # Count errors
report['error_count'] = len(errors) report['error_count'] = len(errors)
del report['error-count'] del report['error-count']
...@@ -142,13 +147,12 @@ def create_validata_report(goodtables_report, schema): ...@@ -142,13 +147,12 @@ def create_validata_report(goodtables_report, schema):
report['table']['display_body_errors'] = all(err['code'] == 'invalid-column-delimiter' report['table']['display_body_errors'] = all(err['code'] == 'invalid-column-delimiter'
for err in report['table']['errors']['structure']) for err in report['table']['errors']['structure'])
# Remember number of body errors
report['table']['errors']['body_nb_errors'] = len(report['table']['errors']['body'])
# Group body errors by row id # Group body errors by row id
rows = [] rows = []
current_row_id = 0 current_row_id = 0
for err in report['table']['errors']['body']: for err in report['table']['errors']['body']:
if not 'row-number' in err:
print('ERR', err)
row_id = err['row-number'] row_id = err['row-number']
del err['row-number'] del err['row-number']
del err['context'] del err['context']
...@@ -162,9 +166,7 @@ def create_validata_report(goodtables_report, schema): ...@@ -162,9 +166,7 @@ def create_validata_report(goodtables_report, schema):
rows[-1]['errors'][column_id] = err rows[-1]['errors'][column_id] = err
else: else:
rows[-1]['errors']['row'] = err rows[-1]['errors']['row'] = err
report['table']['errors']['body_by_rows'] = rows report['table']['errors']['by_rows'] = rows
del report['table']['errors']['body']
return report return report
...@@ -178,8 +180,6 @@ def validate(schema_code, source: ValidataSource): ...@@ -178,8 +180,6 @@ def validate(schema_code, source: ValidataSource):
flash_error('Erreur : format de fichier non supporté') flash_error('Erreur : format de fichier non supporté')
return redirect(url_for('scdl_validator', val_code=schema_code)) return redirect(url_for('scdl_validator', val_code=schema_code))
# return jsonify(goodtables_report)
source_data = extract_source_data(source) source_data = extract_source_data(source)
validata_report = create_validata_report(goodtables_report, ValidatorHelper.schema(schema_code)) validata_report = create_validata_report(goodtables_report, ValidatorHelper.schema(schema_code))
......
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