Add serie search

This commit is contained in:
Zoe Roux 2025-05-08 04:28:59 +02:00
parent ff8455e6ec
commit 8269546dd0
No known key found for this signature in database

View File

@ -16,7 +16,7 @@ from ..models.genre import Genre
from ..models.metadataid import EpisodeId, MetadataId
from ..models.movie import Movie, MovieStatus, MovieTranslation, SearchMovie
from ..models.season import Season, SeasonTranslation
from ..models.serie import Serie, SerieStatus, SerieTranslation
from ..models.serie import SearchSerie, Serie, SerieStatus, SerieTranslation
from ..models.staff import Character, Person, Role, Staff
from ..models.studio import Studio, StudioTranslation
from ..utils import clean, to_slug
@ -201,6 +201,40 @@ class TheMovieDatabase(Provider):
staff=[self._map_staff(x) for x in movie["credits"]["cast"]],
)
@override
async def search_series(
self, title: str, year: int | None, *, language: list[Language]
) -> list[SearchSerie]:
search = (
await self._get(
"search/tv",
params={
"query": title,
"year": year,
"languages": [str(x) for x in language],
},
)
)["results"]
search = self._sort_search(search, title, year)
return [
SearchSerie(
slug=to_slug(x["name"]),
name=x["name"],
description=x["overview"],
start_air=datetime.strptime(x["first_air_date"], "%Y-%m-%d").date(),
end_air=None,
poster=self._image_path + x["poster_path"],
original_language=Language.get(x["original_language"]),
external_id={
self.name: MetadataId(
data_id=x["id"],
link=f"https://www.themoviedb.org/tv/{x['id']}",
)
},
)
for x in search
]
@cache(ttl=timedelta(days=1))
async def identify_show(
self,
@ -350,27 +384,6 @@ class TheMovieDatabase(Provider):
)
return ret
@cache(ttl=timedelta(days=1))
async def search_show(self, name: str, year: Optional[int]) -> PartialShow:
search_results = (
await self._get("search/tv", params={"query": name, "year": year})
)["results"]
if len(search_results) == 0:
raise ProviderError(f"No result for a tv show named: {name}")
search = self._sort_search(search_results, name, year)
show_id = search["id"]
return PartialShow(
name=search["name"],
original_language=search["original_language"],
external_id={
self.name: MetadataID(
show_id, f"https://www.themoviedb.org/tv/{show_id}"
)
},
)
async def search_episode(
self,
name: str,
@ -687,7 +700,7 @@ class TheMovieDatabase(Provider):
path: str,
*,
params: dict[str, Any] = {},
not_found_fail: Optional[str] = None,
not_found_fail: str | None = None,
):
params = {k: v for k, v in params.items() if v is not None}
async with self._client.get(