From 5bc7de8ba3d3f25eb22029860cbea1ad38a88316 Mon Sep 17 00:00:00 2001 From: philippe Date: Mon, 6 Feb 2023 14:21:12 -0500 Subject: [PATCH 1/3] Add test progress delete. --- .../long_callback/app_progress_delete.py | 45 +++++++++++++++++++ .../long_callback/test_basic_long_callback.py | 9 ++++ 2 files changed, 54 insertions(+) create mode 100644 tests/integration/long_callback/app_progress_delete.py diff --git a/tests/integration/long_callback/app_progress_delete.py b/tests/integration/long_callback/app_progress_delete.py new file mode 100644 index 0000000000..2fdf08af61 --- /dev/null +++ b/tests/integration/long_callback/app_progress_delete.py @@ -0,0 +1,45 @@ +from dash import Dash, Input, Output, State, html, clientside_callback +import time + +from tests.integration.long_callback.utils import get_long_callback_manager + +long_callback_manager = get_long_callback_manager() +handle = long_callback_manager.handle + +app = Dash(__name__, long_callback_manager=long_callback_manager) + +app.layout = html.Div( + [ + html.Button("Start", id="start"), + html.Div(id="output"), + html.Div(id="progress-output"), + html.Div(0, id="progress-counter"), + ] +) + +clientside_callback( + "function(_, previous) { return parseInt(previous) + 1;}", + Output("progress-counter", "children"), + Input("progress-output", "children"), + State("progress-counter", "children"), + prevent_initial_call=True, +) + + +@app.callback( + Output("output", "children"), + Input("start", "n_clicks"), + progress=Output("progress-output", "children"), + interval=200, + background=True, + prevent_initial_call=True, +) +def on_bg_progress(set_progress, _): + set_progress("start") + time.sleep(2) + set_progress("stop") + return "done" + + +if __name__ == "__main__": + app.run_server(debug=True) diff --git a/tests/integration/long_callback/test_basic_long_callback.py b/tests/integration/long_callback/test_basic_long_callback.py index c2d04641d1..c82c64ab48 100644 --- a/tests/integration/long_callback/test_basic_long_callback.py +++ b/tests/integration/long_callback/test_basic_long_callback.py @@ -531,3 +531,12 @@ def test_lcbc013_unordered_state_input(dash_duo, manager): dash_duo.find_element("#click").click() dash_duo.wait_for_text_to_equal("#output", "stored") + + +def test_lcbc014_progress_delete(dash_duo, manager): + with setup_long_callback_app(manager, "app_progress_delete") as app: + dash_duo.start_server(app) + dash_duo.find_element("#start").click() + dash_duo.wait_for_text_to_equal("#output", "done") + + assert dash_duo.find_element("#progress-counter").text == "2" From d291f59d538906e7887736908d84d4a313d145aa Mon Sep 17 00:00:00 2001 From: philippe Date: Mon, 6 Feb 2023 14:22:27 -0500 Subject: [PATCH 2/3] Delete progress after fetching it. --- dash/long_callback/managers/celery_manager.py | 1 + dash/long_callback/managers/diskcache_manager.py | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/dash/long_callback/managers/celery_manager.py b/dash/long_callback/managers/celery_manager.py index fba09af65c..b4e0165c8d 100644 --- a/dash/long_callback/managers/celery_manager.py +++ b/dash/long_callback/managers/celery_manager.py @@ -98,6 +98,7 @@ def get_progress(self, key): progress_key = self._make_progress_key(key) progress_data = self.handle.backend.get(progress_key) if progress_data: + self.handle.backend.delete(progress_key) return json.loads(progress_data) return None diff --git a/dash/long_callback/managers/diskcache_manager.py b/dash/long_callback/managers/diskcache_manager.py index c12bafeb98..fea69f37f5 100644 --- a/dash/long_callback/managers/diskcache_manager.py +++ b/dash/long_callback/managers/diskcache_manager.py @@ -127,7 +127,11 @@ def call_job_fn(self, key, job_fn, args, context): def get_progress(self, key): progress_key = self._make_progress_key(key) - return self.handle.get(progress_key) + progress_data = self.handle.get(progress_key) + if progress_data: + self.handle.delete(progress_key) + + return progress_data def result_ready(self, key): return self.handle.get(key) is not None From 19fa5c7fe0b4e69cf2ecf81f11b8f15e6751f297 Mon Sep 17 00:00:00 2001 From: philippe Date: Tue, 7 Feb 2023 09:54:22 -0500 Subject: [PATCH 3/3] Update changelog. --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1650c234ae..40ced996a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to `dash` will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). +## [UNRELEASED] + +## Fixed + +- [#2415](https://github.com/plotly/dash/pull/2415) Fix background callbacks progress not deleted after fetch. + ## [2.8.1] - 2023-01-30 ## Fixed