"""API tools for interacting with external services.""" from typing import Dict, Any import logging from ..api import tmdb_client, TMDBError, TMDBNotFoundError, TMDBAPIError, TMDBConfigurationError logger = logging.getLogger(__name__) def find_media_imdb_id(media_title: str) -> Dict[str, Any]: """ Find the IMDb ID for a given media title using TMDB API. This is a wrapper around the TMDB client that returns a standardized dict format for compatibility with the agent's tool system. Args: media_title: Title of the media to search for Returns: Dict with IMDb ID or error information: - Success: {"status": "ok", "imdb_id": str, "title": str, ...} - Error: {"error": str, "message": str} Example: >>> result = find_media_imdb_id("Inception") >>> print(result) {'status': 'ok', 'imdb_id': 'tt1375666', 'title': 'Inception', ...} """ try: # Use the TMDB client to search for media result = tmdb_client.search_media(media_title) # Check if IMDb ID was found if result.imdb_id: logger.info(f"IMDb ID found for '{media_title}': {result.imdb_id}") return { "status": "ok", "imdb_id": result.imdb_id, "title": result.title, "media_type": result.media_type, "tmdb_id": result.tmdb_id, "overview": result.overview, "release_date": result.release_date, "vote_average": result.vote_average } else: logger.warning(f"No IMDb ID available for '{media_title}'") return { "error": "no_imdb_id", "message": f"No IMDb ID available for '{result.title}'", "title": result.title, "media_type": result.media_type, "tmdb_id": result.tmdb_id } except TMDBNotFoundError as e: logger.info(f"Media not found: {e}") return { "error": "not_found", "message": str(e) } except TMDBConfigurationError as e: logger.error(f"TMDB configuration error: {e}") return { "error": "configuration_error", "message": str(e) } except TMDBAPIError as e: logger.error(f"TMDB API error: {e}") return { "error": "api_error", "message": str(e) } except ValueError as e: logger.error(f"Validation error: {e}") return { "error": "validation_failed", "message": str(e) } except Exception as e: logger.error(f"Unexpected error: {e}", exc_info=True) return { "error": "internal_error", "message": "An unexpected error occurred" }