diff --git a/app/internal/models.py b/app/internal/models.py index 00f69b9..771d144 100644 --- a/app/internal/models.py +++ b/app/internal/models.py @@ -133,7 +133,7 @@ class BaseSource(BaseModel): title: str size: int # in bytes publish_date: datetime - info_url: str + info_url: Optional[str] indexer_flags: list[str] download_url: Optional[str] = None magnet_url: Optional[str] = None diff --git a/app/internal/prowlarr/prowlarr.py b/app/internal/prowlarr/prowlarr.py index a9fe05f..e485c57 100644 --- a/app/internal/prowlarr/prowlarr.py +++ b/app/internal/prowlarr/prowlarr.py @@ -169,44 +169,51 @@ async def query_prowlarr( sources: list[ProwlarrSource] = [] for result in search_results: - if result["protocol"] not in ["torrent", "usenet"]: - print("Skipping source with unknown protocol", result["protocol"]) - continue - if result["protocol"] == "torrent": - sources.append( - TorrentSource( - protocol="torrent", - guid=result["guid"], - indexer_id=result["indexerId"], - indexer=result["indexer"], - title=result["title"], - seeders=result.get("seeders", 0), - leechers=result.get("leechers", 0), - size=result.get("size", 0), - info_url=result["infoUrl"], - indexer_flags=[x.lower() for x in result.get("indexerFlags", [])], - download_url=result.get("downloadUrl"), - magnet_url=result.get("magnetUrl"), - publish_date=datetime.fromisoformat(result["publishDate"]), + try: + if result["protocol"] not in ["torrent", "usenet"]: + print("Skipping source with unknown protocol", result["protocol"]) + continue + if result["protocol"] == "torrent": + sources.append( + TorrentSource( + protocol="torrent", + guid=result["guid"], + indexer_id=result["indexerId"], + indexer=result["indexer"], + title=result["title"], + seeders=result.get("seeders", 0), + leechers=result.get("leechers", 0), + size=result.get("size", 0), + info_url=result.get("infoUrl"), + indexer_flags=[ + x.lower() for x in result.get("indexerFlags", []) + ], + download_url=result.get("downloadUrl"), + magnet_url=result.get("magnetUrl"), + publish_date=datetime.fromisoformat(result["publishDate"]), + ) ) - ) - else: - sources.append( - UsenetSource( - protocol="usenet", - guid=result["guid"], - indexer_id=result["indexerId"], - indexer=result["indexer"], - title=result["title"], - grabs=result.get("grabs"), - size=result.get("size", 0), - info_url=result["infoUrl"], - indexer_flags=[x.lower() for x in result.get("indexerFlags", [])], - download_url=result.get("downloadUrl"), - magnet_url=result.get("magnetUrl"), - publish_date=datetime.fromisoformat(result["publishDate"]), + else: + sources.append( + UsenetSource( + protocol="usenet", + guid=result["guid"], + indexer_id=result["indexerId"], + indexer=result["indexer"], + title=result["title"], + grabs=result.get("grabs"), + size=result.get("size", 0), + info_url=result.get("infoUrl"), + indexer_flags=[ + x.lower() for x in result.get("indexerFlags", []) + ], + download_url=result.get("downloadUrl"), + magnet_url=result.get("magnetUrl"), + publish_date=datetime.fromisoformat(result["publishDate"]), + ) ) - ) + except KeyError as e: + logger.error("Failed to parse source: %s. KeyError: %s", result, e) prowlarr_source_cache.set(sources, query) diff --git a/templates/wishlist_page/sources.html b/templates/wishlist_page/sources.html index a2f22cf..e49cbfc 100644 --- a/templates/wishlist_page/sources.html +++ b/templates/wishlist_page/sources.html @@ -44,7 +44,9 @@