Cleanup composite provider

This commit is contained in:
Zoe Roux 2025-05-09 01:21:52 +02:00
parent 4cd11152c8
commit 819dbf3aab
No known key found for this signature in database
3 changed files with 38 additions and 41 deletions

View File

@ -4,7 +4,7 @@ from langcodes import Language
from ..models.movie import Movie, SearchMovie
from ..models.serie import SearchSerie, Serie
from .provider import Provider, ProviderError
from .provider import Provider
class CompositeProvider(Provider):
@ -27,24 +27,6 @@ class CompositeProvider(Provider):
async def get_movie(self, external_id: dict[str, str]) -> Movie | None:
return await self._themoviedb.get_movie(external_id)
async def find_movie(
self, title: str, year: int | None, external_id: dict[str, str]
) -> Movie:
ret = await self.get_movie(external_id)
if ret is not None:
return ret
search = await self.search_movies(title, year, language=[])
if not any(search):
raise ProviderError(
f"Couldn't find a movie with title {title}. (year: {year}"
)
ret = await self.get_movie(
{k: v.data_id for k, v in search[0].external_id.items()}
)
if not ret:
raise ValueError()
return ret
@override
async def search_series(
self, title: str, year: int | None, *, language: list[Language]
@ -58,21 +40,3 @@ class CompositeProvider(Provider):
return None
# TODO: complete metadata with info from tmdb
return ret
async def find_serie(
self, title: str, year: int | None, external_id: dict[str, str]
) -> Serie:
ret = await self.get_serie(external_id)
if ret is not None:
return ret
search = await self.search_series(title, year, language=[])
if not any(search):
raise ProviderError(
f"Couldn't find a serie with title {title}. (year: {year}"
)
ret = await self.get_serie(
{k: v.data_id for k, v in search[0].external_id.items()}
)
if not ret:
raise ValueError()
return ret

View File

@ -35,6 +35,42 @@ class Provider(ABC):
async def get_serie(self, external_id: dict[str, str]) -> Serie | None:
raise NotImplementedError
async def find_movie(
self, title: str, year: int | None, external_id: dict[str, str]
) -> Movie:
ret = await self.get_movie(external_id)
if ret is not None:
return ret
search = await self.search_movies(title, year, language=[])
if not any(search):
raise ProviderError(
f"Couldn't find a movie with title {title}. (year: {year}"
)
ret = await self.get_movie(
{k: v.data_id for k, v in search[0].external_id.items()}
)
if not ret:
raise ValueError()
return ret
async def find_serie(
self, title: str, year: int | None, external_id: dict[str, str]
) -> Serie:
ret = await self.get_serie(external_id)
if ret is not None:
return ret
search = await self.search_series(title, year, language=[])
if not any(search):
raise ProviderError(
f"Couldn't find a serie with title {title}. (year: {year}"
)
ret = await self.get_serie(
{k: v.data_id for k, v in search[0].external_id.items()}
)
if not ret:
raise ValueError()
return ret
class ProviderError(RuntimeError):
def __init__(self, *args: object) -> None:

View File

@ -1,8 +1,7 @@
import asyncio
import os
from collections.abc import Generator
from datetime import datetime, timedelta
from itertools import accumulate, zip_longest
from datetime import datetime
from logging import getLogger
from statistics import mean
from typing import Any, cast, override
@ -10,8 +9,6 @@ from typing import Any, cast, override
from aiohttp import ClientSession
from langcodes import Language
from matcher.cache import cache
from ..models.collection import Collection, CollectionTranslation
from ..models.entry import Entry, EntryTranslation
from ..models.genre import Genre