"""Schemas for searching external (fetch) sources — the §A4 discover screen.""" from pydantic import BaseModel from app.domain.sources import SearchResult class ExternalSearchResultOut(BaseModel): source: str source_id: str title: str artist: str | None album: str | None duration_seconds: int | None thumbnail_url: str | None @classmethod def from_entity(cls, r: SearchResult) -> ExternalSearchResultOut: return cls( source=r.source, source_id=r.source_id, title=r.title, artist=r.artist, album=r.album, duration_seconds=r.duration_seconds, thumbnail_url=r.thumbnail_url, ) class ExternalSearchResponse(BaseModel): """Flat list of hits across one or more searchable sources, plus the names of sources that were unavailable (so the UI can show a soft warning).""" results: list[ExternalSearchResultOut] searched_sources: list[str]