diff --git a/public/index.html b/public/index.html
index af93ab7..2fed797 100644
--- a/public/index.html
+++ b/public/index.html
@@ -56,7 +56,7 @@
-
+
diff --git a/public/js/index.js b/public/js/index.js
index 17803ae..b3e144d 100644
--- a/public/js/index.js
+++ b/public/js/index.js
@@ -3,7 +3,8 @@ const socket = io();
const progressContainer = document.getElementById("progress-container");
const progressBar = document.getElementById("progress-bar");
const progressText = document.getElementById("progress-text");
-const statusEl = document.getElementById("status");
+const uploadStatusEl = document.getElementById("upload-status");
+const statusStatusEl = document.getElementById("status-status");
const commentResultsContainer = document.querySelector(
".results-container#comment",
@@ -28,7 +29,7 @@ document.getElementById("download-dataset").onclick = () => {
// Upload logic
document.getElementById("upload-btn").onclick = async () => {
- statusEl.classList.add("hidden");
+ uploadStatusEl.classList.add("hidden");
progressContainer.classList.add("hidden");
const type = document.getElementById("answer-cype").value;
@@ -50,8 +51,9 @@ document.getElementById("upload-btn").onclick = async () => {
const json = await res.json();
if (!res.ok) {
- statusEl.style.color = "red";
- statusEl.textContent =
+ uploadStatusEl.classList.remove("hidden");
+ uploadStatusEl.style.color = "red";
+ uploadStatusEl.textContent =
json.error + (json.message ? ": " + json.message : "");
return;
}
@@ -119,19 +121,22 @@ function setProgress(percent) {
socket.on("progress", (data) => {
setProgress(data.percent);
if (data.percent == 100) {
- statusEl.style.color = "green";
- statusEl.textContent = "Processing complete!";
+ uploadStatusEl.style.color = "green";
+ uploadStatusEl.textContent = "Processing complete!";
}
});
-socket.on("started-processing", () => {
+socket.on("started-processing", (data) => {
setProgress(0);
+ uploadStatusEl.classList.remove("hidden");
+ uploadStatusEl.style.color = "green";
+ uploadStatusEl.textContent = data["id"];
});
socket.on("successful-upload", () => {
- statusEl.classList.remove("hidden");
- statusEl.style.color = "green";
- statusEl.textContent = "Upload succeeded!";
+ uploadStatusEl.classList.remove("hidden");
+ uploadStatusEl.style.color = "green";
+ uploadStatusEl.textContent = "Upload succeeded!";
});
// INFO-MODAL LOGIC
@@ -177,6 +182,23 @@ modalOverlay.addEventListener("keydown", (e) => {
});
});
-document.getElementById("request-status").onclick = () => {
- url.reportValidity();
+document.getElementById("request-status").onclick = async () => {
+ if (!uuid.reportValidity()) return;
+ const res = await fetch(`/answers/status/${uuid.value}`, {
+ headers: {
+ "X-Socket-Id": socket.id,
+ },
+ });
+
+ const json = await res.json();
+ if (!res.ok) {
+ statusStatusEl.classList.remove("hidden");
+ statusStatusEl.style.color = "red";
+ statusStatusEl.textContent =
+ json.error + (json.message ? ": " + json.message : "");
+ return;
+ }
+ statusStatusEl.classList.remove("hidden");
+ statusStatusEl.style.color = "green";
+ statusStatusEl.textContent = json["status"];
};
diff --git a/src/routes/answers.py b/src/routes/answers.py
index 02b2c4a..01ebfb6 100644
--- a/src/routes/answers.py
+++ b/src/routes/answers.py
@@ -2,7 +2,8 @@
from flask import Blueprint, request, jsonify, current_app
from utils.errors import InvalidJsonFormatError
from utils.process_data import evaluate_comments, evaluate_refinement
-import json
+from utils.observer import request2status
+import json, uuid
router = Blueprint('answers', __name__, url_prefix='/answers')
@@ -78,14 +79,22 @@ def submit_refinement():
except InvalidJsonFormatError as e:
return jsonify({'error': 'Invalid JSON format', 'message': str(e)}), 400
+ process_id = str(uuid.uuid4())
+ request2status[process_id] = "processing"
+
socketio = current_app.extensions['socketio']
sid = request.headers.get('X-Socket-Id')
if sid:
socketio.emit('successful-upload', room=sid)
- socketio.emit('started-processing', room=sid)
+ socketio.emit('started-processing', {"id": process_id}, room=sid)
results = evaluate_refinement(
validated, lambda p: socketio.emit('progress', {'percent': p}, room=sid)
)
return jsonify(results)
+
+
+@router.route('/status/')
+def request_status(id):
+ return jsonify({"status": request2status.get(id, "doens't exist")})
diff --git a/src/utils/observer.py b/src/utils/observer.py
new file mode 100644
index 0000000..2c2ea7c
--- /dev/null
+++ b/src/utils/observer.py
@@ -0,0 +1 @@
+request2status = {}