From a04643d36aa53dba330171cfdbf637017c625683 Mon Sep 17 00:00:00 2001 From: Benexl Date: Thu, 24 Jul 2025 18:52:18 +0300 Subject: [PATCH] fix: import issues --- .../cli/commands/anilist/commands/auth.py | 4 +-- .../cli/interactive/menu/media/episodes.py | 2 +- fastanime/cli/interactive/menu/media/main.py | 12 ++++---- .../interactive/menu/media/media_actions.py | 12 ++++---- .../interactive/menu/media/player_controls.py | 6 ++-- .../interactive/menu/media/provider_search.py | 2 +- .../cli/interactive/menu/media/results.py | 4 +-- .../cli/interactive/menu/media/servers.py | 4 +-- fastanime/cli/interactive/session.py | 30 +++++++++---------- fastanime/libs/provider/anime/provider.py | 2 +- 10 files changed, 39 insertions(+), 39 deletions(-) diff --git a/fastanime/cli/commands/anilist/commands/auth.py b/fastanime/cli/commands/anilist/commands/auth.py index f54dc92..e314e75 100644 --- a/fastanime/cli/commands/anilist/commands/auth.py +++ b/fastanime/cli/commands/anilist/commands/auth.py @@ -12,8 +12,8 @@ def auth(config: AppConfig, status: bool, logout: bool): from .....core.constants import ANILIST_AUTH from .....libs.media_api.api import create_api_client from .....libs.selectors.selector import create_selector - from ....services.auth import AuthService - from ....services.feedback import FeedbackService + from ....service.auth import AuthService + from ....service.feedback import FeedbackService auth_service = AuthService("anilist") feedback = FeedbackService(config.general.icons) diff --git a/fastanime/cli/interactive/menu/media/episodes.py b/fastanime/cli/interactive/menu/media/episodes.py index 56a1921..688b66c 100644 --- a/fastanime/cli/interactive/menu/media/episodes.py +++ b/fastanime/cli/interactive/menu/media/episodes.py @@ -9,7 +9,7 @@ def episodes(ctx: Context, state: State) -> State | InternalDirective: the logic for continuing from watch history or manual selection. """ config = ctx.config - feedback = ctx.services.feedback + feedback = ctx.service.feedback feedback.clear_console() provider_anime = state.provider.anime diff --git a/fastanime/cli/interactive/menu/media/main.py b/fastanime/cli/interactive/menu/media/main.py index 06782a8..b70e534 100644 --- a/fastanime/cli/interactive/menu/media/main.py +++ b/fastanime/cli/interactive/menu/media/main.py @@ -18,7 +18,7 @@ MenuAction = Callable[[], State | InternalDirective] @session.menu def main(ctx: Context, state: State) -> State | InternalDirective: icons = ctx.config.general.icons - feedback = ctx.services.feedback + feedback = ctx.service.feedback feedback.clear_console() options: Dict[str, MenuAction] = { @@ -82,7 +82,7 @@ def _create_media_list_action( ctx: Context, state: State, sort: MediaSort, status: MediaStatus | None = None ) -> MenuAction: def action(): - feedback = ctx.services.feedback + feedback = ctx.service.feedback search_params = MediaSearchParams(sort=sort, status=status) loading_message = "Fetching media list" @@ -109,7 +109,7 @@ def _create_media_list_action( def _create_random_media_list(ctx: Context, state: State) -> MenuAction: def action(): - feedback = ctx.services.feedback + feedback = ctx.service.feedback search_params = MediaSearchParams(id_in=random.sample(range(1, 15000), k=50)) loading_message = "Fetching media list" @@ -136,7 +136,7 @@ def _create_random_media_list(ctx: Context, state: State) -> MenuAction: def _create_search_media_list(ctx: Context, state: State) -> MenuAction: def action(): - feedback = ctx.services.feedback + feedback = ctx.service.feedback query = ctx.selector.ask("Search for Anime") if not query: @@ -172,7 +172,7 @@ def _create_user_list_action( """A factory to create menu actions for fetching user lists, handling authentication.""" def action(): - feedback = ctx.services.feedback + feedback = ctx.service.feedback if not ctx.media_api.is_authenticated(): feedback.error("You haven't logged in") return InternalDirective.MAIN @@ -203,7 +203,7 @@ def _create_user_list_action( def _create_recent_media_action(ctx: Context, state: State) -> MenuAction: def action(): - result = ctx.services.media_registry.get_recently_watched() + result = ctx.service.media_registry.get_recently_watched() if result: return State( menu_name=MenuName.RESULTS, diff --git a/fastanime/cli/interactive/menu/media/media_actions.py b/fastanime/cli/interactive/menu/media/media_actions.py index 557fd04..d619656 100644 --- a/fastanime/cli/interactive/menu/media/media_actions.py +++ b/fastanime/cli/interactive/menu/media/media_actions.py @@ -13,7 +13,7 @@ MenuAction = Callable[[], State | InternalDirective] @session.menu def media_actions(ctx: Context, state: State) -> State | InternalDirective: - feedback = ctx.services.feedback + feedback = ctx.service.feedback icons = ctx.config.general.icons @@ -55,7 +55,7 @@ def _stream(ctx: Context, state: State) -> MenuAction: def _watch_trailer(ctx: Context, state: State) -> MenuAction: def action(): - feedback = ctx.services.feedback + feedback = ctx.service.feedback media_item = state.media_api.media_item if not media_item: @@ -78,7 +78,7 @@ def _watch_trailer(ctx: Context, state: State) -> MenuAction: def _manage_user_media_list(ctx: Context, state: State) -> MenuAction: def action(): - feedback = ctx.services.feedback + feedback = ctx.service.feedback media_item = state.media_api.media_item if not media_item: @@ -95,7 +95,7 @@ def _manage_user_media_list(ctx: Context, state: State) -> MenuAction: ) if status: # local - ctx.services.media_registry.update_media_index_entry( + ctx.service.media_registry.update_media_index_entry( media_id=media_item.id, media_item=media_item, status=UserMediaListStatus(status), @@ -113,7 +113,7 @@ def _manage_user_media_list(ctx: Context, state: State) -> MenuAction: def _score_anime(ctx: Context, state: State) -> MenuAction: def action(): - feedback = ctx.services.feedback + feedback = ctx.service.feedback media_item = state.media_api.media_item if not media_item: @@ -128,7 +128,7 @@ def _score_anime(ctx: Context, state: State) -> MenuAction: if not 0.0 <= score <= 10.0: raise ValueError("Score out of range.") # local - ctx.services.media_registry.update_media_index_entry( + ctx.service.media_registry.update_media_index_entry( media_id=media_item.id, media_item=media_item, score=score ) # remote diff --git a/fastanime/cli/interactive/menu/media/player_controls.py b/fastanime/cli/interactive/menu/media/player_controls.py index a8639c4..d79a5ab 100644 --- a/fastanime/cli/interactive/menu/media/player_controls.py +++ b/fastanime/cli/interactive/menu/media/player_controls.py @@ -8,7 +8,7 @@ MenuAction = Callable[[], Union[State, InternalDirective]] @session.menu def player_controls(ctx: Context, state: State) -> Union[State, InternalDirective]: - feedback = ctx.services.feedback + feedback = ctx.service.feedback feedback.clear_console() config = ctx.config @@ -80,7 +80,7 @@ def player_controls(ctx: Context, state: State) -> Union[State, InternalDirectiv def _next_episode(ctx: Context, state: State) -> MenuAction: def action(): - feedback = ctx.services.feedback + feedback = ctx.service.feedback feedback.clear_console() config = ctx.config @@ -131,7 +131,7 @@ def _replay(ctx: Context, state: State) -> MenuAction: def _change_server(ctx: Context, state: State) -> MenuAction: def action(): - feedback = ctx.services.feedback + feedback = ctx.service.feedback feedback.clear_console() selector = ctx.selector diff --git a/fastanime/cli/interactive/menu/media/provider_search.py b/fastanime/cli/interactive/menu/media/provider_search.py index 1e72619..26ab5aa 100644 --- a/fastanime/cli/interactive/menu/media/provider_search.py +++ b/fastanime/cli/interactive/menu/media/provider_search.py @@ -9,7 +9,7 @@ from ...state import InternalDirective, MenuName, ProviderState, State @session.menu def provider_search(ctx: Context, state: State) -> State | InternalDirective: - feedback = ctx.services.feedback + feedback = ctx.service.feedback media_item = state.media_api.media_item if not media_item: feedback.error("No AniList anime to search for", "Please select an anime first") diff --git a/fastanime/cli/interactive/menu/media/results.py b/fastanime/cli/interactive/menu/media/results.py index 5b24124..fe8e1b8 100644 --- a/fastanime/cli/interactive/menu/media/results.py +++ b/fastanime/cli/interactive/menu/media/results.py @@ -9,7 +9,7 @@ from ...state import InternalDirective, MediaApiState, MenuName, State @session.menu def results(ctx: Context, state: State) -> State | InternalDirective: - feedback = ctx.services.feedback + feedback = ctx.service.feedback feedback.clear_console() search_result = state.media_api.search_result @@ -113,7 +113,7 @@ def _format_title(ctx: Context, media_item: MediaItem) -> str: def _handle_pagination( ctx: Context, state: State, page_delta: int ) -> State | InternalDirective: - feedback = ctx.services.feedback + feedback = ctx.service.feedback search_params = state.media_api.search_params diff --git a/fastanime/cli/interactive/menu/media/servers.py b/fastanime/cli/interactive/menu/media/servers.py index 0462cc6..ca8a04f 100644 --- a/fastanime/cli/interactive/menu/media/servers.py +++ b/fastanime/cli/interactive/menu/media/servers.py @@ -9,7 +9,7 @@ from ...state import InternalDirective, MenuName, State @session.menu def servers(ctx: Context, state: State) -> State | InternalDirective: - feedback = ctx.services.feedback + feedback = ctx.service.feedback config = ctx.config provider = ctx.provider @@ -85,7 +85,7 @@ def servers(ctx: Context, state: State) -> State | InternalDirective: ) ) if media_item and episode_number: - ctx.services.watch_history.track(media_item, episode_number, player_result) + ctx.service.watch_history.track(media_item, episode_number, player_result) return State( menu_name=MenuName.PLAYER_CONTROLS, diff --git a/fastanime/cli/interactive/session.py b/fastanime/cli/interactive/session.py index 187b404..5b62c27 100644 --- a/fastanime/cli/interactive/session.py +++ b/fastanime/cli/interactive/session.py @@ -12,22 +12,22 @@ from ...libs.media_api.base import BaseApiClient 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 -from ..services.registry import MediaRegistryService -from ..services.session import SessionsService -from ..services.watch_history import WatchHistoryService +from ..service.auth import AuthService +from ..service.feedback import FeedbackService +from ..service.registry import MediaRegistryService +from ..service.session import SessionsService +from ..service.watch_history import WatchHistoryService from .state import InternalDirective, MenuName, State logger = logging.getLogger(__name__) # A type alias for the signature all menu functions must follow. -MENUS_DIR = APP_DIR / "cli" / "interactive" / "menus" +MENUS_DIR = APP_DIR / "cli" / "interactive" / "menu" @dataclass(frozen=True) -class Services: +class Service: feedback: FeedbackService media_registry: MediaRegistryService watch_history: WatchHistoryService @@ -42,7 +42,7 @@ class Context: selector: BaseSelector player: BasePlayer media_api: BaseApiClient - services: Services + service: Service MenuFunction = Callable[[Context, State], Union[State, InternalDirective]] @@ -60,7 +60,7 @@ class Session: _menus: dict[MenuName, Menu] = {} def _load_context(self, config: AppConfig): - """Initializes all shared services based on the provided configuration.""" + """Initializes all shared service based on the provided configuration.""" from ...libs.media_api.api import create_api_client from ...libs.player import create_player from ...libs.provider.anime.provider import create_provider @@ -70,7 +70,7 @@ class Session: media_api=config.general.media_api, config=config.media_registry ) auth = AuthService(config.general.media_api) - services = Services( + service = Service( feedback=FeedbackService(config.general.icons), media_registry=media_registry, watch_history=WatchHistoryService(config, media_registry), @@ -95,7 +95,7 @@ class Session: selector=create_selector(config), player=create_player(config), media_api=media_api, - services=services, + service=service, ) logger.info("Application context reloaded.") @@ -118,7 +118,7 @@ class Session: if resume: if ( history - := self._context.services.session.get_most_recent_session_history() + := self._context.service.session.get_most_recent_session_history() ): self._history = history else: @@ -130,9 +130,9 @@ class Session: try: self._run_main_loop() except Exception: - self._context.services.session.create_crash_backup(self._history) + self._context.service.session.create_crash_backup(self._history) raise - self._context.services.session.save_session(self._history) + self._context.service.session.save_session(self._history) def _run_main_loop(self): """Run the main session loop.""" @@ -189,7 +189,7 @@ class Session: if filename.endswith(".py") and not filename.startswith("__"): module_name = filename[:-3] full_module_name = ( - f"fastanime.cli.interactive.menus.{package_name}.{module_name}" + f"fastanime.cli.interactive.menu.{package_name}.{module_name}" ) file_path = package_path / filename diff --git a/fastanime/libs/provider/anime/provider.py b/fastanime/libs/provider/anime/provider.py index 1509cc7..a26cee7 100644 --- a/fastanime/libs/provider/anime/provider.py +++ b/fastanime/libs/provider/anime/provider.py @@ -45,7 +45,7 @@ class AnimeProviderFactory: module_name, class_name = import_path.split(".", 1) # Construct the full package path for dynamic import - package_path = f"fastanime.libs.providers.anime.{provider_name.value.lower()}" + package_path = f"fastanime.libs.provider.anime.{provider_name.value.lower()}" try: provider_module = importlib.import_module(f".{module_name}", package_path)