Files
FastAnime/fastanime/libs/media_api/base.py
2025-07-26 12:38:47 +03:00

94 lines
2.4 KiB
Python

import abc
from typing import TYPE_CHECKING, Any, Dict, List, Optional
from ...core.config import AnilistConfig
from .params import (
MediaAiringScheduleParams,
MediaCharactersParams,
MediaRecommendationParams,
MediaRelationsParams,
MediaSearchParams,
UpdateUserMediaListEntryParams,
UserMediaListSearchParams,
)
from .types import MediaItem, MediaSearchResult, UserProfile
if TYPE_CHECKING:
from httpx import Client
class BaseApiClient(abc.ABC):
"""
Abstract Base Class defining a generic contract for media database APIs.
"""
def __init__(self, config: AnilistConfig | Any, client: "Client"):
self.config = config
self.http_client = client
@abc.abstractmethod
def authenticate(self, token: str) -> Optional[UserProfile]:
pass
@abc.abstractmethod
def is_authenticated(self) -> bool:
pass
@abc.abstractmethod
def get_viewer_profile(self) -> Optional[UserProfile]:
pass
@abc.abstractmethod
def search_media(self, params: MediaSearchParams) -> Optional[MediaSearchResult]:
"""Searches for media based on a query and other filters."""
pass
@abc.abstractmethod
def search_media_list(
self, params: UserMediaListSearchParams
) -> Optional[MediaSearchResult]:
pass
@abc.abstractmethod
def update_list_entry(self, params: UpdateUserMediaListEntryParams) -> bool:
pass
@abc.abstractmethod
def delete_list_entry(self, media_id: int) -> bool:
pass
@abc.abstractmethod
def get_recommendation_for(
self, params: MediaRecommendationParams
) -> Optional[List[MediaItem]]:
pass
@abc.abstractmethod
def get_characters_of(self, params: MediaCharactersParams) -> Optional[Dict]:
pass
@abc.abstractmethod
def get_related_anime_for(
self, params: MediaRelationsParams
) -> Optional[List[MediaItem]]:
pass
@abc.abstractmethod
def get_airing_schedule_for(
self, params: MediaAiringScheduleParams
) -> Optional[Dict]:
pass
@abc.abstractmethod
def transform_raw_search_data(self, raw_data: Dict) -> Optional[MediaSearchResult]:
"""
Transform raw API response data into a MediaSearchResult.
Args:
raw_data: Raw response data from the API
Returns:
MediaSearchResult object or None if transformation fails
"""
pass