Files
FastAnime/viu_media/cli/utils/search.py
2025-08-18 01:08:27 +03:00

37 lines
1.2 KiB
Python

"""Search functionality."""
from viu_media.core.utils.fuzzy import fuzz
from viu_media.core.utils.normalizer import normalize_title
from viu_media.libs.provider.anime.types import SearchResult, ProviderName
from viu_media.libs.media_api.types import MediaItem
def find_best_match_title(
provider_results_map: dict[str, SearchResult],
provider: ProviderName,
media_item: MediaItem,
) -> str:
"""Find the best match title using fuzzy matching for both the english AND romaji title.
Parameters:
provider_results_map (dict[str, SearchResult]): The map of provider results.
provider (ProviderName): The provider name from the config.
media_item (MediaItem): The media item to match.
Returns:
str: The best match title.
"""
return max(
provider_results_map.keys(),
key=lambda p_title: max(
fuzz.ratio(
normalize_title(p_title, provider.value).lower(),
(media_item.title.romaji or "").lower(),
),
fuzz.ratio(
normalize_title(p_title, provider.value).lower(),
(media_item.title.english or "").lower(),
),
),
)