fix: use async CLI Apps catalog refresh

Replace the manual thread-based catalog refresh with an asyncio task and async HTTP catalog fetches so the Settings route stays within the async WebUI model.
This commit is contained in:
chengyongru
2026-06-22 17:14:13 +08:00
committed by Xubin Ren
parent dd2cb4ca91
commit a67285e6a2
5 changed files with 96 additions and 48 deletions
+21 -8
View File
@@ -1,5 +1,6 @@
from __future__ import annotations
import asyncio
from typing import Any
from nanobot.webui import cli_apps_api
@@ -60,9 +61,13 @@ def test_cli_apps_payload_uses_cache_and_marks_refresh_pending(monkeypatch) -> N
manager = _FakeManager(fresh=False)
refreshes = []
monkeypatch.setattr(cli_apps_api, "_manager", lambda: manager)
monkeypatch.setattr(cli_apps_api, "_start_catalog_refresh", lambda: refreshes.append(True) or True)
monkeypatch.setattr(
cli_apps_api,
"_start_catalog_refresh",
lambda _manager: refreshes.append(True) or True,
)
payload = cli_apps_api.cli_apps_payload()
payload = asyncio.run(cli_apps_api.cli_apps_payload())
assert manager.payload_calls == [True]
assert manager.fresh_checks == [True]
@@ -95,9 +100,13 @@ def test_cli_apps_payload_skips_refresh_when_cache_is_fresh(monkeypatch) -> None
)
refreshes = []
monkeypatch.setattr(cli_apps_api, "_manager", lambda: manager)
monkeypatch.setattr(cli_apps_api, "_start_catalog_refresh", lambda: refreshes.append(True) or True)
monkeypatch.setattr(
cli_apps_api,
"_start_catalog_refresh",
lambda _manager: refreshes.append(True) or True,
)
payload = cli_apps_api.cli_apps_payload()
payload = asyncio.run(cli_apps_api.cli_apps_payload())
assert manager.payload_calls == [True]
assert manager.fresh_checks == [True]
@@ -131,9 +140,13 @@ def test_cli_apps_payload_refreshes_when_optional_cache_is_stale(monkeypatch) ->
)
refreshes = []
monkeypatch.setattr(cli_apps_api, "_manager", lambda: manager)
monkeypatch.setattr(cli_apps_api, "_start_catalog_refresh", lambda: refreshes.append(True) or True)
monkeypatch.setattr(
cli_apps_api,
"_start_catalog_refresh",
lambda _manager: refreshes.append(True) or True,
)
payload = cli_apps_api.cli_apps_payload()
payload = asyncio.run(cli_apps_api.cli_apps_payload())
assert manager.payload_calls == [True]
assert manager.fresh_checks == [True]
@@ -145,9 +158,9 @@ def test_cli_apps_payload_refreshes_when_optional_cache_is_stale(monkeypatch) ->
def test_cli_apps_payload_reports_not_pending_when_refresh_is_throttled(monkeypatch) -> None:
manager = _FakeManager(fresh=False)
monkeypatch.setattr(cli_apps_api, "_manager", lambda: manager)
monkeypatch.setattr(cli_apps_api, "_start_catalog_refresh", lambda: False)
monkeypatch.setattr(cli_apps_api, "_start_catalog_refresh", lambda _manager: False)
payload = cli_apps_api.cli_apps_payload()
payload = asyncio.run(cli_apps_api.cli_apps_payload())
assert manager.payload_calls == [True]
assert manager.fresh_checks == [True]