Release v1.0.4: fix TheTVDB search ID parsing.
Parse series-76320 style search hits from TheTVDB v4, document Gear Lever Forgejo setup, and adjust AppImage build metadata for update detection. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
+28
-4
@@ -4,6 +4,7 @@ TheTVDB API v4 client (read-only). Uses stdlib urllib — no extra dependencies.
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import re
|
||||
import urllib.error
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
@@ -42,6 +43,29 @@ class TvdbError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def _parse_series_id(item: dict[str, Any]) -> Optional[int]:
|
||||
"""Extract numeric series id from a TheTVDB v4 search hit."""
|
||||
tvdb_id = item.get("tvdb_id")
|
||||
if tvdb_id is not None:
|
||||
try:
|
||||
return int(tvdb_id)
|
||||
except (TypeError, ValueError):
|
||||
pass
|
||||
|
||||
raw_id = item.get("id")
|
||||
if raw_id is None:
|
||||
return None
|
||||
if isinstance(raw_id, int):
|
||||
return raw_id
|
||||
if isinstance(raw_id, str):
|
||||
if raw_id.isdigit():
|
||||
return int(raw_id)
|
||||
m = re.match(r"^series-(\d+)$", raw_id, re.IGNORECASE)
|
||||
if m:
|
||||
return int(m.group(1))
|
||||
return None
|
||||
|
||||
|
||||
class TvdbClient:
|
||||
def __init__(self, api_key: str, pin: str = ""):
|
||||
self.api_key = api_key.strip()
|
||||
@@ -112,11 +136,11 @@ class TvdbClient:
|
||||
)
|
||||
results: list[TvdbSeries] = []
|
||||
for item in payload.get("data") or []:
|
||||
if item.get("type") != "series":
|
||||
item_type = item.get("type") or item.get("primary_type")
|
||||
if item_type and item_type != "series":
|
||||
continue
|
||||
try:
|
||||
series_id = int(item["id"])
|
||||
except (KeyError, TypeError, ValueError):
|
||||
series_id = _parse_series_id(item)
|
||||
if series_id is None:
|
||||
continue
|
||||
year = item.get("year")
|
||||
if year is not None:
|
||||
|
||||
Reference in New Issue
Block a user