# retoor <retoor@molodetz.nl>
from __future__ import annotations
from typing import Any, Optional
from devplacepy.schemas.base import _Out
from devplacepy.schemas.content import CommentItemOut, UserOut
class QuizOptionOut(_Out):
uid: str = ""
position: int = 0
label: str = ""
is_correct: Optional[bool] = None
match_value: Optional[str] = None
class QuizAnswerOut(_Out):
uid: str = ""
question_uid: str = ""
position: int = 0
answer_text: str = ""
option_uids: list[str] = []
answered: bool = False
answered_at: str = ""
is_correct: bool = False
awarded_points: float = 0.0
feedback: str = ""
graded_by: str = ""
confidence: float = 0.0
class QuizQuestionOut(_Out):
uid: str = ""
quiz_uid: str = ""
position: int = 0
kind: str = ""
kind_label: str = ""
prompt: str = ""
explanation: str = ""
points: int = 1
media_attachment_uid: str = ""
case_sensitive: bool = False
options: list[QuizOptionOut] = []
option_count: int = 0
match_choices: list[str] = []
correct_boolean: Optional[bool] = None
expected_answer: Optional[str] = None
grading_criteria: Optional[str] = None
numeric_value: Optional[float] = None
numeric_tolerance: Optional[float] = None
answer: Optional[QuizAnswerOut] = None
class QuizOut(_Out):
uid: str = ""
slug: str = ""
url: str = ""
title: str = ""
description: str = ""
status: str = "draft"
published_at: str = ""
shuffle_questions: bool = False
shuffle_options: bool = False
reveal_answers: bool = False
allow_review: bool = True
time_limit_seconds: int = 0
pass_percent: int = 0
question_count: int = 0
total_points: int = 0
attempt_count: int = 0
stars: int = 0
created_at: str = ""
author: Optional[UserOut] = None
viewer_owns: bool = False
viewer_is_admin: bool = False
viewer_can_edit: bool = False
viewer_can_play: bool = False
viewer_state: str = "todo"
validation_errors: list[str] = []
class QuizDetailOut(_Out):
maturity: Optional[str] = None
quiz: QuizOut = QuizOut()
questions: list[QuizQuestionOut] = []
comments: list[CommentItemOut] = []
attachments: list[Any] = []
reactions: dict = {}
bookmarked: bool = False
star_count: int = 0
my_vote: int = 0
leaderboard: list[Any] = []
viewer_state: str = "todo"
viewer_attempt_uid: str = ""
class QuizListItemOut(_Out):
uid: str = ""
slug: str = ""
url: str = ""
title: str = ""
description: str = ""
status: str = "published"
created_at: str = ""
time_ago: str = ""
author: Optional[UserOut] = None
question_count: int = 0
total_points: int = 0
attempt_count: int = 0
time_limit_seconds: int = 0
pass_percent: int = 0
stars: int = 0
my_vote: int = 0
comment_count: int = 0
bookmarked: bool = False
reactions: dict = {}
recent_comments: list[CommentItemOut] = []
viewer_state: str = "todo"
viewer_best_percent: float = 0.0
viewer_best_points: float = 0.0
viewer_attempt_uid: str = ""
class QuizScoreboardEntryOut(_Out):
rank: int = 0
user: Optional[UserOut] = None
total_points: float = 0.0
quizzes_completed: int = 0
avg_percent: float = 0.0
perfect_count: int = 0
class QuizProgressOut(_Out):
completed: int = 0
todo: int = 0
avg_percent: float = 0.0
total_points: float = 0.0
rank: int = 0
perfect_count: int = 0
class QuizScoreboardOut(_Out):
scoreboard: list[QuizScoreboardEntryOut] = []
viewer_standing: Optional[QuizScoreboardEntryOut] = None
limit: int = 0
class QuizzesOut(_Out):
quizzes: list[QuizListItemOut] = []
search: str = ""
filter: str = "all"
counts: dict = {}
pagination: dict = {}
scoreboard: list[QuizScoreboardEntryOut] = []
viewer_standing: Optional[QuizScoreboardEntryOut] = None
viewer_progress: QuizProgressOut = QuizProgressOut()
viewer_can_create: bool = False
class QuizAttemptOut(_Out):
uid: str = ""
quiz_uid: str = ""
quiz_slug: str = ""
quiz_title: str = ""
user_uid: str = ""
status: str = ""
started_at: str = ""
expires_at: str = ""
completed_at: str = ""
remaining_seconds: int = 0
answered_count: int = 0
question_count: int = 0
score_points: float = 0.0
max_points: int = 0
score_percent: float = 0.0
passed: bool = False
pass_percent: int = 0
allow_review: bool = True
questions: list[QuizQuestionOut] = []
class QuizAttemptPageOut(_Out):
quiz: QuizOut = QuizOut()
attempt: QuizAttemptOut = QuizAttemptOut()
class QuizResultOut(_Out):
quiz: QuizOut = QuizOut()
attempt: QuizAttemptOut = QuizAttemptOut()
review: list[QuizQuestionOut] = []
fallback_count: int = 0
class QuizAnswerResultOut(_Out):
ok: bool = True
answer: QuizAnswerOut = QuizAnswerOut()
attempt: QuizAttemptOut = QuizAttemptOut()
class QuizLeaderboardEntryOut(_Out):
rank: int = 0
user: Optional[UserOut] = None
score_points: float = 0.0
score_percent: float = 0.0
passed: bool = False
completed_at: str = ""
class QuizLeaderboardOut(_Out):
quiz_uid: str = ""
entries: list[QuizLeaderboardEntryOut] = []
class QuizDocumentOut(_Out):
title: str = ""
description: str = ""
settings: dict = {}
questions: list[Any] = []
class QuizBuilderOut(_Out):
quiz: QuizOut = QuizOut()
questions: list[QuizQuestionOut] = []
kinds: list[Any] = []
validation_errors: list[str] = []
class QuizFormPageOut(_Out):
viewer_can_create: bool = False