Quiiz system
This commit is contained in:
@@ -0,0 +1,230 @@
|
||||
# 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):
|
||||
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
|
||||
Reference in New Issue
Block a user