From 6d85bec0099b3f9d31a885b9ad7d3fe84942bb07 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Wed, 20 Jul 2022 14:44:55 +0200 Subject: [PATCH] Ensure that all status messages are shown on progress page --- CHANGELOG.rst | 5 +++++ aleksis/core/static/js/progress.js | 32 ++++++++++++++++++---------- aleksis/core/util/celery_progress.py | 3 ++- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 55be8df79..80d1702c0 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -9,6 +9,11 @@ and this project adheres to `Semantic Versioning`_. Unreleased ---------- +Fixed +~~~~~ + +* The progress page for background tasks didn't show all status messages. + `2.10`_ - 2022-06-25 -------------------- diff --git a/aleksis/core/static/js/progress.js b/aleksis/core/static/js/progress.js index 5fa0213f8..8a97577e9 100644 --- a/aleksis/core/static/js/progress.js +++ b/aleksis/core/static/js/progress.js @@ -24,25 +24,32 @@ function renderMessageBox(level, text) { return '<div class="alert ' + STYLE_CLASSES[level] + '"><p><i class="material-icons iconify left" data-icon="' + ICONS[level] + '"></i>' + text + '</p></div>'; } +function updateMessages(messages) { + const messagesBox = $("#messages"); + + // Clear container + messagesBox.html(""); + + // Render message boxes + $.each(messages, function (i, message) { + messagesBox.append(renderMessageBox(message[0], message[1])); + }); +} + function customProgress(progressBarElement, progressBarMessageElement, progress) { setProgress(progress.percent); if (progress.hasOwnProperty("messages")) { - const messagesBox = $("#messages"); - - // Clear container - messagesBox.html("") - - // Render message boxes - $.each(progress.messages, function (i, message) { - messagesBox.append(renderMessageBox(message[0], message[1])); - }) + updateMessages(progress.messages); } } -function customSuccess(progressBarElement, progressBarMessageElement) { +function customSuccess(progressBarElement, progressBarMessageElement, result) { setProgress(100); + if (result) { + updateMessages(result); + } $("#result-alert").addClass("success"); $("#result-icon").attr("data-icon", "mdi:check-circle-outline"); $("#result-text").text(OPTIONS.success); @@ -54,8 +61,11 @@ function customSuccess(progressBarElement, progressBarMessageElement) { } } -function customError(progressBarElement, progressBarMessageElement) { +function customError(progressBarElement, progressBarMessageElement, excMessage) { setProgress(100); + if (excMessage) { + updateMessages([40, excMessage]); + } $("#result-alert").addClass("error"); $("#result-icon").attr("data-icon", "mdi:alert-octagon-outline"); $("#result-text").text(OPTIONS.error); diff --git a/aleksis/core/util/celery_progress.py b/aleksis/core/util/celery_progress.py index ef42f1692..91b5b7168 100644 --- a/aleksis/core/util/celery_progress.py +++ b/aleksis/core/util/celery_progress.py @@ -155,7 +155,8 @@ def recorded_task(orig: Optional[Callable] = None, **kwargs) -> Union[Callable, @wraps(orig) def _inject_recorder(task, *args, **kwargs): recorder = ProgressRecorder(task) - return orig(*args, **kwargs, recorder=recorder) + orig(*args, **kwargs, recorder=recorder) + return recorder._messages # Force bind to True because _inject_recorder needs the Task object kwargs["bind"] = True -- GitLab