Fix cache title hydration
This commit is contained in:
@@ -76,6 +76,40 @@ def _extract_title_year_from_payload(payload_json: Optional[str]) -> tuple[Optio
|
||||
return _normalize_title_value(title), _normalize_year_value(year)
|
||||
|
||||
|
||||
def _extract_tmdb_from_payload(payload_json: Optional[str]) -> tuple[Optional[int], Optional[str]]:
|
||||
if not payload_json:
|
||||
return None, None
|
||||
try:
|
||||
payload = json.loads(payload_json)
|
||||
except (TypeError, json.JSONDecodeError):
|
||||
return None, None
|
||||
if not isinstance(payload, dict):
|
||||
return None, None
|
||||
media = payload.get("media") or {}
|
||||
if not isinstance(media, dict):
|
||||
media = {}
|
||||
tmdb_id = (
|
||||
media.get("tmdbId")
|
||||
or payload.get("tmdbId")
|
||||
or payload.get("tmdb_id")
|
||||
or media.get("externalServiceId")
|
||||
or payload.get("externalServiceId")
|
||||
)
|
||||
media_type = (
|
||||
media.get("mediaType")
|
||||
or payload.get("mediaType")
|
||||
or payload.get("media_type")
|
||||
or payload.get("type")
|
||||
)
|
||||
try:
|
||||
tmdb_id = int(tmdb_id) if tmdb_id is not None else None
|
||||
except (TypeError, ValueError):
|
||||
tmdb_id = None
|
||||
if isinstance(media_type, str):
|
||||
media_type = media_type.strip().lower() or None
|
||||
return tmdb_id, media_type
|
||||
|
||||
|
||||
def init_db() -> None:
|
||||
with _connect() as conn:
|
||||
conn.execute(
|
||||
@@ -874,6 +908,34 @@ def get_request_cache_overview(limit: int = 50) -> list[Dict[str, Any]]:
|
||||
return results
|
||||
|
||||
|
||||
def get_request_cache_missing_titles(limit: int = 200) -> list[Dict[str, Any]]:
|
||||
limit = max(1, min(limit, 500))
|
||||
with _connect() as conn:
|
||||
rows = conn.execute(
|
||||
"""
|
||||
SELECT request_id, payload_json
|
||||
FROM requests_cache
|
||||
WHERE title IS NULL OR TRIM(title) = '' OR LOWER(title) = 'untitled'
|
||||
ORDER BY updated_at DESC, request_id DESC
|
||||
LIMIT ?
|
||||
""",
|
||||
(limit,),
|
||||
).fetchall()
|
||||
results: list[Dict[str, Any]] = []
|
||||
for row in rows:
|
||||
payload_json = row[1]
|
||||
tmdb_id, media_type = _extract_tmdb_from_payload(payload_json)
|
||||
results.append(
|
||||
{
|
||||
"request_id": row[0],
|
||||
"payload_json": payload_json,
|
||||
"tmdb_id": tmdb_id,
|
||||
"media_type": media_type,
|
||||
}
|
||||
)
|
||||
return results
|
||||
|
||||
|
||||
def get_request_cache_count() -> int:
|
||||
with _connect() as conn:
|
||||
row = conn.execute("SELECT COUNT(*) FROM requests_cache").fetchone()
|
||||
|
||||
Reference in New Issue
Block a user