fix(updates): avoid caching failed civitai lookups

This commit is contained in:
pixelpaws
2025-10-15 16:00:23 +08:00
parent ee0d241c75
commit 3bb240d3c1

View File

@@ -222,6 +222,7 @@ class ModelUpdateService:
should_fetch = force_refresh or not existing or self._is_stale(existing, now) should_fetch = force_refresh or not existing or self._is_stale(existing, now)
# release lock during network request # release lock during network request
fetched_versions: List[int] | None = None fetched_versions: List[int] | None = None
refresh_succeeded = False
if metadata_provider and should_fetch: if metadata_provider and should_fetch:
try: try:
response = await metadata_provider.get_model_versions(model_id) response = await metadata_provider.get_model_versions(model_id)
@@ -236,7 +237,11 @@ class ModelUpdateService:
exc_info=True, exc_info=True,
) )
else: else:
fetched_versions = self._extract_version_ids(response) if response is not None:
extracted = self._extract_version_ids(response)
if extracted is not None:
fetched_versions = extracted
refresh_succeeded = True
async with self._lock: async with self._lock:
existing = self._get_record(model_type, model_id) existing = self._get_record(model_type, model_id)
@@ -256,11 +261,11 @@ class ModelUpdateService:
version_ids = ( version_ids = (
fetched_versions fetched_versions
if fetched_versions is not None if refresh_succeeded
else (list(existing.version_ids) if existing else []) else (list(existing.version_ids) if existing else [])
) )
largest = max(version_ids) if version_ids else None largest = max(version_ids) if version_ids else None
last_checked = now if fetched_versions is not None else ( last_checked = now if refresh_succeeded else (
existing.last_checked_at if existing else None existing.last_checked_at if existing else None
) )
record = ModelUpdateRecord( record = ModelUpdateRecord(
@@ -315,12 +320,14 @@ class ModelUpdateService:
] ]
return sorted(dict.fromkeys(normalized)) return sorted(dict.fromkeys(normalized))
def _extract_version_ids(self, response) -> List[int]: def _extract_version_ids(self, response) -> Optional[List[int]]:
if not isinstance(response, Mapping): if not isinstance(response, Mapping):
return [] return None
versions = response.get("modelVersions") versions = response.get("modelVersions")
if not isinstance(versions, Iterable): if versions is None:
return [] return []
if not isinstance(versions, Iterable):
return None
normalized = [] normalized = []
for entry in versions: for entry in versions:
if isinstance(entry, Mapping): if isinstance(entry, Mapping):