refactor: update metadata fetching methods to improve cache handling and streamline parameter usage

This commit is contained in:
g0ldyy
2026-01-08 15:32:48 +01:00
parent cbc13f7630
commit 1011cd1419
3 changed files with 31 additions and 13 deletions
+7 -8
View File
@@ -193,8 +193,8 @@ async def stream(
} }
# Check if metadata is already cached # Check if metadata is already cached
cached_metadata = await metadata_scraper.get_cached( cached_metadata = await metadata_scraper.get_from_cache_by_media_id(
id, season if "kitsu" not in media_id else 1, episode media_id, id, season, episode
) )
# Quick check for "fresh" cached torrents to decide if we need to re-scrape. # Quick check for "fresh" cached torrents to decide if we need to re-scrape.
@@ -240,7 +240,7 @@ async def stream(
cache_is_stale = fresh_cached_count == 0 cache_is_stale = fresh_cached_count == 0
# If both metadata and fresh torrents are cached, skip lock entirely # If both metadata and fresh torrents are cached, skip lock entirely
if cached_metadata is not None and fresh_cached_count > 0: if cached_metadata is not None and not cache_is_stale:
logger.log("SCRAPER", f"🚀 Fast path: using cached data for {media_id}") logger.log("SCRAPER", f"🚀 Fast path: using cached data for {media_id}")
metadata, aliases = cached_metadata[0], cached_metadata[1] metadata, aliases = cached_metadata[0], cached_metadata[1]
# Variables for fast path # Variables for fast path
@@ -265,14 +265,14 @@ async def stream(
waited_for_other_scrape = True waited_for_other_scrape = True
# After waiting, re-check cached metadata # After waiting, re-check cached metadata
cached_metadata = await metadata_scraper.get_cached( cached_metadata = await metadata_scraper.get_from_cache_by_media_id(
id, season if "kitsu" not in media_id else 1, episode media_id, id, season, episode
) )
if lock_acquired: if lock_acquired:
# We have the lock, scrape metadata normally # We have the lock, scrape metadata normally
metadata, aliases = await metadata_scraper.fetch_metadata_and_aliases( metadata, aliases = await metadata_scraper.fetch_metadata_and_aliases(
media_type, media_id media_type, media_id, id, season, episode
) )
elif cached_metadata is not None: elif cached_metadata is not None:
# Use cached metadata after waiting # Use cached metadata after waiting
@@ -280,7 +280,7 @@ async def stream(
else: else:
# No cached metadata available, fallback to scraping # No cached metadata available, fallback to scraping
metadata, aliases = await metadata_scraper.fetch_metadata_and_aliases( metadata, aliases = await metadata_scraper.fetch_metadata_and_aliases(
media_type, media_id media_type, media_id, id, season, episode
) )
if metadata is None: if metadata is None:
if lock_acquired and scrape_lock: if lock_acquired and scrape_lock:
@@ -308,7 +308,6 @@ async def stream(
logger.log("SCRAPER", f"🔍 Starting search for {log_title}") logger.log("SCRAPER", f"🔍 Starting search for {log_title}")
id, season, episode = parse_media_id(media_type, media_id)
media_only_id = id media_only_id = id
debrid_service = config["debridService"] debrid_service = config["debridService"]
+2 -2
View File
@@ -328,7 +328,7 @@ class BackgroundScraperWorker:
async def _scrape_movie(self, media_id: str, title: str, year: int): async def _scrape_movie(self, media_id: str, title: str, year: int):
metadata, aliases = await self.metadata_scraper.fetch_aliases_with_metadata( metadata, aliases = await self.metadata_scraper.fetch_aliases_with_metadata(
"movie", media_id, title, year "movie", media_id, title, year, id=media_id
) )
manager = TorrentManager( manager = TorrentManager(
@@ -359,7 +359,7 @@ class BackgroundScraperWorker:
series_media_id = f"{media_id}:1:1" series_media_id = f"{media_id}:1:1"
metadata, aliases = await self.metadata_scraper.fetch_aliases_with_metadata( metadata, aliases = await self.metadata_scraper.fetch_aliases_with_metadata(
"series", series_media_id, title, year, year_end "series", series_media_id, title, year, year_end, id=media_id
) )
for episode in episodes: for episode in episodes:
+22 -3
View File
@@ -41,8 +41,25 @@ class MetadataScraper:
else _CACHE_INSERT_POSTGRESQL else _CACHE_INSERT_POSTGRESQL
) )
async def fetch_metadata_and_aliases(self, media_type: str, media_id: str): async def get_from_cache_by_media_id(
id, season, episode = parse_media_id(media_type, media_id) self, media_id: str, id: str, season: int | None, episode: int | None
):
provider = self._extract_provider(media_id)
cache_id = f"{provider}:{id}" if provider else id
cache_season = 1 if provider == "kitsu" else season
return await self.get_cached(cache_id, cache_season, episode)
async def fetch_metadata_and_aliases(
self,
media_type: str,
media_id: str,
id: str | None = None,
season: int | None = None,
episode: int | None = None,
):
if id is None:
id, season, episode = parse_media_id(media_type, media_id)
provider = self._extract_provider(media_id) provider = self._extract_provider(media_id)
cache_id = f"{provider}:{id}" if provider else id cache_id = f"{provider}:{id}" if provider else id
@@ -144,12 +161,14 @@ class MetadataScraper:
title: str, title: str,
year: int, year: int,
year_end: int = None, year_end: int = None,
id: str | None = None,
): ):
""" """
Fetch only aliases for media when we already have the metadata from another source. Fetch only aliases for media when we already have the metadata from another source.
This method will cache the provided metadata along with the scraped aliases. This method will cache the provided metadata along with the scraped aliases.
""" """
id, _, _ = parse_media_id(media_type, media_id) if id is None:
id, _, _ = parse_media_id(media_type, media_id)
provider = self._extract_provider(media_id) provider = self._extract_provider(media_id)
cache_id = f"{provider}:{id}" if provider else id cache_id = f"{provider}:{id}" if provider else id