from datetime import date as DateType from urllib.parse import quote from pydantic import BaseModel, field_validator def encode_path(path: str) -> str: if not path: return "" return "/".join(quote(part, safe="") for part in path.split("/")) class ChannelItem(BaseModel): id: int name: str videos_count: int class ChannelsOut(BaseModel): channels: list[ChannelItem] class VideoItem(BaseModel): id: int title: str path: str preview_path: str date: DateType | None = None @field_validator("path", "preview_path", mode="before") @classmethod def encode_urls(cls, v): return encode_path(v) class PlaylistItem(BaseModel): id: int name: str preview_path: str class ChannelOut(BaseModel): videos: list[VideoItem] playlists: list[PlaylistItem] channel_name: str videos_count: int | None = None playlists_count: int | None = None