from dataclasses import dataclass, field from typing import Optional @dataclass class MatchResult: source: str # musicbrainz / open_library / google_books source_id: str title: str subtitle: str | None = None author: str | None = None narrator: str | None = None description: str | None = None cover_url: str | None = None publisher: str | None = None publish_year: int | None = None series: str | None = None series_sequence: str | None = None language: str | None = None genres: list[str] = field(default_factory=list) chapters: list[dict] = field(default_factory=list) confidence: float = 0.0 class BaseMatcherError(Exception): pass