Fix missing seasons and episodes translations

This commit is contained in:
Zoe Roux 2024-05-14 23:48:15 +02:00
parent 47f364840b
commit e02912119b
No known key found for this signature in database
2 changed files with 13 additions and 14 deletions

View File

@ -9,6 +9,7 @@ from langcodes import Language
from matcher.cache import cache
from ..provider import Provider, ProviderError
from ..utils import normalize_lang
from ..types.season import Season, SeasonTranslation
from ..types.episode import Episode, EpisodeTranslation, PartialShow, EpisodeID
from ..types.studio import Studio
@ -75,9 +76,6 @@ class TVDB(Provider):
"awards-show": None,
}
def normalize_lang(self, lang: str) -> str:
return str(Language.get(lang))
@cache(ttl=timedelta(days=30))
async def login(self) -> str:
async with self._client.post(
@ -149,7 +147,7 @@ class TVDB(Provider):
try:
path = f"series/{show_id}/episodes/default"
if language is not None:
path += "/{language}"
path += f"/{language}"
ret = await self.get(
path,
not_found_fail=f"Could not find show with id {show_id}",
@ -195,10 +193,6 @@ class TVDB(Provider):
f"Could not retrive episode {show['name']} s{season}e{episode_nbr}, absolute {absolute}"
)
languages = self._languages
if show["originalLanguage"] not in languages:
languages = [*self._languages, show["originalLanguage"]]
translations.append(await self.get_episodes(show_id))
trans = [
(
next((ep for ep in el[0] if ep["id"] == ret["id"]), None)
@ -209,18 +203,18 @@ class TVDB(Provider):
]
ep_trans = {
self.normalize_lang(lang): EpisodeTranslation(
normalize_lang(lang): EpisodeTranslation(
name=val["name"],
overview=val["overview"],
)
for lang, val in zip(languages, trans)
for lang, val in zip(self._languages, trans)
if val is not None
}
return Episode(
show=PartialShow(
name=show["name"],
original_language=self.normalize_lang(show["originalLanguage"]),
original_language=normalize_lang(show["originalLanguage"]),
external_id={
self.name: MetadataID(
show_id, f"https://thetvdb.com/series/{show['slug']}"
@ -295,13 +289,13 @@ class TVDB(Provider):
*(process_translation(lang) for lang in languages)
)
trans = {
self.normalize_lang(lang): ts
normalize_lang(lang): ts
for (lang, ts) in zip(self._languages, translations)
if ts is not None
}
ret = ret["data"]
return Show(
original_language=self.normalize_lang(ret["originalLanguage"]),
original_language=normalize_lang(ret["originalLanguage"]),
aliases=[x["name"] for x in ret["aliases"]],
start_air=datetime.strptime(ret["firstAired"], "%Y-%m-%d").date(),
end_air=datetime.strptime(ret["lastAired"], "%Y-%m-%d").date(),
@ -403,7 +397,7 @@ class TVDB(Provider):
trans = await asyncio.gather(*(process_translation(x) for x in self._languages))
translations = {
self.normalize_lang(lang): tl
normalize_lang(lang): tl
for lang, tl in zip(self._languages, trans)
if tl is not None
}

View File

@ -3,6 +3,7 @@ from __future__ import annotations
import os
from datetime import date
from itertools import chain
from langcodes import Language
from typing import TYPE_CHECKING, Literal, Any, Optional
if TYPE_CHECKING:
@ -21,6 +22,10 @@ def format_date(date: date | int | None) -> str | None:
return date.isoformat()
def normalize_lang(lang: str) -> str:
return str(Language.get(lang))
# For now, the API of kyoo only support one language so we remove the others.
default_languages = os.environ["LIBRARY_LANGUAGES"].split(",")