sidequest_common.schemas.attendance#
Attendance: marking who came to an event, bot-reported voice time, and the GM attendance report.
See sidequest_api.lib.attendance for the SQL conditions attended/no-show status feed into.
Classes#
|
|
One past event, as listed on the attendance tab's event picker. |
|
Body for |
|
One sign-up's Came/No-show decision. |
|
A reporting window for |
|
|
|
One sign-up on the attendance marking screen, with the bot's reported voice time. |
|
One week's attendance on the trend chart. |
|
|
|
One member's line on |
|
One Discord member's cumulative voice minutes for an event, so far. |
|
Bot -> API: cumulative voice minutes per member for one event, so far. |
|
A guild member not currently signed up for the event, offered as a walk-in on the marking screen. |
|
A member who came without signing up. |
Module Contents#
- class sidequest_common.schemas.attendance.AttendanceDetail#
Bases:
pydantic.BaseModelGET/PUT /api/events/{id}/attendance(officer): the marking screen for one event.- event: AttendanceEventSummary#
- signups: list[AttendanceSignup]#
- walk_in_candidates: list[WalkInCandidate]#
- class sidequest_common.schemas.attendance.AttendanceEventSummary#
Bases:
pydantic.BaseModelOne past event, as listed on the attendance tab’s event picker.
- attendance_taken_at: datetime.datetime | None#
- id: uuid.UUID#
- needs_attendance: bool#
- starts_at: datetime.datetime#
- title: str#
- class sidequest_common.schemas.attendance.AttendanceMark#
Bases:
pydantic.BaseModelBody for
PUT /api/events/{id}/attendance(officer). Setsattendance_taken_atto now.Sign-ups not listed in
entriesare left as-is (unmarked, unless a previous save already marked them): tentative/absent sign-ups default to not marked.- entries: list[AttendanceMarkEntry]#
- walk_ins: list[WalkInCreate]#
- class sidequest_common.schemas.attendance.AttendanceMarkEntry#
Bases:
pydantic.BaseModelOne sign-up’s Came/No-show decision.
- attended: bool#
- signup_id: uuid.UUID#
- class sidequest_common.schemas.attendance.AttendanceRange#
Bases:
enum.StrEnumA reporting window for
GET /api/attendance/reportand/trends.Initialize self. See help(type(self)) for accurate signature.
- ALL_TIME = 'all_time'#
- LAST_30 = 'last_30'#
- SEASON = 'season'#
- class sidequest_common.schemas.attendance.AttendanceReport#
Bases:
pydantic.BaseModelGET /api/attendance/report(GM).- raids_only: bool#
- range: AttendanceRange#
- rows: list[MemberAttendanceRow]#
- class sidequest_common.schemas.attendance.AttendanceSignup#
Bases:
pydantic.BaseModelOne sign-up on the attendance marking screen, with the bot’s reported voice time.
- attended: bool | None#
- avatar_url: str | None#
- character: str | None#
- display_name: str#
- is_walk_in: bool#
- member_id: int#
- model_config#
- role: sidequest_common.schemas.events.SignupRole | None#
- signup_id: uuid.UUID#
- suggested_attended: bool#
- voice_minutes: int#
- wow_class: sidequest_common.schemas.events.WowClass | None#
- class sidequest_common.schemas.attendance.AttendanceTrendPoint#
Bases:
pydantic.BaseModelOne week’s attendance on the trend chart.
- attendees: int#
- show_rate: float#
- signed_up: int#
- week_start: datetime.date#
- class sidequest_common.schemas.attendance.AttendanceTrends#
Bases:
pydantic.BaseModelGET /api/attendance/trends(GM): weekly attendance over the chosen range, oldest week first.- points: list[AttendanceTrendPoint]#
- raids_only: bool#
- range: AttendanceRange#
- class sidequest_common.schemas.attendance.MemberAttendanceRow#
Bases:
pydantic.BaseModelOne member’s line on
GET /api/attendance/report.- attendance_rate: float#
- avatar_url: str | None#
- came: int#
- display_name: str#
- last_attended: datetime.datetime | None#
- member_id: int#
- no_shows: int#
- signed_up: int#
- walk_ins: int#
- class sidequest_common.schemas.attendance.VoicePresenceEntry#
Bases:
pydantic.BaseModelOne Discord member’s cumulative voice minutes for an event, so far.
- discord_id: str#
- minutes: int#
- class sidequest_common.schemas.attendance.VoicePresenceReport#
Bases:
pydantic.BaseModelBot -> API: cumulative voice minutes per member for one event, so far.
Idempotent: the API stores
max(existing, reported)perdiscord_idlisted (never an increment, and never lowers a stored total), so the bot can push repeatedly – including after its own in-memory counter has reset on restart – without double-counting or regressing a member’s total.- entries: list[VoicePresenceEntry]#
- event_id: uuid.UUID#
- class sidequest_common.schemas.attendance.WalkInCandidate#
Bases:
pydantic.BaseModelA guild member not currently signed up for the event, offered as a walk-in on the marking screen.
- avatar_url: str | None#
- display_name: str#
- member_id: int#
- class sidequest_common.schemas.attendance.WalkInCreate#
Bases:
pydantic.BaseModelA member who came without signing up.
character/class/roleare required for raid/dungeon events.- character: str | None#
- member_id: int#
- model_config#
- role: sidequest_common.schemas.events.SignupRole | None = None#
- wow_class: sidequest_common.schemas.events.WowClass | None#