feat: use local imports to boost start up times

This commit is contained in:
Benex254
2024-08-06 14:39:58 +03:00
parent 2e94e8494e
commit 588a6b4e2b
22 changed files with 133 additions and 118 deletions

View File

@@ -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

View File

@@ -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:

View File

@@ -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")

View File

@@ -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")

View File

@@ -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()

View File

@@ -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 = (

View File

@@ -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

View File

@@ -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")

View File

@@ -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")

View File

@@ -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()

View File

@@ -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)

View File

@@ -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()

View File

@@ -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")

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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")

View File

@@ -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:

View File

@@ -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

View File

@@ -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)

View File

@@ -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 ----