Commit 9350a521 authored by Pierre Dittgen's avatar Pierre Dittgen
Browse files

Clean report and adapt it to message transition

parent 58a1716e
...@@ -25,12 +25,13 @@ setup( ...@@ -25,12 +25,13 @@ setup(
include_package_data=True, include_package_data=True,
install_requires=[ install_requires=[
'flask', 'flask',
'goodtables',
'requests', 'requests',
'validata_validate >= 0.1, < 0.2', 'validata_validate >= 0.1, < 0.2',
'goodtables',
'tabulator', 'commonmark',
'ezodf', 'ezodf',
'lxml' 'lxml',
'tabulator',
] ]
) )
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
{% endfor %} {% endfor %}
</thead> </thead>
<tbody> <tbody>
{% for row in report.table.errors.by_rows %} {% for row in report.table.errors.body_by_rows %}
<tr> <tr>
{% if 'row' in row.errors %} {% if 'row' in row.errors %}
<th class="table-danger" data-toggle="popover" title="{{ row.errors.row.title }}" data-content="{{ row.errors.row.content }}"> <th class="table-danger" data-toggle="popover" title="{{ row.errors.row.title }}" data-content="{{ row.errors.row.content }}">
......
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
<!-- row checks --> <!-- row checks -->
{% if report.table.errors.body %} {% if report.table.errors.body_nb_errors > 0 %}
{% if not report.table.display_body_errors %} {% if not report.table.display_body_errors %}
<p class="text"> <p class="text">
...@@ -105,7 +105,7 @@ ...@@ -105,7 +105,7 @@
{# {#
{{ report.table.errors.structure|length }} erreur(s) détectée(s) {{ report.table.errors.structure|length }} erreur(s) détectée(s)
{{ report.table.errors.body|length }} erreur(s) détectée(s) {{ report.table.errors.body_nb_errors }} erreur(s) détectée(s)
#} #}
{% endblock %} {% endblock %}
\ No newline at end of file
...@@ -6,19 +6,19 @@ import copy ...@@ -6,19 +6,19 @@ import copy
import json import json
import os import os
from collections import OrderedDict from collections import OrderedDict
from io import BytesIO
from pathlib import Path from pathlib import Path
from validata_validate import csv_helpers from commonmark import commonmark
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 from flask import Flask, jsonify, redirect, render_template, request, url_for
import tabulator
from io import BytesIO import tabulator
from validata_ui import app
from validata_ui.util import (ValidataSource, flash_error, flash_info,
flash_success, flash_warning)
from validata_ui.validate_helper import ValidatorHelper
from validata_validate import csv_helpers
from validata_validate.loaders import custom_loaders
def extract_source_data(source: ValidataSource, preview_rows_nb=5): def extract_source_data(source: ValidataSource, preview_rows_nb=5):
...@@ -52,15 +52,30 @@ def extract_source_data(source: ValidataSource, preview_rows_nb=5): ...@@ -52,15 +52,30 @@ def extract_source_data(source: ValidataSource, preview_rows_nb=5):
'preview_rows': rows[:preview_rows_nb]} 'preview_rows': rows[:preview_rows_nb]}
def contextualize(errors): def improve_errors(errors):
""" add context to errors """ """ add context to errors, converts markdown content to HTML"""
def improve_err(err):
""" Adds context info based on row-nb presence and converts content to HTML"""
# Context
update_keys = {
'context': 'body' if 'row-number' in err and not err['row-number'] is None else 'table',
}
def add_context(err): # markdown to HTML (with default values for 'title' and 'content')
""" Adds context info based on row-nb presence """ # Use default values to insure right error display in validation report
context = 'body' if 'row-number' in err and not err['row-number'] is None else 'table' # until validata.validate finished its message migration
return {**err, 'context': context} if not 'title' in err:
update_keys['title'] = '[{}]'.format(err['code'])
if not 'message' in err or err['message'] is None:
update_keys['message'] = '[{}]'.format(err['code'])
md_content = '*content soon available*' if not 'content' in err else err['content']
update_keys['content'] = commonmark(md_content)
return list(map(add_context, errors)) return {**err, **update_keys}
return list(map(improve_err, errors))
def create_validata_report(goodtables_report, schema): def create_validata_report(goodtables_report, schema):
...@@ -96,13 +111,10 @@ def create_validata_report(goodtables_report, schema): ...@@ -96,13 +111,10 @@ 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]
# Add context to errors # Contextualize errors and convert content from markdown to HTML
errors = contextualize(report['table']['errors']) errors = improve_errors(report['table']['errors'])
del report['table']['errors'] del report['table']['errors']
# Provide better (french) messages
errors = validata_validate.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']
...@@ -119,6 +131,9 @@ def create_validata_report(goodtables_report, schema): ...@@ -119,6 +131,9 @@ 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
...@@ -138,7 +153,9 @@ def create_validata_report(goodtables_report, schema): ...@@ -138,7 +153,9 @@ 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']['by_rows'] = rows report['table']['errors']['body_by_rows'] = rows
del report['table']['errors']['body']
return report return report
...@@ -152,6 +169,8 @@ def validate(schema_code, source: ValidataSource): ...@@ -152,6 +169,8 @@ 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