From d2dd855cd237c44ad804f72b5832209df08b8445 Mon Sep 17 00:00:00 2001 From: Will Miao Date: Sat, 7 Nov 2026 10:54:21 +0800 Subject: [PATCH] fix(delete): reset stale cancellation before bulk delete --- py/services/model_scanner.py | 4 +++- tests/services/test_model_scanner.py | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/py/services/model_scanner.py b/py/services/model_scanner.py index 9db8014c..37f3ca22 100644 --- a/py/services/model_scanner.py +++ b/py/services/model_scanner.py @@ -5048,7 +5048,9 @@ class ModelScanner: 'error': 'No file paths provided for deletion', 'results': [] } - + + self.reset_cancellation() + # Keep track of success and failures results = [] total_deleted = 0 diff --git a/tests/services/test_model_scanner.py b/tests/services/test_model_scanner.py index 91c76d85..5ca3147c 100644 --- a/tests/services/test_model_scanner.py +++ b/tests/services/test_model_scanner.py @@ -1645,6 +1645,27 @@ async def test_bulk_delete_merge_failure_falls_back_to_batch_ids( assert sorted(staged_files) == ["one.txt", "two.txt"] +@pytest.mark.asyncio +async def test_bulk_delete_resets_cancellation_from_an_earlier_operation(tmp_path: Path): + """A new delete must not inherit an earlier operation's cancellation flag.""" + root = tmp_path / "loras" + root.mkdir() + first = root / "one.txt" + first.write_text("one", encoding="utf-8") + second = root / "two.txt" + second.write_text("two", encoding="utf-8") + scanner = _make_bulk_scanner(root, [first, second]) + scanner.cancel_task() + + result = await scanner.bulk_delete_models([str(first), str(second)]) + + assert result["success"] is True + assert result["status"] == "success" + assert result["total_deleted"] == 2 + assert not first.exists() + assert not second.exists() + + @pytest.mark.asyncio async def test_bulk_delete_cancelled_after_one_staged_batch_present( tmp_path: Path, monkeypatch