feat: only import anime provider when needed

This commit is contained in:
Benex254
2024-08-06 16:16:28 +03:00
parent 93b2687985
commit 0d9e78d356
6 changed files with 20 additions and 7 deletions

View File

@@ -17,6 +17,7 @@ if TYPE_CHECKING:
logger = logging.getLogger(__name__)
# TODO: improve performance of this class and add cool features like auto retry
class AnimeProvider:
"""Class that manages all anime sources adding some extra functionality to them.
Attributes:
@@ -100,7 +101,7 @@ class AnimeProvider:
episode: str,
translation_type: str,
anilist_obj: "AnilistBaseMediaDataSchema|None" = None,
) -> Iterator["Server"] | None:
) -> "Iterator[Server] | None":
"""core abstractions for getting juicy streams from all providers
Args:

View File

@@ -32,9 +32,16 @@ commands = {
)
@click.pass_context
def anilist(ctx: click.Context):
from typing import TYPE_CHECKING
from ....anilist import AniList
from ....AnimeProvider import AnimeProvider
from ...interfaces.anilist_interfaces import anilist as anilist_interface
if TYPE_CHECKING:
from ...config import Config
config: Config = ctx.obj
config.anime_provider = AnimeProvider(config.provider)
if user := ctx.obj.user:
AniList.update_login_info(user, user["token"])
if ctx.invoked_subcommand is None:

View File

@@ -31,13 +31,15 @@ def download(config: "Config", anime_title, episode_range, highest_priority):
from rich.progress import Progress
from thefuzz import fuzz
from ...AnimeProvider import AnimeProvider
from ...libs.anime_provider.types import Anime
from ...libs.fzf import fzf
from ...Utility.downloader.downloader import downloader
from ..utils.tools import exit_app
from ..utils.utils import clear, fuzzy_inquirer
anime_provider = config.anime_provider
anime_provider = AnimeProvider(config.provider)
translation_type = config.translation_type
download_dir = config.downloads_dir

View File

@@ -19,6 +19,7 @@ def search(config: Config, anime_title: str, episode_range: str):
from rich.progress import Progress
from thefuzz import fuzz
from ...AnimeProvider import AnimeProvider
from ...libs.anime_provider.types import Anime
from ...libs.fzf import fzf
from ...libs.rofi import Rofi
@@ -26,7 +27,7 @@ def search(config: Config, anime_title: str, episode_range: str):
from ..utils.tools import exit_app
from ..utils.utils import clear, fuzzy_inquirer
anime_provider = config.anime_provider
anime_provider = AnimeProvider(config.provider)
# ---- search for anime ----
with Progress() as progress:

View File

@@ -1,13 +1,16 @@
import os
from configparser import ConfigParser
from typing import TYPE_CHECKING
from rich import print
from ..AnimeProvider import AnimeProvider
from ..constants import USER_CONFIG_PATH, USER_VIDEOS_DIR
from ..libs.rofi import Rofi
from ..Utility.user_data_helper import user_data_helper
if TYPE_CHECKING:
from ..AnimeProvider import AnimeProvider
class Config(object):
anime_list: list
@@ -15,6 +18,7 @@ class Config(object):
fastanime_anilist_app_login_url = (
"https://anilist.co/api/v2/oauth/authorize?client_id=20148&response_type=token"
)
anime_provider: "AnimeProvider"
def __init__(self) -> None:
self.load_config()
@@ -84,8 +88,6 @@ class Config(object):
self.anime_list: list = user_data_helper.user_data.get("animelist", [])
self.user: dict = user_data_helper.user_data.get("user", {})
self.anime_provider = AnimeProvider(self.provider)
def update_user(self, user):
self.user = user
user_data_helper.update_user_info(user)

View File

@@ -155,7 +155,7 @@ class AllAnimeAPI(AnimeProvider):
def get_episode_streams(
self, anime: "Anime", episode_number: str, translation_type="sub"
) -> Iterator["Server"] | None:
) -> "Iterator[Server] | None":
"""get the streams of an episode
Args: