mirror of
https://github.com/Benexl/FastAnime.git
synced 2026-02-04 11:07:48 -08:00
refactor: limit use of plural for package names and module names
This commit is contained in:
@@ -7,7 +7,7 @@ from ..core.config import AppConfig
|
||||
from ..core.constants import PROJECT_NAME, USER_CONFIG_PATH, __version__
|
||||
from .config import ConfigLoader
|
||||
from .options import options_from_model
|
||||
from .utils.exceptions import setup_exceptions_handler
|
||||
from .utils.exception import setup_exceptions_handler
|
||||
from .utils.lazyloader import LazyGroup
|
||||
from .utils.logging import setup_logging
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ from typing import TYPE_CHECKING
|
||||
|
||||
import click
|
||||
|
||||
from fastanime.cli.utils.completions import anime_titles_shell_complete
|
||||
from fastanime.cli.utils.completion import anime_titles_shell_complete
|
||||
|
||||
from .data import (
|
||||
genres_available,
|
||||
|
||||
@@ -4,7 +4,7 @@ import click
|
||||
|
||||
from ...core.config import AppConfig
|
||||
from ...core.exceptions import FastAnimeError
|
||||
from ..utils.completions import anime_titles_shell_complete
|
||||
from ..utils.completion import anime_titles_shell_complete
|
||||
from . import examples
|
||||
|
||||
if TYPE_CHECKING:
|
||||
@@ -13,8 +13,8 @@ if TYPE_CHECKING:
|
||||
|
||||
from typing_extensions import Unpack
|
||||
|
||||
from ...libs.providers.anime.base import BaseAnimeProvider
|
||||
from ...libs.providers.anime.types import Anime
|
||||
from ...libs.provider.anime.base import BaseAnimeProvider
|
||||
from ...libs.provider.anime.types import Anime
|
||||
from ...libs.selectors.base import BaseSelector
|
||||
|
||||
class Options(TypedDict):
|
||||
@@ -106,11 +106,11 @@ def download(config: AppConfig, **options: "Unpack[Options]"):
|
||||
from rich.progress import Progress
|
||||
|
||||
from ...core.exceptions import FastAnimeError
|
||||
from ...libs.providers.anime.params import (
|
||||
from ...libs.provider.anime.params import (
|
||||
AnimeParams,
|
||||
SearchParams,
|
||||
)
|
||||
from ...libs.providers.anime.provider import create_provider
|
||||
from ...libs.provider.anime.provider import create_provider
|
||||
from ...libs.selectors.selector import create_selector
|
||||
|
||||
provider = create_provider(config.general.provider)
|
||||
@@ -208,7 +208,7 @@ def download_anime(
|
||||
from rich.progress import Progress
|
||||
|
||||
from ...core.downloader import DownloadParams, create_downloader
|
||||
from ...libs.providers.anime.params import EpisodeStreamsParams
|
||||
from ...libs.provider.anime.params import EpisodeStreamsParams
|
||||
|
||||
downloader = create_downloader(config.downloads)
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import click
|
||||
|
||||
from ...core.config import AppConfig
|
||||
from ...core.exceptions import FastAnimeError
|
||||
from ..utils.completions import anime_titles_shell_complete
|
||||
from ..utils.completion import anime_titles_shell_complete
|
||||
from . import examples
|
||||
|
||||
if TYPE_CHECKING:
|
||||
@@ -12,8 +12,8 @@ if TYPE_CHECKING:
|
||||
|
||||
from typing_extensions import Unpack
|
||||
|
||||
from ...libs.providers.anime.base import BaseAnimeProvider
|
||||
from ...libs.providers.anime.types import Anime
|
||||
from ...libs.provider.anime.base import BaseAnimeProvider
|
||||
from ...libs.provider.anime.types import Anime
|
||||
from ...libs.selectors.base import BaseSelector
|
||||
|
||||
class Options(TypedDict):
|
||||
@@ -45,11 +45,11 @@ def search(config: AppConfig, **options: "Unpack[Options]"):
|
||||
from rich.progress import Progress
|
||||
|
||||
from ...core.exceptions import FastAnimeError
|
||||
from ...libs.providers.anime.params import (
|
||||
from ...libs.provider.anime.params import (
|
||||
AnimeParams,
|
||||
SearchParams,
|
||||
)
|
||||
from ...libs.providers.anime.provider import create_provider
|
||||
from ...libs.provider.anime.provider import create_provider
|
||||
from ...libs.selectors.selector import create_selector
|
||||
|
||||
provider = create_provider(config.general.provider)
|
||||
@@ -141,9 +141,9 @@ def stream_anime(
|
||||
from rich import print
|
||||
from rich.progress import Progress
|
||||
|
||||
from ...libs.players.params import PlayerParams
|
||||
from ...libs.players.player import create_player
|
||||
from ...libs.providers.anime.params import EpisodeStreamsParams
|
||||
from ...libs.player.params import PlayerParams
|
||||
from ...libs.player.player import create_player
|
||||
from ...libs.provider.anime.params import EpisodeStreamsParams
|
||||
|
||||
player = create_player(config)
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ def episodes(ctx: Context, state: State) -> State | InternalDirective:
|
||||
|
||||
preview_command = None
|
||||
if ctx.config.general.preview != "none":
|
||||
from ....utils.previews import get_episode_preview
|
||||
from ....utils.preview import get_episode_preview
|
||||
|
||||
preview_command = get_episode_preview(
|
||||
available_episodes, media_item, ctx.config
|
||||
@@ -4,7 +4,7 @@ from rich.console import Console
|
||||
|
||||
from .....libs.media_api.params import UpdateUserMediaListEntryParams
|
||||
from .....libs.media_api.types import UserMediaListStatus
|
||||
from .....libs.players.params import PlayerParams
|
||||
from .....libs.player.params import PlayerParams
|
||||
from ...session import Context, session
|
||||
from ...state import InternalDirective, MenuName, State
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from rich.progress import Progress
|
||||
from thefuzz import fuzz
|
||||
|
||||
from .....libs.providers.anime.params import SearchParams
|
||||
from .....libs.providers.anime.types import SearchResult
|
||||
from .....libs.provider.anime.params import SearchParams
|
||||
from .....libs.provider.anime.types import SearchResult
|
||||
from ...session import Context, session
|
||||
from ...state import InternalDirective, MenuName, ProviderState, State
|
||||
|
||||
@@ -73,7 +73,7 @@ def provider_search(ctx: Context, state: State) -> State | InternalDirective:
|
||||
f"[cyan]Fetching full details for '{selected_provider_anime.title}'...",
|
||||
total=None,
|
||||
)
|
||||
from .....libs.providers.anime.params import AnimeParams
|
||||
from .....libs.provider.anime.params import AnimeParams
|
||||
|
||||
full_provider_anime = provider.get(
|
||||
AnimeParams(id=selected_provider_anime.id, query=media_title.lower())
|
||||
@@ -26,7 +26,7 @@ def results(ctx: Context, state: State) -> State | InternalDirective:
|
||||
|
||||
preview_command = None
|
||||
if ctx.config.general.preview != "none":
|
||||
from ....utils.previews import get_anime_preview
|
||||
from ....utils.preview import get_anime_preview
|
||||
|
||||
preview_command = get_anime_preview(
|
||||
list(search_result_dict.values()),
|
||||
@@ -1,8 +1,8 @@
|
||||
from typing import Dict, List
|
||||
|
||||
from .....libs.players.params import PlayerParams
|
||||
from .....libs.providers.anime.params import EpisodeStreamsParams
|
||||
from .....libs.providers.anime.types import ProviderServer, Server
|
||||
from .....libs.player.params import PlayerParams
|
||||
from .....libs.provider.anime.params import EpisodeStreamsParams
|
||||
from .....libs.provider.anime.types import ProviderServer, Server
|
||||
from ...session import Context, session
|
||||
from ...state import InternalDirective, MenuName, State
|
||||
|
||||
@@ -9,8 +9,8 @@ import click
|
||||
from ...core.config import AppConfig
|
||||
from ...core.constants import APP_DIR, USER_CONFIG_PATH
|
||||
from ...libs.media_api.base import BaseApiClient
|
||||
from ...libs.players.base import BasePlayer
|
||||
from ...libs.providers.anime.base import BaseAnimeProvider
|
||||
from ...libs.player.base import BasePlayer
|
||||
from ...libs.provider.anime.base import BaseAnimeProvider
|
||||
from ...libs.selectors.base import BaseSelector
|
||||
from ..services.auth import AuthService
|
||||
from ..services.feedback import FeedbackService
|
||||
@@ -62,8 +62,8 @@ class Session:
|
||||
def _load_context(self, config: AppConfig):
|
||||
"""Initializes all shared services based on the provided configuration."""
|
||||
from ...libs.media_api.api import create_api_client
|
||||
from ...libs.players import create_player
|
||||
from ...libs.providers.anime.provider import create_provider
|
||||
from ...libs.player import create_player
|
||||
from ...libs.provider.anime.provider import create_provider
|
||||
from ...libs.selectors import create_selector
|
||||
|
||||
media_registry = MediaRegistryService(
|
||||
|
||||
@@ -5,7 +5,7 @@ from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
from ...libs.media_api.params import MediaSearchParams, UserMediaListSearchParams
|
||||
from ...libs.media_api.types import MediaItem, PageInfo
|
||||
from ...libs.providers.anime.types import Anime, SearchResults, Server
|
||||
from ...libs.provider.anime.types import Anime, SearchResults, Server
|
||||
|
||||
|
||||
# TODO: is internal directive a good name
|
||||
|
||||
@@ -7,7 +7,7 @@ from typing import Dict, Literal, Optional
|
||||
from pydantic import BaseModel, Field, computed_field
|
||||
|
||||
from ....libs.media_api.types import MediaItem, UserMediaListStatus
|
||||
from ....core.utils import converters
|
||||
from ....core.utils import converter
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -64,8 +64,8 @@ class MediaRegistryIndexEntry(BaseModel):
|
||||
"""Watch completion percentage."""
|
||||
if self.total_duration and self.last_watch_position:
|
||||
return (
|
||||
converters.time_to_seconds(self.last_watch_position)
|
||||
/ converters.time_to_seconds(self.total_duration)
|
||||
converter.time_to_seconds(self.last_watch_position)
|
||||
/ converter.time_to_seconds(self.total_duration)
|
||||
) * 100
|
||||
return 0.0
|
||||
|
||||
@@ -5,7 +5,7 @@ from ....core.config.model import AppConfig
|
||||
from ....libs.media_api.base import BaseApiClient
|
||||
from ....libs.media_api.params import UpdateUserMediaListEntryParams
|
||||
from ....libs.media_api.types import MediaItem, UserMediaListStatus
|
||||
from ....libs.players.types import PlayerResult
|
||||
from ....libs.player.types import PlayerResult
|
||||
from ..registry import MediaRegistryService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -9,7 +9,7 @@ from typing import List
|
||||
|
||||
import httpx
|
||||
|
||||
from ...core.utils import formatters
|
||||
from ...core.utils import formatter
|
||||
|
||||
from ...core.config import AppConfig
|
||||
from ...core.constants import APP_CACHE_DIR, PLATFORM, SCRIPTS_DIR
|
||||
@@ -102,64 +102,64 @@ def _populate_info_template(media_item: MediaItem, config: AppConfig) -> str:
|
||||
Takes the info.sh template and injects formatted, shell-safe data.
|
||||
"""
|
||||
info_script = TEMPLATE_INFO_SCRIPT
|
||||
description = formatters.clean_html(
|
||||
description = formatter.clean_html(
|
||||
media_item.description or "No description available."
|
||||
)
|
||||
|
||||
# Escape all variables before injecting them into the script
|
||||
replacements = {
|
||||
"TITLE": formatters.shell_safe(
|
||||
"TITLE": formatter.shell_safe(
|
||||
media_item.title.english or media_item.title.romaji
|
||||
),
|
||||
"STATUS": formatters.shell_safe(media_item.status.value),
|
||||
"FORMAT": formatters.shell_safe(media_item.format.value),
|
||||
"NEXT_EPISODE": formatters.shell_safe(
|
||||
f"Episode {media_item.next_airing.episode} on {formatters.format_date(media_item.next_airing.airing_at, '%A, %d %B %Y at %X)')}"
|
||||
"STATUS": formatter.shell_safe(media_item.status.value),
|
||||
"FORMAT": formatter.shell_safe(media_item.format.value),
|
||||
"NEXT_EPISODE": formatter.shell_safe(
|
||||
f"Episode {media_item.next_airing.episode} on {formatter.format_date(media_item.next_airing.airing_at, '%A, %d %B %Y at %X)')}"
|
||||
if media_item.next_airing
|
||||
else "N/A"
|
||||
),
|
||||
"EPISODES": formatters.shell_safe(str(media_item.episodes)),
|
||||
"DURATION": formatters.shell_safe(
|
||||
formatters.format_media_duration(media_item.duration)
|
||||
"EPISODES": formatter.shell_safe(str(media_item.episodes)),
|
||||
"DURATION": formatter.shell_safe(
|
||||
formatter.format_media_duration(media_item.duration)
|
||||
),
|
||||
"SCORE": formatters.shell_safe(
|
||||
formatters.format_score_stars_full(media_item.average_score)
|
||||
"SCORE": formatter.shell_safe(
|
||||
formatter.format_score_stars_full(media_item.average_score)
|
||||
),
|
||||
"FAVOURITES": formatters.shell_safe(
|
||||
formatters.format_number_with_commas(media_item.favourites)
|
||||
"FAVOURITES": formatter.shell_safe(
|
||||
formatter.format_number_with_commas(media_item.favourites)
|
||||
),
|
||||
"POPULARITY": formatters.shell_safe(
|
||||
formatters.format_number_with_commas(media_item.popularity)
|
||||
"POPULARITY": formatter.shell_safe(
|
||||
formatter.format_number_with_commas(media_item.popularity)
|
||||
),
|
||||
"GENRES": formatters.shell_safe(
|
||||
formatters.format_list_with_commas([v.value for v in media_item.genres])
|
||||
"GENRES": formatter.shell_safe(
|
||||
formatter.format_list_with_commas([v.value for v in media_item.genres])
|
||||
),
|
||||
"TAGS": formatters.shell_safe(
|
||||
formatters.format_list_with_commas([t.name.value for t in media_item.tags])
|
||||
"TAGS": formatter.shell_safe(
|
||||
formatter.format_list_with_commas([t.name.value for t in media_item.tags])
|
||||
),
|
||||
"STUDIOS": formatters.shell_safe(
|
||||
formatters.format_list_with_commas(
|
||||
"STUDIOS": formatter.shell_safe(
|
||||
formatter.format_list_with_commas(
|
||||
[t.name for t in media_item.studios if t.name]
|
||||
)
|
||||
),
|
||||
"SYNONYMNS": formatters.shell_safe(
|
||||
formatters.format_list_with_commas(media_item.synonymns)
|
||||
"SYNONYMNS": formatter.shell_safe(
|
||||
formatter.format_list_with_commas(media_item.synonymns)
|
||||
),
|
||||
"USER_STATUS": formatters.shell_safe(
|
||||
"USER_STATUS": formatter.shell_safe(
|
||||
media_item.user_status.status.value
|
||||
if media_item.user_status and media_item.user_status.status
|
||||
else "NOT_ON_LIST"
|
||||
),
|
||||
"USER_PROGRESS": formatters.shell_safe(
|
||||
"USER_PROGRESS": formatter.shell_safe(
|
||||
f"Episode {media_item.user_status.progress}"
|
||||
if media_item.user_status
|
||||
else "0"
|
||||
),
|
||||
"START_DATE": formatters.shell_safe(
|
||||
formatters.format_date(media_item.start_date)
|
||||
"START_DATE": formatter.shell_safe(
|
||||
formatter.format_date(media_item.start_date)
|
||||
),
|
||||
"END_DATE": formatters.shell_safe(formatters.format_date(media_item.end_date)),
|
||||
"SYNOPSIS": formatters.shell_safe(description),
|
||||
"END_DATE": formatter.shell_safe(formatter.format_date(media_item.end_date)),
|
||||
"SYNOPSIS": formatter.shell_safe(description),
|
||||
}
|
||||
|
||||
for key, value in replacements.items():
|
||||
@@ -253,29 +253,29 @@ def _populate_episode_info_template(
|
||||
episode_info_script = TEMPLATE_EPISODE_INFO_SCRIPT
|
||||
|
||||
replacements = {
|
||||
"TITLE": formatters.shell_safe(title),
|
||||
"NEXT_EPISODE": formatters.shell_safe(
|
||||
f"Episode {media_item.next_airing.episode} on {formatters.format_date(media_item.next_airing.airing_at, '%A, %d %B %Y at %X)')}"
|
||||
"TITLE": formatter.shell_safe(title),
|
||||
"NEXT_EPISODE": formatter.shell_safe(
|
||||
f"Episode {media_item.next_airing.episode} on {formatter.format_date(media_item.next_airing.airing_at, '%A, %d %B %Y at %X)')}"
|
||||
if media_item.next_airing
|
||||
else "N/A"
|
||||
),
|
||||
"DURATION": formatters.format_media_duration(media_item.duration),
|
||||
"STATUS": formatters.shell_safe(media_item.status.value),
|
||||
"EPISODES": formatters.shell_safe(str(media_item.episodes)),
|
||||
"USER_STATUS": formatters.shell_safe(
|
||||
"DURATION": formatter.format_media_duration(media_item.duration),
|
||||
"STATUS": formatter.shell_safe(media_item.status.value),
|
||||
"EPISODES": formatter.shell_safe(str(media_item.episodes)),
|
||||
"USER_STATUS": formatter.shell_safe(
|
||||
media_item.user_status.status.value
|
||||
if media_item.user_status and media_item.user_status.status
|
||||
else "NOT_ON_LIST"
|
||||
),
|
||||
"USER_PROGRESS": formatters.shell_safe(
|
||||
"USER_PROGRESS": formatter.shell_safe(
|
||||
f"Episode {media_item.user_status.progress}"
|
||||
if media_item.user_status
|
||||
else "0"
|
||||
),
|
||||
"START_DATE": formatters.shell_safe(
|
||||
formatters.format_date(media_item.start_date)
|
||||
"START_DATE": formatter.shell_safe(
|
||||
formatter.format_date(media_item.start_date)
|
||||
),
|
||||
"END_DATE": formatters.shell_safe(formatters.format_date(media_item.end_date)),
|
||||
"END_DATE": formatter.shell_safe(formatter.format_date(media_item.end_date)),
|
||||
}
|
||||
|
||||
for key, value in replacements.items():
|
||||
@@ -5,7 +5,7 @@ from typing import Literal
|
||||
from pydantic import BaseModel, Field, PrivateAttr, computed_field
|
||||
|
||||
from ...libs.media_api.types import MediaSort, UserMediaListSort
|
||||
from ...libs.providers.anime.types import ProviderName, ProviderServer
|
||||
from ...libs.provider.anime.types import ProviderName, ProviderServer
|
||||
from ..constants import APP_ASCII_ART
|
||||
from . import defaults
|
||||
from . import descriptions as desc
|
||||
|
||||
@@ -2,7 +2,7 @@ import logging
|
||||
from datetime import datetime
|
||||
from typing import Dict, List, Optional
|
||||
|
||||
from ....core.utils.formatters import (
|
||||
from ....core.utils.formatter import (
|
||||
renumber_titles,
|
||||
strip_original_episode_prefix,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user