diff --git a/fastanime/AnimeProvider.py b/fastanime/AnimeProvider.py new file mode 100644 index 0000000..a378f60 --- /dev/null +++ b/fastanime/AnimeProvider.py @@ -0,0 +1,58 @@ +from typing import Iterator + +from .libs.anime_provider import anime_sources +from .libs.anime_provider.types import Anime, SearchResults, Server + + +class AnimeProvider: + """ + Class that manages all anime sources adding some extra functionality to them. + """ + + PROVIDERS = list(anime_sources.keys()) + provider = PROVIDERS[0] + + def __init__(self, provider, dynamic=False, retries=0) -> None: + self.provider = provider + self.dynamic = dynamic + self.retries = retries + self.load_provider_obj() + + def load_provider_obj(self): + anime_provider = anime_sources[self.provider]() + self.anime_provider = anime_provider + + def search_for_anime( + self, user_query, translation_type: str = "sub", nsfw=True, unknown=True + ) -> SearchResults | None: + anime_provider = self.anime_provider + try: + results = anime_provider.search_for_anime( + user_query, translation_type, nsfw, unknown + ) + except Exception as e: + print(e) + results = None + return results # pyright:ignore + + def get_anime(self, anime_id: str) -> Anime | None: + anime_provider = self.anime_provider + try: + results = anime_provider.get_anime(anime_id) + except Exception as e: + print(e) + results = None + return results + + def get_episode_streams( + self, anime, episode: str, translation_type: str + ) -> Iterator[Server] | None: + anime_provider = self.anime_provider + try: + results = anime_provider.get_episode_streams( + anime, episode, translation_type + ) + except Exception as e: + print(e) + results = None + return results # pyright:ignore