From bbf341904c34c4fa15d098e403a27f7eb3f1217d Mon Sep 17 00:00:00 2001 From: Pierre Dittgen Date: Mon, 19 Nov 2018 10:54:14 +0100 Subject: [PATCH] Add datetime in validation report --- validata_ui/templates/validation_report.html | 1 + validata_ui/views.py | 72 ++++++++++---------- 2 files changed, 37 insertions(+), 36 deletions(-) diff --git a/validata_ui/templates/validation_report.html b/validata_ui/templates/validation_report.html index 019492e..6d234b7 100644 --- a/validata_ui/templates/validation_report.html +++ b/validata_ui/templates/validation_report.html @@ -5,6 +5,7 @@ {% endblock %} {% block content %}

{{ title }}

+

Validation effectuée {{ validation_date }}

{# Schema info #}
diff --git a/validata_ui/views.py b/validata_ui/views.py index 6221516..5b964a8 100644 --- a/validata_ui/views.py +++ b/validata_ui/views.py @@ -19,6 +19,15 @@ from validata_ui.util import (ValidataSource, flash_error, flash_info, from validata_ui.validate_helper import ValidatorHelper from validata_validate import csv_helpers 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): @@ -52,41 +61,34 @@ def extract_source_data(source: ValidataSource, preview_rows_nb=5): 'preview_rows': rows[:preview_rows_nb]} -def improve_errors(errors): - """ add context to errors, converts markdown content to HTML""" +def improve_messages(errors, headers, schema): + """ Translates and improve error messages """ - def improve_err(err): - """ Adds context info based on row-nb presence and converts content to HTML""" + def error_message_default_func(error, headers, schema): + """ Sets a new better error message """ + error['title'] = error['code'] + error['content'] = error.get('message', 'pas d\'information complémentaire') + return error - # Context - update_keys = { - 'context': 'body' if 'row-number' in err and not err['row-number'] is None else 'table', - } + improved_errors = [] - # markdown to HTML (with default values for 'title' and 'content') - # Use default values to insure right error display in validation report - # until validata.validate finished its message migration + for error in errors: - # Set default title if no title - if not 'title' in err: - update_keys['title'] = '[{}]'.format(err['code']) + improve_func = ERROR_MESSAGE_FUNC.get(error['code'], error_message_default_func) + improved_errors.append(improve_func(error, headers, schema)) - # Convert message to markdown only if no content - # => for pre-checks errors - if 'message' in err and not 'content' in err: - update_keys['message'] = commonmark(err['message']) + return improved_errors - # Else, default message - elif not 'message' in err or err['message'] is None: - update_keys['message'] = '[{}]'.format(err['code']) - # Message content - md_content = '*content soon available*' if not 'content' in err else err['content'] - update_keys['content'] = commonmark(md_content) +def contextualize(errors): + """ add context to errors """ - 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): @@ -122,10 +124,13 @@ def create_validata_report(goodtables_report, schema): 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] - # Contextualize errors and convert content from markdown to HTML - errors = improve_errors(report['table']['errors']) + # Add context to errors + errors = contextualize(report['table']['errors']) del report['table']['errors'] + # Provide better (french) messages + errors = improve_messages(errors, headers, schema) + # Count errors report['error_count'] = len(errors) del report['error-count'] @@ -142,13 +147,12 @@ def create_validata_report(goodtables_report, schema): report['table']['display_body_errors'] = all(err['code'] == 'invalid-column-delimiter' 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 rows = [] current_row_id = 0 for err in report['table']['errors']['body']: + if not 'row-number' in err: + print('ERR', err) row_id = err['row-number'] del err['row-number'] del err['context'] @@ -162,9 +166,7 @@ def create_validata_report(goodtables_report, schema): rows[-1]['errors'][column_id] = err else: rows[-1]['errors']['row'] = err - report['table']['errors']['body_by_rows'] = rows - - del report['table']['errors']['body'] + report['table']['errors']['by_rows'] = rows return report @@ -178,8 +180,6 @@ def validate(schema_code, source: ValidataSource): flash_error('Erreur : format de fichier non supporté') return redirect(url_for('scdl_validator', val_code=schema_code)) - # return jsonify(goodtables_report) - source_data = extract_source_data(source) validata_report = create_validata_report(goodtables_report, ValidatorHelper.schema(schema_code)) -- GitLab