fix: import issues

This commit is contained in:
Benexl
2025-07-24 18:52:18 +03:00
parent 5392d4f25a
commit a04643d36a
10 changed files with 39 additions and 39 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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