sidequest_common.schemas.heroes =============================== .. py:module:: sidequest_common.schemas.heroes .. autoapi-nested-parse:: Hall of Heroes: a members-only, raider.io-style leaderboard and per-member profile. Attendance for raids/events/EP/attendance-rate is defined once, in ``sidequest_api.lib.attendance.attended_condition`` (a SQLAlchemy condition over ``EventSignup`` joined to ``GuildEvent``); every stat here is derived from it rather than from a separate "attended" concept. ``SEASONS`` is the only thing to touch to add a season: append one more entry with a ``starts_at`` after the previous season's ``ends_at`` (``None`` means "still running"). Attributes ---------- .. autoapisummary:: sidequest_common.schemas.heroes.SEASONS Classes ------- .. autoapisummary:: sidequest_common.schemas.heroes.HeroLeaderboard sidequest_common.schemas.heroes.HeroProfile sidequest_common.schemas.heroes.HeroRecentEvent sidequest_common.schemas.heroes.HeroRow sidequest_common.schemas.heroes.HeroSeasonStats sidequest_common.schemas.heroes.Season Module Contents --------------- .. py:class:: HeroLeaderboard Bases: :py:obj:`pydantic.BaseModel` ``GET /api/heroes``. .. py:attribute:: rows :type: list[HeroRow] .. py:attribute:: season_id :type: str .. py:attribute:: season_name :type: str .. py:class:: HeroProfile Bases: :py:obj:`pydantic.BaseModel` ``GET /api/heroes/{member_id}``. .. py:attribute:: all_time :type: HeroSeasonStats .. py:attribute:: avatar_url :type: str | None .. py:attribute:: badges :type: list[sidequest_common.schemas.badges.EarnedBadge] .. py:attribute:: chat_level :type: int .. py:attribute:: chat_xp :type: int .. py:attribute:: chat_xp_for_next_level :type: int .. py:attribute:: chat_xp_into_level :type: int .. py:attribute:: discord_id :type: str .. py:attribute:: display_name :type: str .. py:attribute:: first_event_date :type: datetime.date | None .. py:attribute:: member_id :type: int .. py:attribute:: rank :type: int | None .. py:attribute:: recent_events :type: list[HeroRecentEvent] .. py:attribute:: seasons :type: dict[str, HeroSeasonStats] .. py:attribute:: wow_class :type: sidequest_common.schemas.events.WowClass | None .. py:class:: HeroRecentEvent Bases: :py:obj:`pydantic.BaseModel` One recent event a member attended, for the profile's recent-events list. .. py:attribute:: ep :type: int .. py:attribute:: id :type: uuid.UUID .. py:attribute:: kind :type: sidequest_common.schemas.events.EventKind .. py:attribute:: model_config .. py:attribute:: starts_at :type: datetime.datetime .. py:attribute:: title :type: str .. py:class:: HeroRow Bases: :py:obj:`pydantic.BaseModel` One leaderboard row. .. py:attribute:: avatar_url :type: str | None .. py:attribute:: badge_ids :type: list[str] .. py:attribute:: chat_level :type: int .. py:attribute:: discord_id :type: str .. py:attribute:: display_name :type: str .. py:attribute:: ep :type: int .. py:attribute:: events_attended :type: int .. py:attribute:: member_id :type: int .. py:attribute:: raids_attended :type: int .. py:attribute:: rank :type: int | None .. py:attribute:: wow_class :type: sidequest_common.schemas.events.WowClass | None .. py:class:: HeroSeasonStats Bases: :py:obj:`pydantic.BaseModel` One member's stats for one season (or all time). .. py:attribute:: attendance_rate :type: float .. py:attribute:: ep :type: int .. py:attribute:: events_attended :type: int .. py:attribute:: raids_attended :type: int .. py:class:: Season Bases: :py:obj:`pydantic.BaseModel` One competitive season. Open-ended (``ends_at: None``) until a later season starts. .. py:attribute:: ends_at :type: datetime.datetime | None .. py:attribute:: id :type: str .. py:attribute:: name :type: str .. py:attribute:: starts_at :type: datetime.datetime .. py:data:: SEASONS :type: tuple[Season, Ellipsis] Ordered oldest-first. The last entry's ``ends_at`` is always ``None`` (the current season).