""" YouTube Content ID models. """ from dataclasses import dataclass from datetime import datetime from typing import Literal, Optional from ....typings import ChannelID, PlaylistID, VideoID from ..models import _BaseModel @dataclass class _Snippet: published_at: datetime channel_id: ChannelID channel_title: str title: str description: str thumbnails: dict[str, dict] live_broadcast_content: str @dataclass class _Id: kind: str video_id: Optional[VideoID] = None channel_id: Optional[ChannelID] = None playlist_id: Optional[PlaylistID] = None @dataclass class SearchResult(_BaseModel): """A YouTube search result metadata.""" kind: Literal["youtube#searchResult"] etag: str id: _Id snippet: _Snippet def __post_init__(self): self.id = _Id(**self.id) del self.snippet["publish_time"] # Remove key, duplicate of published_at self.snippet = _Snippet(**self.snippet) @dataclass class Video(_BaseModel, _Snippet): """A YouTube video metadata.""" video_id: VideoID