mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Extract show search in another cached function
This commit is contained in:
parent
e034d51ae0
commit
a270edbde4
@ -5,6 +5,8 @@ if TYPE_CHECKING:
|
|||||||
from providers.implementations.themoviedatabase import TheMovieDatabase
|
from providers.implementations.themoviedatabase import TheMovieDatabase
|
||||||
|
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
from datetime import timedelta
|
||||||
|
from scanner.cache import cache
|
||||||
from providers.types.metadataid import MetadataID
|
from providers.types.metadataid import MetadataID
|
||||||
|
|
||||||
|
|
||||||
@ -13,6 +15,7 @@ class IdMapper:
|
|||||||
self.language = language
|
self.language = language
|
||||||
self._tmdb = tmdb
|
self._tmdb = tmdb
|
||||||
|
|
||||||
|
@cache(ttl=timedelta(days=1))
|
||||||
async def get_show(
|
async def get_show(
|
||||||
self, show: dict[str, MetadataID], *, required: Optional[List[str]] = None
|
self, show: dict[str, MetadataID], *, required: Optional[List[str]] = None
|
||||||
):
|
):
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
from aiohttp import ClientSession
|
from aiohttp import ClientSession
|
||||||
from datetime import datetime
|
from datetime import datetime, timedelta
|
||||||
from typing import Awaitable, Callable, Dict, List, Optional, Any, TypeVar
|
from typing import Awaitable, Callable, Dict, List, Optional, Any, TypeVar
|
||||||
from providers.idmapper import IdMapper
|
from providers.idmapper import IdMapper
|
||||||
from providers.implementations.thexem import TheXem
|
from providers.implementations.thexem import TheXem
|
||||||
|
|
||||||
from providers.utils import ProviderError
|
from providers.utils import ProviderError
|
||||||
|
from scanner.cache import cache
|
||||||
|
|
||||||
from ..provider import Provider
|
from ..provider import Provider
|
||||||
from ..types.movie import Movie, MovieTranslation, Status as MovieStatus
|
from ..types.movie import Movie, MovieTranslation, Status as MovieStatus
|
||||||
@ -373,6 +374,26 @@ class TheMovieDatabase(Provider):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@cache(ttl=timedelta(days=1))
|
||||||
|
async def search_show(self, name: str, year: Optional[int]):
|
||||||
|
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.get_best_result(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 identify_episode(
|
async def identify_episode(
|
||||||
self,
|
self,
|
||||||
name: str,
|
name: str,
|
||||||
@ -383,23 +404,11 @@ class TheMovieDatabase(Provider):
|
|||||||
*,
|
*,
|
||||||
language: list[str],
|
language: list[str],
|
||||||
) -> Episode:
|
) -> Episode:
|
||||||
search_results = (
|
show = await self.search_show(name, year)
|
||||||
await self.get("search/tv", params={"query": name, "year": year})
|
if show.original_language not in language:
|
||||||
)["results"]
|
language.append(show.original_language)
|
||||||
if len(search_results) == 0:
|
name = show.name
|
||||||
raise ProviderError(f"No result for a tv show named: {name}")
|
show_id = show.external_id[self.name].data_id
|
||||||
search = self.get_best_result(search_results, name, year)
|
|
||||||
show_id = search["id"]
|
|
||||||
show = PartialShow(
|
|
||||||
original_language=search["original_language"],
|
|
||||||
external_id={
|
|
||||||
self.name: MetadataID(
|
|
||||||
show_id, f"https://www.themoviedb.org/tv/{show_id}"
|
|
||||||
)
|
|
||||||
},
|
|
||||||
)
|
|
||||||
if search["original_language"] not in language:
|
|
||||||
language.append(search["original_language"])
|
|
||||||
|
|
||||||
# Handle weird season names overrides from thexem.
|
# Handle weird season names overrides from thexem.
|
||||||
# For example when name is "Jojo's bizzare adventure - Stone Ocean", with season None,
|
# For example when name is "Jojo's bizzare adventure - Stone Ocean", with season None,
|
||||||
@ -461,7 +470,7 @@ class TheMovieDatabase(Provider):
|
|||||||
params={
|
params={
|
||||||
"language": lng,
|
"language": lng,
|
||||||
},
|
},
|
||||||
not_found_fail=f"Could not find episode {episode_nbr} of season {season} of serie {search['name']}",
|
not_found_fail=f"Could not find episode {episode_nbr} of season {season} of serie {name}",
|
||||||
)
|
)
|
||||||
logging.debug("TMDb responded: %s", episode)
|
logging.debug("TMDb responded: %s", episode)
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ from .metadataid import MetadataID
|
|||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class PartialShow:
|
class PartialShow:
|
||||||
|
name: str
|
||||||
original_language: str
|
original_language: str
|
||||||
external_id: dict[str, MetadataID]
|
external_id: dict[str, MetadataID]
|
||||||
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
{pkgs ? import <nixpkgs> {}}: let
|
{pkgs ? import <nixpkgs> {}}: let
|
||||||
venvDir = "./scanner/.venv";
|
venvDir = "./scanner/.venv";
|
||||||
|
python = pkgs.python312;
|
||||||
pythonPkgs = ./scanner/requirements.txt;
|
pythonPkgs = ./scanner/requirements.txt;
|
||||||
dotnet = with pkgs.dotnetCorePackages;
|
dotnet = with pkgs.dotnetCorePackages;
|
||||||
combinePackages [
|
combinePackages [
|
||||||
sdk_7_0
|
sdk_7_0
|
||||||
aspnetcore_7_0
|
aspnetcore_7_0
|
||||||
];
|
];
|
||||||
python = pkgs.python312;
|
|
||||||
in
|
in
|
||||||
pkgs.mkShell {
|
pkgs.mkShell {
|
||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
@ -16,6 +16,7 @@ in
|
|||||||
nodePackages.expo-cli
|
nodePackages.expo-cli
|
||||||
dotnet
|
dotnet
|
||||||
python
|
python
|
||||||
|
python312Packages.setuptools
|
||||||
python312Packages.pip
|
python312Packages.pip
|
||||||
cargo
|
cargo
|
||||||
cargo-watch
|
cargo-watch
|
||||||
|
Loading…
x
Reference in New Issue
Block a user