mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-25 15:15:44 -03:00
fix: skip redundant hydration in metadata sync service
This commit is contained in:
@@ -153,7 +153,12 @@ class MetadataSyncService:
|
|||||||
model_data: Dict[str, Any],
|
model_data: Dict[str, Any],
|
||||||
update_cache_func: Callable[[str, str, Dict[str, Any]], Awaitable[bool]],
|
update_cache_func: Callable[[str, str, Dict[str, Any]], Awaitable[bool]],
|
||||||
) -> tuple[bool, Optional[str]]:
|
) -> tuple[bool, Optional[str]]:
|
||||||
"""Fetch metadata for a model and update both disk and cache state."""
|
"""Fetch metadata for a model and update both disk and cache state.
|
||||||
|
|
||||||
|
Callers should hydrate ``model_data`` via ``MetadataManager.hydrate_model_data``
|
||||||
|
before invoking this method so that the persisted payload retains all known
|
||||||
|
metadata fields.
|
||||||
|
"""
|
||||||
|
|
||||||
if not isinstance(model_data, dict):
|
if not isinstance(model_data, dict):
|
||||||
error = f"Invalid model_data type: {type(model_data)}"
|
error = f"Invalid model_data type: {type(model_data)}"
|
||||||
@@ -177,8 +182,6 @@ class MetadataSyncService:
|
|||||||
|
|
||||||
civitai_metadata, error = await metadata_provider.get_model_by_hash(sha256)
|
civitai_metadata, error = await metadata_provider.get_model_by_hash(sha256)
|
||||||
|
|
||||||
await self._metadata_manager.hydrate_model_data(model_data)
|
|
||||||
|
|
||||||
if not civitai_metadata:
|
if not civitai_metadata:
|
||||||
if error == "Model not found":
|
if error == "Model not found":
|
||||||
model_data["from_civitai"] = False
|
model_data["from_civitai"] = False
|
||||||
|
|||||||
@@ -124,6 +124,9 @@ async def test_fetch_and_update_model_success_updates_cache(tmp_path):
|
|||||||
}
|
}
|
||||||
update_cache = AsyncMock(return_value=True)
|
update_cache = AsyncMock(return_value=True)
|
||||||
|
|
||||||
|
await hydrate(model_data)
|
||||||
|
helpers.metadata_manager.hydrate_model_data.reset_mock()
|
||||||
|
|
||||||
ok, error = await helpers.service.fetch_and_update_model(
|
ok, error = await helpers.service.fetch_and_update_model(
|
||||||
sha256="abc",
|
sha256="abc",
|
||||||
file_path=str(model_path),
|
file_path=str(model_path),
|
||||||
@@ -136,7 +139,7 @@ async def test_fetch_and_update_model_success_updates_cache(tmp_path):
|
|||||||
assert model_data["civitai_deleted"] is False
|
assert model_data["civitai_deleted"] is False
|
||||||
assert "civitai" in model_data
|
assert "civitai" in model_data
|
||||||
|
|
||||||
helpers.metadata_manager.hydrate_model_data.assert_awaited_once()
|
helpers.metadata_manager.hydrate_model_data.assert_not_awaited()
|
||||||
assert model_data["hydrated"] is True
|
assert model_data["hydrated"] is True
|
||||||
|
|
||||||
metadata_path = str(model_path.with_suffix(".metadata.json"))
|
metadata_path = str(model_path.with_suffix(".metadata.json"))
|
||||||
@@ -167,6 +170,9 @@ async def test_fetch_and_update_model_handles_missing_remote_metadata(tmp_path):
|
|||||||
"file_path": str(model_path),
|
"file_path": str(model_path),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await hydrate(model_data)
|
||||||
|
helpers.metadata_manager.hydrate_model_data.reset_mock()
|
||||||
|
|
||||||
ok, error = await helpers.service.fetch_and_update_model(
|
ok, error = await helpers.service.fetch_and_update_model(
|
||||||
sha256="missing",
|
sha256="missing",
|
||||||
file_path=str(model_path),
|
file_path=str(model_path),
|
||||||
@@ -179,7 +185,7 @@ async def test_fetch_and_update_model_handles_missing_remote_metadata(tmp_path):
|
|||||||
assert model_data["from_civitai"] is False
|
assert model_data["from_civitai"] is False
|
||||||
assert model_data["civitai_deleted"] is True
|
assert model_data["civitai_deleted"] is True
|
||||||
|
|
||||||
helpers.metadata_manager.hydrate_model_data.assert_awaited_once()
|
helpers.metadata_manager.hydrate_model_data.assert_not_awaited()
|
||||||
assert model_data["hydrated"] is True
|
assert model_data["hydrated"] is True
|
||||||
|
|
||||||
helpers.metadata_manager.save_metadata.assert_awaited_once()
|
helpers.metadata_manager.save_metadata.assert_awaited_once()
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ def test_metadata_sync_fetch_and_update_updates_cache(tmp_path: Path) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
model_data = {"sha256": "abc", "file_path": str(tmp_path / "model.safetensors")}
|
model_data = {"sha256": "abc", "file_path": str(tmp_path / "model.safetensors")}
|
||||||
|
asyncio.run(manager.hydrate_model_data(model_data))
|
||||||
success, error = asyncio.run(
|
success, error = asyncio.run(
|
||||||
service.fetch_and_update_model(
|
service.fetch_and_update_model(
|
||||||
sha256="abc",
|
sha256="abc",
|
||||||
|
|||||||
Reference in New Issue
Block a user