mirror of
https://github.com/Benexl/FastAnime.git
synced 2025-12-12 15:50:01 -08:00
106 lines
3.0 KiB
Python
106 lines
3.0 KiB
Python
"""An abstraction over all providers offering added features with a simple and well typed api
|
|
|
|
[TODO:description]
|
|
"""
|
|
|
|
import importlib
|
|
import logging
|
|
from typing import TYPE_CHECKING
|
|
|
|
from .libs.manga_provider import manga_sources
|
|
|
|
if TYPE_CHECKING:
|
|
pass
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class MangaProvider:
|
|
"""Class that manages all anime sources adding some extra functionality to them.
|
|
Attributes:
|
|
PROVIDERS: [TODO:attribute]
|
|
provider: [TODO:attribute]
|
|
provider: [TODO:attribute]
|
|
dynamic: [TODO:attribute]
|
|
retries: [TODO:attribute]
|
|
manga_provider: [TODO:attribute]
|
|
"""
|
|
|
|
PROVIDERS = list(manga_sources.keys())
|
|
provider = PROVIDERS[0]
|
|
|
|
def __init__(self, provider="mangadex", dynamic=False, retries=0) -> None:
|
|
self.provider = provider
|
|
self.dynamic = dynamic
|
|
self.retries = retries
|
|
self.lazyload_provider(self.provider)
|
|
|
|
def lazyload_provider(self, provider):
|
|
"""updates the current provider being used"""
|
|
_, anime_provider_cls_name = manga_sources[provider].split(".", 1)
|
|
package = f"fastanime.libs.manga_provider.{provider}"
|
|
provider_api = importlib.import_module(".api", package)
|
|
manga_provider = getattr(provider_api, anime_provider_cls_name)
|
|
self.manga_provider = manga_provider()
|
|
|
|
def search_for_manga(
|
|
self,
|
|
user_query,
|
|
nsfw=True,
|
|
unknown=True,
|
|
):
|
|
"""core abstraction over all providers search functionality
|
|
|
|
Args:
|
|
user_query ([TODO:parameter]): [TODO:description]
|
|
translation_type ([TODO:parameter]): [TODO:description]
|
|
nsfw ([TODO:parameter]): [TODO:description]
|
|
manga_provider ([TODO:parameter]): [TODO:description]
|
|
anilist_obj: [TODO:description]
|
|
|
|
Returns:
|
|
[TODO:return]
|
|
"""
|
|
manga_provider = self.manga_provider
|
|
try:
|
|
results = manga_provider.search_for_manga(user_query, nsfw, unknown)
|
|
except Exception as e:
|
|
logger.error(e)
|
|
results = None
|
|
return results
|
|
|
|
def get_manga(
|
|
self,
|
|
anime_id: str,
|
|
):
|
|
"""core abstraction over getting info of an anime from all providers
|
|
|
|
Args:
|
|
anime_id: [TODO:description]
|
|
anilist_obj: [TODO:description]
|
|
|
|
Returns:
|
|
[TODO:return]
|
|
"""
|
|
manga_provider = self.manga_provider
|
|
try:
|
|
results = manga_provider.get_manga(anime_id)
|
|
except Exception as e:
|
|
logger.error(e)
|
|
results = None
|
|
return results
|
|
|
|
def get_chapter_thumbnails(
|
|
self,
|
|
manga_id: str,
|
|
chapter: str,
|
|
):
|
|
manga_provider = self.manga_provider
|
|
try:
|
|
results = manga_provider.get_chapter_thumbnails(manga_id, chapter)
|
|
except Exception as e:
|
|
logger.error(e)
|
|
results = None
|
|
return results # pyright:ignore
|