about summary refs log tree commit diff
path: root/qc_app
diff options
context:
space:
mode:
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%}