animedex.backends.anilist.models
Rich AniList dataclasses (one per Query root we surface).
the high-level backend layer: every anonymous Query root field on AniList’s GraphQL schema
gets a typed pydantic dataclass here. Core entities (Media, Character,
Staff, Studio) carry to_common() projections onto the cross-source
types in animedex.models. Long-tail entities (MediaTrend,
AiringSchedule, Review, Recommendation, Thread, ThreadComment,
Activity, MediaList, MediaListCollection, Following, Follower,
SiteStatistics, ExternalLinkSourceCollection, MediaTagCollection,
GenreCollection) expose their own typed shape but do not have a
common projection — they are AniList-specific concepts.
All models inherit AnimedexModel
(immutable, extra='ignore') so unknown upstream fields are dropped
silently and round-trip through JSON cleanly.
AnilistAnime
- class animedex.backends.anilist.models.AnilistAnime(*, id: int, idMal: int | None = None, title: _AnilistTitle = _AnilistTitle(romaji=None, english=None, native=None), synonyms: List[str] = [], type: str | None = None, format: str | None = None, status: str | None = None, episodes: int | None = None, duration: int | None = None, season: str | None = None, seasonYear: int | None = None, startDate: _AnilistFuzzyDate | None = None, endDate: _AnilistFuzzyDate | None = None, genres: List[str] = [], tags: List[_AnilistTag] = [], averageScore: int | None = None, meanScore: int | None = None, popularity: int | None = None, favourites: int | None = None, trending: int | None = None, isAdult: bool | None = None, countryOfOrigin: str | None = None, description: str | None = None, source: str | None = None, coverImage: _AnilistCoverImage | None = None, bannerImage: str | None = None, trailer: _AnilistTrailer | None = None, studios: _AnilistStudioConnection | None = None, nextAiringEpisode: _AnilistNextAiringEpisode | None = None, externalLinks: List[_AnilistExternalLink] = [], streamingEpisodes: List[_AnilistStreamingEpisode] = [], source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelFull AniList Media (anime / manga) record.
Field-for-field projection of the
Q_MEDIA_BY_IDresponse.to_common()projects onto the cross-sourceAnime.- title: _AnilistTitle
- tags: List[_AnilistTag]
- externalLinks: List[_AnilistExternalLink]
- streamingEpisodes: List[_AnilistStreamingEpisode]
AnilistCharacter
- class animedex.backends.anilist.models.AnilistCharacter(*, id: int, name: _AnilistName = _AnilistName(full=None, native=None, alternative=[]), image: _AnilistImage | None = None, description: str | None = None, gender: str | None = None, age: str | None = None, dateOfBirth: _AnilistFuzzyDate | None = None, bloodType: str | None = None, favourites: int | None = None, media: _AnilistMediaCharacterConnection | None = None, source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelFull AniList Character record.
- name: _AnilistName
AnilistStaff
- class animedex.backends.anilist.models.AnilistStaff(*, id: int, name: _AnilistName = _AnilistName(full=None, native=None, alternative=[]), image: _AnilistImage | None = None, description: str | None = None, primaryOccupations: List[str] = [], gender: str | None = None, age: int | None = None, dateOfBirth: _AnilistFuzzyDate | None = None, yearsActive: List[int] = [], homeTown: str | None = None, languageV2: str | None = None, favourites: int | None = None, source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelFull AniList Staff record.
- name: _AnilistName
AnilistStudio
AnilistMediaTrend
- class animedex.backends.anilist.models.AnilistMediaTrend(*, mediaId: int | None = None, date: int, trending: int | None = None, averageScore: int | None = None, popularity: int | None = None, inProgress: int | None = None, episode: int | None = None, source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelOne row from
Q_MEDIA_TREND— daily trending stats.
AnilistAiringSchedule
- class animedex.backends.anilist.models.AnilistAiringSchedule(*, id: int, airingAt: int, episode: int, timeUntilAiring: int, media_id: int | None = None, media_title_romaji: str | None = None, raw_payload: ~typing.Dict[str, ~typing.Any] = <factory>, source_tag: ~animedex.models.common.SourceTag, **extra_data: ~typing.Any)[source]
Bases:
BackendRichModelOne row from
Q_AIRING_SCHEDULE.- to_common() AiringScheduleRow[source]
Project onto the common airing schedule row.
AnilistReview
- class animedex.backends.anilist.models.AnilistReview(*, id: int, summary: str | None = None, score: int | None = None, rating: int | None = None, ratingAmount: int | None = None, user_name: str | None = None, siteUrl: str | None = None, source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelOne row from
Q_REVIEW.
AnilistRecommendation
- class animedex.backends.anilist.models.AnilistRecommendation(*, id: int, rating: int | None = None, media_id: int | None = None, media_title: str | None = None, recommendation_id: int | None = None, recommendation_title: str | None = None, source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelOne row from
Q_RECOMMENDATION.
AnilistThread
- class animedex.backends.anilist.models.AnilistThread(*, id: int, title: str | None = None, body: str | None = None, user_name: str | None = None, replyCount: int | None = None, viewCount: int | None = None, createdAt: int | None = None, source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelOne row from
Q_THREAD.
AnilistThreadComment
AnilistActivity
- class animedex.backends.anilist.models.AnilistActivity(*, id: int, kind: str, text: str | None = None, status: str | None = None, user_name: str | None = None, media_title: str | None = None, createdAt: int | None = None, source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelOne row from
Q_ACTIVITY(TextActivity / ListActivity).
AnilistActivityReply
AnilistFollowEntry
AnilistMediaListEntry
- class animedex.backends.anilist.models.AnilistMediaListEntry(*, id: int, status: str | None = None, score: float | None = None, progress: int | None = None, media_id: int | None = None, media_title: str | None = None, source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelOne row from
Q_MEDIA_LIST_PUBLIC.
AnilistMediaListGroup
AnilistMediaListCollection
- class animedex.backends.anilist.models.AnilistMediaListCollection(*, user_id: int | None = None, user_name: str | None = None, lists: List[AnilistMediaListGroup] = [], source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelOne
MediaListCollectionblock.- lists: List[AnilistMediaListGroup]
AnilistGenreCollection
AnilistMediaTag
- class animedex.backends.anilist.models.AnilistMediaTag(*, id: int, name: str, description: str | None = None, category: str | None = None, isAdult: bool | None = None, isGeneralSpoiler: bool | None = None, isMediaSpoiler: bool | None = None, source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelOne row from
Q_MEDIA_TAG_COLLECTION.
AnilistSiteStatBucket
AnilistSiteStatistics
- class animedex.backends.anilist.models.AnilistSiteStatistics(*, users: List[AnilistSiteStatBucket] = [], anime: List[AnilistSiteStatBucket] = [], manga: List[AnilistSiteStatBucket] = [], characters: List[AnilistSiteStatBucket] = [], staff: List[AnilistSiteStatBucket] = [], reviews: List[AnilistSiteStatBucket] = [], source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelSiteStatisticssnapshot.- users: List[AnilistSiteStatBucket]
- anime: List[AnilistSiteStatBucket]
- manga: List[AnilistSiteStatBucket]
- characters: List[AnilistSiteStatBucket]
- staff: List[AnilistSiteStatBucket]
- reviews: List[AnilistSiteStatBucket]
AnilistExternalLinkSource
AnilistUserStatistics
- class animedex.backends.anilist.models.AnilistUserStatistics(*, anime_count: int | None = None, anime_mean_score: float | None = None, anime_minutes_watched: int | None = None, manga_count: int | None = None, manga_mean_score: float | None = None, manga_chapters_read: int | None = None, **extra_data: Any)[source]
Bases:
BackendRichModelUser profile statistics block.
AnilistUser
- class animedex.backends.anilist.models.AnilistUser(*, id: int, name: str, about: str | None = None, avatar_large: str | None = None, siteUrl: str | None = None, statistics: AnilistUserStatistics | None = None, source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelUserrecord.- statistics: AnilistUserStatistics | None
AnilistNotification
- class animedex.backends.anilist.models.AnilistNotification(*, id: int, kind: str, type: str | None = None, contexts: List[str] = [], context: str | None = None, user_name: str | None = None, createdAt: int | None = None, source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelOne row from the authenticated
Page.notificationsquery.AniList notifications are a polymorphic union (
AiringNotification,FollowingNotification,ActivityMessageNotification, etc.). The kind is identified by GraphQL fragment; this model carries the common subset plus akinddiscriminator so consumers can branch.
AnilistMarkdown
- class animedex.backends.anilist.models.AnilistMarkdown(*, html: str, source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelResult of the authenticated
Markdownquery — rendered HTML.AniList renders its in-house markdown to HTML server-side. This is the typed wrapper around the
htmlfield.
AnilistAniChartUser
- class animedex.backends.anilist.models.AnilistAniChartUser(*, user_id: int, user_name: str, settings: dict = {}, highlights: dict = {}, source_tag: SourceTag, **extra_data: Any)[source]
Bases:
BackendRichModelAuthenticated
AniChartUsersnapshot.AniChart is a sister project of AniList.
settingsandhighlightsare AniList-encoded JSON strings the user’s AniChart profile page reads; we surface them verbatim and let the consumer decode them on demand.