Normalize tvdb language codes

This commit is contained in:
Zoe Roux 2024-05-13 00:38:56 +02:00
parent 497ba48f1b
commit 8c6b99e31b
No known key found for this signature in database
3 changed files with 15 additions and 11 deletions

View File

@ -4,6 +4,7 @@ from urllib.parse import urlencode
from aiohttp import ClientSession from aiohttp import ClientSession
from logging import getLogger from logging import getLogger
from typing import Optional, Any, Callable, OrderedDict from typing import Optional, Any, Callable, OrderedDict
from langcodes import Language
from matcher.cache import cache from matcher.cache import cache
@ -33,7 +34,9 @@ class TVDB(Provider):
self.base = "https://api4.thetvdb.com/v4" self.base = "https://api4.thetvdb.com/v4"
self._api_key = api_key self._api_key = api_key
self._pin = pin self._pin = pin
self._languages = languages # tvdb use three letter codes for languages
# (with the terminology code as in 'fra' and not the biblographic code as in 'fre')
self._languages = [Language.get(lang).to_alpha3() for lang in languages]
self._genre_map = { self._genre_map = {
"soap": Genre.SOAP, "soap": Genre.SOAP,
"science-fiction": Genre.SCIENCE_FICTION, "science-fiction": Genre.SCIENCE_FICTION,
@ -72,11 +75,8 @@ class TVDB(Provider):
"awards-show": None, "awards-show": None,
} }
def two_to_three_lang(self, lang: str) -> str: def normalize_lang(self, lang: str) -> str:
return lang return str(Language.get(lang))
def three_to_two_lang(self, lang: str) -> str:
return lang
@cache(ttl=timedelta(days=30)) @cache(ttl=timedelta(days=30))
async def login(self) -> str: async def login(self) -> str:
@ -186,7 +186,7 @@ class TVDB(Provider):
*(self.get_episodes(show_id, language=lang) for lang in olang) *(self.get_episodes(show_id, language=lang) for lang in olang)
) )
translations = { translations = {
lang: EpisodeTranslation( self.normalize_lang(lang): EpisodeTranslation(
name=val["name"], name=val["name"],
overview=val["overview"], overview=val["overview"],
) )
@ -202,7 +202,7 @@ class TVDB(Provider):
return Episode( return Episode(
show=PartialShow( show=PartialShow(
name=show["name"], name=show["name"],
original_language=self.three_to_two_lang(show["originalLanguage"]), original_language=self.normalize_lang(show["originalLanguage"]),
external_id={ external_id={
self.name: MetadataID( self.name: MetadataID(
show_id, f"https://thetvdb.com/series/{show['slug']}" show_id, f"https://thetvdb.com/series/{show['slug']}"
@ -242,7 +242,7 @@ class TVDB(Provider):
) )
) )
trans = { trans = {
lang: ShowTranslation( self.normalize_lang(lang): ShowTranslation(
name=x["name"], name=x["name"],
tagline=None, tagline=None,
tags=[], tags=[],
@ -273,7 +273,7 @@ class TVDB(Provider):
] ]
} }
return Show( return Show(
original_language=ret["originalLanguage"], original_language=self.normalize_lang(ret["originalLanguage"]),
aliases=[x["name"] for x in ret["aliases"]], aliases=[x["name"] for x in ret["aliases"]],
start_air=datetime.strptime(ret["firstAired"], "%Y-%m-%d").date(), start_air=datetime.strptime(ret["firstAired"], "%Y-%m-%d").date(),
end_air=datetime.strptime(ret["lastAired"], "%Y-%m-%d").date(), end_air=datetime.strptime(ret["lastAired"], "%Y-%m-%d").date(),
@ -363,7 +363,9 @@ class TVDB(Provider):
) )
trans = await asyncio.gather(*(process_translation(x) for x in self._languages)) trans = await asyncio.gather(*(process_translation(x) for x in self._languages))
translations = {lang: tl for lang, tl in zip(self._languages, trans)} translations = {
self.normalize_lang(lang): tl for lang, tl in zip(self._languages, trans)
}
return Season( return Season(
season_number=info["data"]["number"], season_number=info["data"]["number"],

View File

@ -4,3 +4,4 @@ jsons
watchfiles watchfiles
aio-pika aio-pika
msgspec msgspec
langcodes

View File

@ -10,6 +10,7 @@
requests requests
dataclasses-json dataclasses-json
msgspec msgspec
langcodes
]); ]);
dotnet = with pkgs.dotnetCorePackages; dotnet = with pkgs.dotnetCorePackages;
combinePackages [ combinePackages [