Files
wordarr/wordarr/api/search.py
T

34 lines
1.3 KiB
Python

from fastapi import APIRouter, HTTPException
from ..metadata import PROVIDERS, SERIES_PROVIDERS
from ..metadata.base import MetadataResult
router = APIRouter(prefix="/api/search", tags=["search"])
@router.get("", response_model=list[MetadataResult])
async def search(media_type: str, q: str, language: str = "", fallback: bool = True):
provider = PROVIDERS.get(media_type)
if not provider:
raise HTTPException(400, f"invalid media_type: {media_type}")
try:
return await provider(q, language, fallback)
except Exception as exc:
raise HTTPException(502, f"metadata provider error: {exc}")
@router.get("/series", response_model=list[MetadataResult])
async def series(series_id: str, title: str = "", media_type: str = "audiobook",
language: str = ""):
"""All parts of a series, by number. Audible has no series endpoint, so
audiobooks are a keyword crawl that may miss episodes; Hardcover is exact."""
lookup = SERIES_PROVIDERS.get(media_type)
if not lookup:
raise HTTPException(400, f"no series lookup for media_type: {media_type}")
if not series_id:
raise HTTPException(400, "series_id required")
try:
return await lookup(series_id, title, language)
except Exception as exc:
raise HTTPException(502, f"metadata provider error: {exc}")