mirror of
https://github.com/Benexl/FastAnime.git
synced 2025-12-12 15:50:01 -08:00
fix: import issues
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user