mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-21 21:22:11 -03:00
feat(metadata): improve civitai deletion detection logic
- Track when Civitai API returns "Model not found" for default provider - Use dedicated flag instead of error string comparison for deletion detection - Ensure archive-sourced models don't get marked as deleted - Add test coverage for archive source deletion flag behavior - Fix deletion flag logic to properly handle provider fallback scenarios
This commit is contained in:
@@ -179,6 +179,39 @@ async def test_fetch_and_update_model_success_updates_cache(tmp_path):
|
||||
update_cache.assert_awaited_once()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_fetch_and_update_model_keeps_deleted_flag_false_for_archive_source(tmp_path):
|
||||
helpers = build_service()
|
||||
|
||||
civitai_payload = {
|
||||
"source": "archive_db",
|
||||
"model": {"name": "Recovered", "description": "", "tags": ["tag"]},
|
||||
"images": [],
|
||||
"baseModel": "sd15",
|
||||
}
|
||||
helpers.default_provider.get_model_by_hash.return_value = (civitai_payload, None)
|
||||
|
||||
model_path = tmp_path / "model.safetensors"
|
||||
model_data = {
|
||||
"model_name": "Local",
|
||||
"folder": "root",
|
||||
"file_path": str(model_path),
|
||||
}
|
||||
update_cache = AsyncMock(return_value=True)
|
||||
|
||||
ok, error = await helpers.service.fetch_and_update_model(
|
||||
sha256="abc",
|
||||
file_path=str(model_path),
|
||||
model_data=model_data,
|
||||
update_cache_func=update_cache,
|
||||
)
|
||||
|
||||
assert ok and error is None
|
||||
assert model_data["metadata_source"] == "archive_db"
|
||||
assert model_data["civitai_deleted"] is False
|
||||
update_cache.assert_awaited_once()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_fetch_and_update_model_handles_missing_remote_metadata(tmp_path):
|
||||
helpers = build_service()
|
||||
@@ -301,6 +334,7 @@ async def test_fetch_and_update_model_prefers_civarchive_for_deleted_models(tmp_
|
||||
civarchive_provider.get_model_by_hash.assert_awaited_once_with("deadbeef")
|
||||
update_cache.assert_awaited()
|
||||
assert model_data["metadata_source"] == "civarchive"
|
||||
assert model_data["civitai_deleted"] is True
|
||||
helpers.metadata_manager.save_metadata.assert_awaited()
|
||||
|
||||
|
||||
@@ -359,6 +393,7 @@ async def test_fetch_and_update_model_falls_back_to_sqlite_after_civarchive_fail
|
||||
assert sqlite_provider.get_model_by_hash.await_count == 1
|
||||
assert model_data["metadata_source"] == "archive_db"
|
||||
assert model_data["db_checked"] is True
|
||||
assert model_data["civitai_deleted"] is True
|
||||
assert provider_selector.await_args_list[0].args == ("civarchive_api",)
|
||||
assert provider_selector.await_args_list[1].args == ("sqlite",)
|
||||
update_cache.assert_awaited()
|
||||
|
||||
Reference in New Issue
Block a user