92 lines
2.5 KiB
Python
92 lines
2.5 KiB
Python
"""TMDb data structures.
|
|
|
|
All types are msgspec.Structs for fast serialization.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import msgspec
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Sub-types (shared by TMDb results and index items)
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
class CastCredit(msgspec.Struct, array_like=True):
|
|
"""Cast reference embedded in media info (character + person id)."""
|
|
|
|
character: str | None = None
|
|
id: int | None = None
|
|
|
|
|
|
class Person(msgspec.Struct, array_like=True):
|
|
"""Deduplicated person payload stored in top-level people map."""
|
|
|
|
name: str
|
|
profile_path: str | None = None
|
|
gender: str | None = None
|
|
|
|
|
|
class SimilarMedia(msgspec.Struct, array_like=True):
|
|
"""Pointer to a similar movie/series on TMDb."""
|
|
|
|
id: int
|
|
title: str
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# TMDb result types
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
class EpisodeInfo(msgspec.Struct):
|
|
"""Episode metadata from TMDb."""
|
|
|
|
episode_number: int
|
|
season_number: int
|
|
name: str | None = None
|
|
overview: str | None = None
|
|
air_date: str | None = None
|
|
runtime: int | None = None
|
|
still_path: str | None = None
|
|
vote_average: float | None = None
|
|
vote_count: int | None = None
|
|
director: str | None = None
|
|
|
|
|
|
class SeasonInfo(msgspec.Struct):
|
|
"""Season metadata from TMDb."""
|
|
|
|
season_number: int
|
|
name: str | None = None
|
|
overview: str | None = None
|
|
air_date: str | None = None
|
|
poster_path: str | None = None
|
|
episode_count: int | None = None
|
|
episodes: list[EpisodeInfo] | None = None
|
|
|
|
|
|
class Info(msgspec.Struct):
|
|
"""Full metadata result from TMDb (movies or series)."""
|
|
|
|
tmdb_id: int
|
|
title: str | None = None
|
|
original_title: str | None = None
|
|
alternative_titles: list[str] | None = None
|
|
rating: float | None = None
|
|
vote_count: int | None = None
|
|
overview: str | None = None
|
|
genres: list[str] | None = None
|
|
release_date: str | None = None
|
|
runtime: int | None = None
|
|
status: str | None = None
|
|
tagline: str | None = None
|
|
similar: list[SimilarMedia] | None = None
|
|
keywords: list[str] | None = None
|
|
cast: list[CastCredit] | None = None
|
|
director: str | None = None
|
|
creators: list[str] | None = None
|
|
number_of_seasons: int | None = None
|
|
number_of_episodes: int | None = None
|
|
networks: list[str] | None = None
|