aboutsummaryrefslogtreecommitdiff
path: root/qc_app
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-06-02 09:58:05 +0300
committerFrederick Muriuki Muriithi2022-06-02 09:58:05 +0300
commitdfb56175278409fc56298890b1ca617d0e00992c (patch)
tree5db7fe8622c329bafaeaf3fa9e1f4ec0067c2869 /qc_app
parent8bb941deef5208bdccd3805af93c982aac627752 (diff)
downloadgn-uploader-dfb56175278409fc56298890b1ca617d0e00992c.tar.gz
Add an error display to the progress status report
Enable the progress status page to show all the errors found at any point during the processing of the file.
Diffstat (limited to 'qc_app')
-rw-r--r--qc_app/parse.py11
-rw-r--r--qc_app/templates/errors_display.html43
-rw-r--r--qc_app/templates/job_progress.html5
-rw-r--r--qc_app/templates/parse_results.html41
4 files changed, 58 insertions, 42 deletions
diff --git a/qc_app/parse.py b/qc_app/parse.py
index 578ab70..ec9962b 100644
--- a/qc_app/parse.py
+++ b/qc_app/parse.py
@@ -20,6 +20,7 @@ from quality_control.parsing import (
strain_names)
parsebp = Blueprint("parse", __name__)
+isinvalidvalue = lambda item: isinstance(item, InvalidValue)
@parsebp.route("/parse", methods=["GET"])
def parse():
@@ -72,19 +73,23 @@ def parse_status(job_id: str):
progress = float(job["percent"])
status = job["status"]
filename = job.get("filename", "uploaded file")
+ errors = jsonpickle.decode(
+ job.get("errors", jsonpickle.encode(tuple())))
if status == "success":
return redirect(url_for("parse.results", job_id=job_id))
if status == "parse-error":
return redirect(url_for("parse.fail", job_id=job_id))
+ app.jinja_env.globals.update(isinvalidvalue=isinvalidvalue)
return render_template(
"job_progress.html",
job_id = job_id,
job_status = status,
progress = progress,
message = job.get("message", ""),
- job_name = f"Parsing '{filename}'")
+ job_name = f"Parsing '{filename}'",
+ errors=errors)
return render_template("no_such_job.html", job_id=job_id)
@@ -97,11 +102,11 @@ def results(job_id: str):
if job:
filename = job["filename"]
errors = jsonpickle.decode(job["errors"])
+ app.jinja_env.globals.update(isinvalidvalue=isinvalidvalue)
return render_template(
"parse_results.html",
errors=errors,
- job_name = f"Parsing '{filename}'",
- isinvalidvalue=lambda item: isinstance(item, InvalidValue))
+ job_name = f"Parsing '{filename}'")
return render_template("no_such_job.html", job_id=job_id)
diff --git a/qc_app/templates/errors_display.html b/qc_app/templates/errors_display.html
new file mode 100644
index 0000000..0c9a212
--- /dev/null
+++ b/qc_app/templates/errors_display.html
@@ -0,0 +1,43 @@
+{%macro errors_display(errors, no_error_msg, error_message)%}
+
+{%if errors | length == 0 %}
+<span class="alert-success">{{no_error_msg}}</span>
+{%else %}
+<p class="alert-error">{{error_message}}</p>
+
+<table class="reports-table">
+ <thead>
+ <tr>
+ <th>line number</th>
+ <th>column(s)</th>
+ <th>error</th>
+ <th>error message</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ {%for error in errors%}
+ <tr>
+ <td>{{error["line"]}}</td>
+ <td>
+ {%if isinvalidvalue(error):%}
+ {{error.column}}
+ {%else: %}
+ {{error.columns}}
+ {%endif %}
+ </td>
+ <td>
+ {%if isinvalidvalue(error):%}
+ Invalid Value
+ {%else: %}
+ Duplicate Header
+ {%endif %}
+ </td>
+ <td>{{error["message"]}}</td>
+ </tr>
+ {%endfor%}
+ </tbody>
+</table>
+{%endif%}
+
+{%endmacro%}
diff --git a/qc_app/templates/job_progress.html b/qc_app/templates/job_progress.html
index 8a9256f..accdc1c 100644
--- a/qc_app/templates/job_progress.html
+++ b/qc_app/templates/job_progress.html
@@ -1,4 +1,5 @@
{%extends "base.html"%}
+{%from "errors_display.html" import errors_display%}
{%block extrameta%}
<meta http-equiv="refresh" content="5">
@@ -16,4 +17,8 @@
<progress id="job_{{job_id}}" value="{{progress/100}}">{{progress}}</progress>
<span>{{"%.2f" | format(progress)}}%</span>
+<div>
+ {{errors_display(errors, "No errors found so far", "We have found the following errors so far")}}
+</div>
+
{%endblock%}
diff --git a/qc_app/templates/parse_results.html b/qc_app/templates/parse_results.html
index a750bb5..8d39359 100644
--- a/qc_app/templates/parse_results.html
+++ b/qc_app/templates/parse_results.html
@@ -1,48 +1,11 @@
{%extends "base.html"%}
+{%from "errors_display.html" import errors_display%}
{%block title%}Parse Results{%endblock%}
{%block contents%}
<h1 class="heading">{{job_name}}: parse results</h2>
-{%if errors | length == 0 %}
-<span class="alert-success">No errors found in the file</span>
-{%else %}
-<p class="alert-error">We found the following errors</p>
-
-<table class="reports-table">
- <thead>
- <tr>
- <th>line number</th>
- <th>column(s)</th>
- <th>error</th>
- <th>error message</th>
- </tr>
- </thead>
-
- <tbody>
- {%for error in errors%}
- <tr>
- <td>{{error["line"]}}</td>
- <td>
- {%if isinvalidvalue(error):%}
- {{error.column}}
- {%else: %}
- {{error.columns}}
- {%endif %}
- </td>
- <td>
- {%if isinvalidvalue(error):%}
- Invalid Value
- {%else: %}
- Duplicate Header
- {%endif %}
- </td>
- <td>{{error["message"]}}</td>
- </tr>
- {%endfor%}
- </tbody>
-</table>
-{%endif%}
+{{errors_display(errors, "No errors found in the file", "We found the following errors")}}
{%endblock%}