from __future__ import annotations from typing import Any, Dict, List, Optional from pydantic import BaseModel class Link(BaseModel): title: Optional[str] = None rel: Optional[str] = None href: Optional[str] = None type: Optional[str] = None templated: Optional[bool] = None width: Optional[int] = None height: Optional[int] = None class Series(BaseModel): name: Optional[str] = None position: Optional[int] = None links: Optional[List[Link]] = None class CollectionItem(BaseModel): name: Optional[str] = None position: Optional[int] = None links: Optional[List[Link]] = None class BelongsTo(BaseModel): series: Optional[List[Series]] = None collection: Optional[List[CollectionItem]] = None class Rendition(BaseModel): additionalProp1: Dict[str, Any] additionalProp2: Dict[str, Any] additionalProp3: Dict[str, Any] class Metadata(BaseModel): title: Optional[str] = None identifier: Optional[str] = None type: Optional[str] = None conformsTo: Optional[str] = None sortAs: Optional[str] = None subtitle: Optional[str] = None modified: Optional[str] = None published: Optional[str] = None language: Optional[str] = None author: Optional[List[str]] = None translator: Optional[List[str]] = None editor: Optional[List[str]] = None artist: Optional[List[str]] = None illustrator: Optional[List[str]] = None letterer: Optional[List[str]] = None penciler: Optional[List[str]] = None colorist: Optional[List[str]] = None inker: Optional[List[str]] = None contributor: Optional[List[str]] = None publisher: Optional[List[str]] = None subject: Optional[List[str]] = None readingProgression: Optional[str] = None description: Optional[str] = None numberOfPages: Optional[int] = None belongsTo: Optional[BelongsTo] = None rendition: Optional[Rendition] = None class Image(BaseModel): title: Optional[str] = None rel: Optional[str] = None href: Optional[str] = None type: Optional[str] = None templated: Optional[bool] = None width: Optional[int] = None height: Optional[int] = None class ReadingOrderItem(BaseModel): title: Optional[str] = None rel: Optional[str] = None href: Optional[str] = None type: Optional[str] = None templated: Optional[bool] = None width: Optional[int] = None height: Optional[int] = None class Resource(BaseModel): title: Optional[str] = None rel: Optional[str] = None href: Optional[str] = None type: Optional[str] = None templated: Optional[bool] = None width: Optional[int] = None height: Optional[int] = None class TocItem(BaseModel): title: Optional[str] = None rel: Optional[str] = None href: Optional[str] = None type: Optional[str] = None templated: Optional[bool] = None width: Optional[int] = None height: Optional[int] = None class Landmark(BaseModel): title: Optional[str] = None rel: Optional[str] = None href: Optional[str] = None type: Optional[str] = None templated: Optional[bool] = None width: Optional[int] = None height: Optional[int] = None class PageListItem(BaseModel): title: Optional[str] = None rel: Optional[str] = None href: Optional[str] = None type: Optional[str] = None templated: Optional[bool] = None width: Optional[int] = None height: Optional[int] = None class Manifest(BaseModel): context: Optional[str] = None metadata: Optional[Metadata] = None links: Optional[List[Link]] = None images: Optional[List[Image]] = None readingOrder: Optional[List[ReadingOrderItem]] = None resources: Optional[List[Resource]] = None toc: Optional[List[TocItem]] = None landmarks: Optional[List[Landmark]] = None pageList: Optional[List[PageListItem]] = None