diff --git a/py/services/metadata_sync_service.py b/py/services/metadata_sync_service.py index 75d912f7..738f3b86 100644 --- a/py/services/metadata_sync_service.py +++ b/py/services/metadata_sync_service.py @@ -153,7 +153,12 @@ class MetadataSyncService: model_data: Dict[str, Any], update_cache_func: Callable[[str, str, Dict[str, Any]], Awaitable[bool]], ) -> 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): 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) - await self._metadata_manager.hydrate_model_data(model_data) - if not civitai_metadata: if error == "Model not found": model_data["from_civitai"] = False diff --git a/tests/services/test_metadata_sync_service.py b/tests/services/test_metadata_sync_service.py index 03af8d86..470259f6 100644 --- a/tests/services/test_metadata_sync_service.py +++ b/tests/services/test_metadata_sync_service.py @@ -124,6 +124,9 @@ async def test_fetch_and_update_model_success_updates_cache(tmp_path): } 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( sha256="abc", 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 "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 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), } + await hydrate(model_data) + helpers.metadata_manager.hydrate_model_data.reset_mock() + ok, error = await helpers.service.fetch_and_update_model( sha256="missing", 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["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 helpers.metadata_manager.save_metadata.assert_awaited_once() diff --git a/tests/services/test_route_support_services.py b/tests/services/test_route_support_services.py index bde7abf2..544333ec 100644 --- a/tests/services/test_route_support_services.py +++ b/tests/services/test_route_support_services.py @@ -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")} + asyncio.run(manager.hydrate_model_data(model_data)) success, error = asyncio.run( service.fetch_and_update_model( sha256="abc",