From 588a6b4e2b5823d4486af2d22f7ef9a63c7c88dc Mon Sep 17 00:00:00 2001 From: Benex254 Date: Tue, 6 Aug 2024 14:39:58 +0300 Subject: [PATCH] feat: use local imports to boost start up times --- fastanime/cli/__init__.py | 3 ++- fastanime/cli/commands/anilist/__init__.py | 5 ++-- fastanime/cli/commands/anilist/completed.py | 2 +- fastanime/cli/commands/anilist/dropped.py | 9 +++---- fastanime/cli/commands/anilist/favourites.py | 8 +++--- fastanime/cli/commands/anilist/login.py | 14 +++++----- fastanime/cli/commands/anilist/notifier.py | 25 ++++++++--------- fastanime/cli/commands/anilist/paused.py | 10 +++---- fastanime/cli/commands/anilist/planning.py | 10 +++---- fastanime/cli/commands/anilist/popular.py | 8 +++--- .../cli/commands/anilist/random_anime.py | 12 ++++----- fastanime/cli/commands/anilist/recent.py | 8 +++--- fastanime/cli/commands/anilist/rewatching.py | 10 +++---- fastanime/cli/commands/anilist/scores.py | 8 +++--- fastanime/cli/commands/anilist/search.py | 8 +++--- fastanime/cli/commands/anilist/trending.py | 8 +++--- fastanime/cli/commands/anilist/upcoming.py | 8 +++--- fastanime/cli/commands/anilist/watching.py | 10 +++---- fastanime/cli/commands/config.py | 17 ++++++------ fastanime/cli/commands/download.py | 27 +++++++++++-------- fastanime/cli/commands/downloads.py | 21 ++++++++------- fastanime/cli/commands/search.py | 20 +++++++------- 22 files changed, 133 insertions(+), 118 deletions(-) diff --git a/fastanime/cli/__init__.py b/fastanime/cli/__init__.py index e72a556..3a56ecf 100644 --- a/fastanime/cli/__init__.py +++ b/fastanime/cli/__init__.py @@ -11,7 +11,6 @@ from .commands.config import configure from .commands.download import download from .commands.downloads import downloads from .commands.search import search -from .config import Config commands = { "search": search, @@ -150,6 +149,8 @@ def run_cli( rofi_theme_confirm, rofi_theme_input, ): + from .config import Config + ctx.obj = Config() if provider: ctx.obj.provider = provider diff --git a/fastanime/cli/commands/anilist/__init__.py b/fastanime/cli/commands/anilist/__init__.py index 0982fe8..fe56316 100644 --- a/fastanime/cli/commands/anilist/__init__.py +++ b/fastanime/cli/commands/anilist/__init__.py @@ -1,7 +1,5 @@ import click -from ....anilist import AniList -from ...interfaces.anilist_interfaces import anilist as anilist_interface from ...utils.tools import QueryDict from .completed import completed from .dropped import dropped @@ -48,6 +46,9 @@ commands = { ) @click.pass_context def anilist(ctx: click.Context): + from ....anilist import AniList + from ...interfaces.anilist_interfaces import anilist as anilist_interface + if user := ctx.obj.user: AniList.update_login_info(user, user["token"]) if ctx.invoked_subcommand is None: diff --git a/fastanime/cli/commands/anilist/completed.py b/fastanime/cli/commands/anilist/completed.py index 3ca0c88..9d4e6bd 100644 --- a/fastanime/cli/commands/anilist/completed.py +++ b/fastanime/cli/commands/anilist/completed.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING import click if TYPE_CHECKING: - from fastanime.cli.config import Config + from ...config import Config @click.command(help="View anime you completed") diff --git a/fastanime/cli/commands/anilist/dropped.py b/fastanime/cli/commands/anilist/dropped.py index 17125b6..4b0ea57 100644 --- a/fastanime/cli/commands/anilist/dropped.py +++ b/fastanime/cli/commands/anilist/dropped.py @@ -2,11 +2,6 @@ from typing import TYPE_CHECKING import click -from fastanime.cli.interfaces import anilist_interfaces -from fastanime.cli.utils.tools import QueryDict, exit_app - -from ....anilist import AniList - if TYPE_CHECKING: from fastanime.cli.config import Config @@ -14,6 +9,10 @@ if TYPE_CHECKING: @click.command(help="View anime you dropped") @click.pass_obj def dropped(config: "Config"): + from ....anilist import AniList + from ...interfaces import anilist_interfaces + from ...utils.tools import QueryDict, exit_app + if not config.user: print("Not authenticated") print("Please run: fastanime anilist loggin") diff --git a/fastanime/cli/commands/anilist/favourites.py b/fastanime/cli/commands/anilist/favourites.py index 8368ee6..b0b9ac9 100644 --- a/fastanime/cli/commands/anilist/favourites.py +++ b/fastanime/cli/commands/anilist/favourites.py @@ -1,9 +1,5 @@ import click -from ....anilist import AniList -from ...interfaces.anilist_interfaces import select_anime -from ...utils.tools import QueryDict - @click.command( help="Fetch the top 15 most favourited anime from anilist", @@ -11,6 +7,10 @@ from ...utils.tools import QueryDict ) @click.pass_obj def favourites(config): + from ....anilist import AniList + from ...interfaces.anilist_interfaces import select_anime + from ...utils.tools import QueryDict + anime_data = AniList.get_most_favourite() if anime_data[0]: anilist_config = QueryDict() diff --git a/fastanime/cli/commands/anilist/login.py b/fastanime/cli/commands/anilist/login.py index da5d568..af1581c 100644 --- a/fastanime/cli/commands/anilist/login.py +++ b/fastanime/cli/commands/anilist/login.py @@ -1,12 +1,6 @@ -import webbrowser from typing import TYPE_CHECKING import click -from rich import print -from rich.prompt import Confirm, Prompt - -from ....anilist import AniList -from ...utils.tools import exit_app if TYPE_CHECKING: from ...config import Config @@ -16,6 +10,14 @@ if TYPE_CHECKING: @click.option("--status", "-s", help="Whether you are logged in or not", is_flag=True) @click.pass_obj def login(config: "Config", status): + import webbrowser + + from rich import print + from rich.prompt import Confirm, Prompt + + from ....anilist import AniList + from ...utils.tools import exit_app + if status: is_logged_in = True if config.user else False message = ( diff --git a/fastanime/cli/commands/anilist/notifier.py b/fastanime/cli/commands/anilist/notifier.py index f64adae..6808388 100644 --- a/fastanime/cli/commands/anilist/notifier.py +++ b/fastanime/cli/commands/anilist/notifier.py @@ -1,23 +1,24 @@ -import json -import logging -import os -import time - import click -import requests -from plyer import notification -from ....anilist import AniList -from ....constants import APP_CACHE_DIR, APP_DATA_DIR, APP_NAME, ICON_PATH, PLATFORM from ...config import Config -logger = logging.getLogger(__name__) - -# plyer.notification(title="anime",message="Update",app_name=APP_NAME) @click.command(help="Check for notifications on anime you currently watching") @click.pass_obj def notifier(config: Config): + import json + import logging + import os + import time + + import requests + from plyer import notification + + from ....anilist import AniList + from ....constants import APP_CACHE_DIR, APP_DATA_DIR, APP_NAME, ICON_PATH, PLATFORM + + logger = logging.getLogger(__name__) + notified = os.path.join(APP_DATA_DIR, "last_notification.json") anime_image = os.path.join(APP_CACHE_DIR, "notification_image") notification_duration = config.notification_duration * 60 diff --git a/fastanime/cli/commands/anilist/paused.py b/fastanime/cli/commands/anilist/paused.py index 1b6c477..8efce97 100644 --- a/fastanime/cli/commands/anilist/paused.py +++ b/fastanime/cli/commands/anilist/paused.py @@ -1,15 +1,15 @@ import click -from fastanime.cli.config import Config -from fastanime.cli.interfaces import anilist_interfaces -from fastanime.cli.utils.tools import QueryDict, exit_app - -from ....anilist import AniList +from ...config import Config @click.command(help="View anime you paused on watching") @click.pass_obj def paused(config: Config): + from ....anilist import AniList + from ...interfaces import anilist_interfaces + from ...utils.tools import QueryDict, exit_app + if not config.user: print("Not authenticated") print("Please run: fastanime anilist loggin") diff --git a/fastanime/cli/commands/anilist/planning.py b/fastanime/cli/commands/anilist/planning.py index b76ea14..9bacee7 100644 --- a/fastanime/cli/commands/anilist/planning.py +++ b/fastanime/cli/commands/anilist/planning.py @@ -1,15 +1,15 @@ import click -from fastanime.cli.config import Config -from fastanime.cli.interfaces import anilist_interfaces -from fastanime.cli.utils.tools import QueryDict, exit_app - -from ....anilist import AniList +from ...config import Config @click.command(help="View anime you are planning on watching") @click.pass_obj def planning(config: Config): + from ....anilist import AniList + from ...interfaces import anilist_interfaces + from ...utils.tools import QueryDict, exit_app + if not config.user: print("Not authenticated") print("Please run: fastanime anilist loggin") diff --git a/fastanime/cli/commands/anilist/popular.py b/fastanime/cli/commands/anilist/popular.py index 6e41a1b..6849554 100644 --- a/fastanime/cli/commands/anilist/popular.py +++ b/fastanime/cli/commands/anilist/popular.py @@ -1,15 +1,15 @@ import click -from ....anilist import AniList -from ...interfaces.anilist_interfaces import select_anime -from ...utils.tools import QueryDict - @click.command( help="Fetch the top 15 most popular anime", short_help="View most popular anime" ) @click.pass_obj def popular(config): + from ....anilist import AniList + from ...interfaces.anilist_interfaces import select_anime + from ...utils.tools import QueryDict + anime_data = AniList.get_most_popular() if anime_data[0]: anilist_config = QueryDict() diff --git a/fastanime/cli/commands/anilist/random_anime.py b/fastanime/cli/commands/anilist/random_anime.py index a124e08..055ef4b 100644 --- a/fastanime/cli/commands/anilist/random_anime.py +++ b/fastanime/cli/commands/anilist/random_anime.py @@ -1,11 +1,5 @@ -import random - import click -from ....anilist import AniList -from ...interfaces.anilist_interfaces import select_anime -from ...utils.tools import QueryDict - @click.command( help="Get random anime from anilist based on a range of anilist anime ids that are seected at random", @@ -13,6 +7,12 @@ from ...utils.tools import QueryDict ) @click.pass_obj def random_anime(config): + import random + + from ....anilist import AniList + from ...interfaces.anilist_interfaces import select_anime + from ...utils.tools import QueryDict + random_anime = range(1, 15000) random_anime = random.sample(random_anime, k=50) diff --git a/fastanime/cli/commands/anilist/recent.py b/fastanime/cli/commands/anilist/recent.py index 212ccf9..c01a351 100644 --- a/fastanime/cli/commands/anilist/recent.py +++ b/fastanime/cli/commands/anilist/recent.py @@ -1,9 +1,5 @@ import click -from ....anilist import AniList -from ...interfaces.anilist_interfaces import select_anime -from ...utils.tools import QueryDict - @click.command( help="Fetch the 15 most recently updated anime from anilist that are currently releasing", @@ -11,6 +7,10 @@ from ...utils.tools import QueryDict ) @click.pass_obj def recent(config): + from ....anilist import AniList + from ...interfaces.anilist_interfaces import select_anime + from ...utils.tools import QueryDict + anime_data = AniList.get_most_recently_updated() if anime_data[0]: anilist_config = QueryDict() diff --git a/fastanime/cli/commands/anilist/rewatching.py b/fastanime/cli/commands/anilist/rewatching.py index ccb5242..4b8567e 100644 --- a/fastanime/cli/commands/anilist/rewatching.py +++ b/fastanime/cli/commands/anilist/rewatching.py @@ -1,15 +1,15 @@ import click -from fastanime.cli.config import Config -from fastanime.cli.interfaces import anilist_interfaces -from fastanime.cli.utils.tools import QueryDict, exit_app - -from ....anilist import AniList +from ...config import Config @click.command(help="View anime you are rewatching") @click.pass_obj def rewatching(config: Config): + from ....anilist import AniList + from ...interfaces import anilist_interfaces + from ...utils.tools import QueryDict, exit_app + if not config.user: print("Not authenticated") print("Please run: fastanime anilist loggin") diff --git a/fastanime/cli/commands/anilist/scores.py b/fastanime/cli/commands/anilist/scores.py index ecc28f3..a127c51 100644 --- a/fastanime/cli/commands/anilist/scores.py +++ b/fastanime/cli/commands/anilist/scores.py @@ -1,15 +1,15 @@ import click -from ....anilist import AniList -from ...interfaces.anilist_interfaces import select_anime -from ...utils.tools import QueryDict - @click.command( help="Fetch the 15 most scored anime", short_help="View most scored anime" ) @click.pass_obj def scores(config): + from ....anilist import AniList + from ...interfaces.anilist_interfaces import select_anime + from ...utils.tools import QueryDict + anime_data = AniList.get_most_scored() if anime_data[0]: anilist_config = QueryDict() diff --git a/fastanime/cli/commands/anilist/search.py b/fastanime/cli/commands/anilist/search.py index f4d3661..1fbc4e2 100644 --- a/fastanime/cli/commands/anilist/search.py +++ b/fastanime/cli/commands/anilist/search.py @@ -1,9 +1,5 @@ import click -from ....anilist import AniList -from ...interfaces.anilist_interfaces import select_anime -from ...utils.tools import QueryDict - @click.command( help="Search for anime using anilists api and get top ~50 results", @@ -14,6 +10,10 @@ from ...utils.tools import QueryDict ) @click.pass_obj def search(config, title): + from ....anilist import AniList + from ...interfaces.anilist_interfaces import select_anime + from ...utils.tools import QueryDict + success, search_results = AniList.search(title) if success: anilist_config = QueryDict() diff --git a/fastanime/cli/commands/anilist/trending.py b/fastanime/cli/commands/anilist/trending.py index 716e30a..1302806 100644 --- a/fastanime/cli/commands/anilist/trending.py +++ b/fastanime/cli/commands/anilist/trending.py @@ -1,9 +1,5 @@ import click -from ....anilist import AniList -from ...interfaces.anilist_interfaces import select_anime -from ...utils.tools import QueryDict - @click.command( help="Fetch the top 15 anime that are currently trending", @@ -11,6 +7,10 @@ from ...utils.tools import QueryDict ) @click.pass_obj def trending(config): + from ....anilist import AniList + from ...interfaces.anilist_interfaces import select_anime + from ...utils.tools import QueryDict + success, data = AniList.get_trending() if success: anilist_config = QueryDict() diff --git a/fastanime/cli/commands/anilist/upcoming.py b/fastanime/cli/commands/anilist/upcoming.py index 16e0284..96f27c7 100644 --- a/fastanime/cli/commands/anilist/upcoming.py +++ b/fastanime/cli/commands/anilist/upcoming.py @@ -1,15 +1,15 @@ import click -from ....anilist import AniList -from ...interfaces.anilist_interfaces import select_anime -from ...utils.tools import QueryDict - @click.command( help="Fetch the 15 most anticipited anime", short_help="View upcoming anime" ) @click.pass_obj def upcoming(config): + from ....anilist import AniList + from ...interfaces.anilist_interfaces import select_anime + from ...utils.tools import QueryDict + success, data = AniList.get_upcoming_anime() if success: anilist_config = QueryDict() diff --git a/fastanime/cli/commands/anilist/watching.py b/fastanime/cli/commands/anilist/watching.py index 5c0abda..91c2f44 100644 --- a/fastanime/cli/commands/anilist/watching.py +++ b/fastanime/cli/commands/anilist/watching.py @@ -1,15 +1,15 @@ import click -from fastanime.cli.config import Config -from fastanime.cli.interfaces import anilist_interfaces -from fastanime.cli.utils.tools import QueryDict, exit_app - -from ....anilist import AniList +from ...config import Config @click.command(help="View anime you are watching") @click.pass_obj def watching(config: Config): + from ....anilist import AniList + from ...interfaces import anilist_interfaces + from ...utils.tools import QueryDict, exit_app + if not config.user: print("Not authenticated") print("Please run: fastanime anilist loggin") diff --git a/fastanime/cli/commands/config.py b/fastanime/cli/commands/config.py index 452823f..09f6753 100644 --- a/fastanime/cli/commands/config.py +++ b/fastanime/cli/commands/config.py @@ -1,12 +1,4 @@ -import os -import subprocess - import click -from pyshortcuts import make_shortcut -from rich import print - -from ...constants import APP_NAME, ICON_PATH, USER_CONFIG_PATH -from ..utils.tools import exit_app @click.command( @@ -22,6 +14,15 @@ from ..utils.tools import exit_app ) # @click.pass_obj def configure(path, desktop_entry): + import os + import subprocess + + from pyshortcuts import make_shortcut + from rich import print + + from ...constants import APP_NAME, ICON_PATH, USER_CONFIG_PATH + from ..utils.tools import exit_app + if path: print(USER_CONFIG_PATH) elif desktop_entry: diff --git a/fastanime/cli/commands/download.py b/fastanime/cli/commands/download.py index 9f98498..a794e21 100644 --- a/fastanime/cli/commands/download.py +++ b/fastanime/cli/commands/download.py @@ -1,14 +1,9 @@ -import click -from rich import print -from rich.progress import Progress -from thefuzz import fuzz +from typing import TYPE_CHECKING -from ...libs.anime_provider.types import Anime -from ...libs.fzf import fzf -from ...Utility.downloader.downloader import downloader -from ..config import Config -from ..utils.tools import exit_app -from ..utils.utils import clear, fuzzy_inquirer +import click + +if TYPE_CHECKING: + from ..config import Config @click.command( @@ -31,7 +26,17 @@ from ..utils.utils import clear, fuzzy_inquirer is_flag=True, ) @click.pass_obj -def download(config: Config, anime_title, episode_range, highest_priority): +def download(config: "Config", anime_title, episode_range, highest_priority): + from rich import print + from rich.progress import Progress + from thefuzz import fuzz + + 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 translation_type = config.translation_type download_dir = config.downloads_dir diff --git a/fastanime/cli/commands/downloads.py b/fastanime/cli/commands/downloads.py index d261d49..421ca73 100644 --- a/fastanime/cli/commands/downloads.py +++ b/fastanime/cli/commands/downloads.py @@ -1,14 +1,9 @@ -import os +from typing import TYPE_CHECKING import click -from fastanime.libs.rofi import Rofi - -from ...cli.utils.mpv import mpv -from ...libs.fzf import fzf -from ..config import Config -from ..utils.tools import exit_app -from ..utils.utils import fuzzy_inquirer +if TYPE_CHECKING: + from ..config import Config @click.command( @@ -16,7 +11,15 @@ from ..utils.utils import fuzzy_inquirer ) @click.option("--path", "-p", help="print the downloads folder and exit", is_flag=True) @click.pass_obj -def downloads(config: Config, path: bool): +def downloads(config: "Config", path: bool): + import os + + from ...cli.utils.mpv import mpv + from ...libs.fzf import fzf + from ...libs.rofi import Rofi + from ..utils.tools import exit_app + from ..utils.utils import fuzzy_inquirer + USER_VIDEOS_DIR = config.downloads_dir if path: print(USER_VIDEOS_DIR) diff --git a/fastanime/cli/commands/search.py b/fastanime/cli/commands/search.py index e27ddfe..47457f0 100644 --- a/fastanime/cli/commands/search.py +++ b/fastanime/cli/commands/search.py @@ -1,15 +1,6 @@ import click -from rich import print -from rich.progress import Progress -from thefuzz import fuzz from ...cli.config import Config -from ...libs.anime_provider.types import Anime -from ...libs.fzf import fzf -from ...libs.rofi import Rofi -from ..utils.mpv import mpv -from ..utils.tools import exit_app -from ..utils.utils import clear, fuzzy_inquirer @click.command( @@ -24,6 +15,17 @@ from ..utils.utils import clear, fuzzy_inquirer @click.argument("anime_title", required=True, type=str) @click.pass_obj def search(config: Config, anime_title: str, episode_range: str): + from rich import print + from rich.progress import Progress + from thefuzz import fuzz + + from ...libs.anime_provider.types import Anime + from ...libs.fzf import fzf + from ...libs.rofi import Rofi + from ..utils.mpv import mpv + from ..utils.tools import exit_app + from ..utils.utils import clear, fuzzy_inquirer + anime_provider = config.anime_provider # ---- search for anime ----