refactor: limit use of plural for package names and module names

This commit is contained in:
Benexl
2025-07-24 18:46:43 +03:00
parent 63e107ba53
commit 5392d4f25a
91 changed files with 77 additions and 77 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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