From e6ca8531caee0d2cf7e18f4ab0da6bd11ffeae67 Mon Sep 17 00:00:00 2001 From: MiTHRAL Date: Tue, 26 May 2026 15:27:00 -0400 Subject: [PATCH] Fix watchparty circular imports --- archive_bot/watchparty.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/archive_bot/watchparty.py b/archive_bot/watchparty.py index 84ce8b4..d64f433 100644 --- a/archive_bot/watchparty.py +++ b/archive_bot/watchparty.py @@ -7,13 +7,6 @@ from typing import Any from .core import BotRuntime, MediaItem from .db import connect_db, initialize_database -from .media import ( - catalog_item_for_source_id, - load_media_library, - media_item_card_payload, - resolve_jellyfin_playback_source, -) -from .worker_client import worker_control, worker_create_session, worker_status, worker_play WATCH_PARTY_STATUSES = { "draft", @@ -203,6 +196,8 @@ def log_watch_party_event(connection: Any, session_id: int, event_type: str, pay def list_media_candidates(runtime: BotRuntime, *, media_type: str = "all", search: str = "", limit: int = 25) -> list[dict[str, Any]]: + from .media import load_media_library, media_item_card_payload + movies, shows = load_media_library(runtime) pools = { "movie": movies, @@ -222,6 +217,8 @@ def list_media_candidates(runtime: BotRuntime, *, media_type: str = "all", searc def find_media_item_by_source_id(runtime: BotRuntime, source_id: str) -> MediaItem | None: + from .media import load_media_library + movies, shows = load_media_library(runtime) for item in [*movies, *shows]: if item.source_id and item.source_id == source_id: @@ -362,6 +359,8 @@ def next_queue_position(connection: Any, session_id: int) -> int: def add_watch_party_queue_item(runtime: BotRuntime, session_id: int, jellyfin_source_id: str) -> dict[str, Any]: + from .media import media_item_card_payload + initialize_watchparty_schema() if not jellyfin_source_id.strip(): raise ValueError("jellyfinSourceId is required") @@ -546,6 +545,8 @@ def first_queued_entry(session_id: int) -> dict[str, Any] | None: def start_watch_party_worker(session_id: int) -> dict[str, Any]: + from .worker_client import worker_create_session + session_payload = get_watch_party_session(session_id) session = session_payload["session"] worker = worker_create_session( @@ -573,6 +574,9 @@ def start_watch_party_worker(session_id: int) -> dict[str, Any]: def play_next_watch_party_item(runtime: BotRuntime, session_id: int) -> dict[str, Any]: + from .media import catalog_item_for_source_id, resolve_jellyfin_playback_source + from .worker_client import worker_play + queue_entry = first_queued_entry(session_id) if queue_entry is None: raise ValueError("No queued items available") @@ -607,6 +611,8 @@ def play_next_watch_party_item(runtime: BotRuntime, session_id: int) -> dict[str def control_watch_party_worker(session_id: int, action: str, data: dict[str, Any] | None = None) -> dict[str, Any]: + from .worker_client import worker_control + worker = worker_control(session_id=session_id, action=action, data=data or {}) if action == "pause": update_watch_party_status(session_id, "paused") @@ -627,6 +633,8 @@ def control_watch_party_worker(session_id: int, action: str, data: dict[str, Any def refresh_watch_party_worker(session_id: int) -> dict[str, Any]: + from .worker_client import worker_status + worker = worker_status(session_id) result = update_worker_state( session_id,