Session
This module contains all the necessary logic to create quiz sessions
QuizSession
dataclass
¶
This class makes a quiz interactive
It accepts a quiz
(Quiz
) and interactively renders it within a layout
(QuizLayout
)
to interactively ask the user questions according to a config
(QuizConfig
).
Attributes:
Name | Type | Description |
---|---|---|
quiz |
Quiz |
Determines the quiz to be started |
config |
QuizConfig |
Determines the quiz settings |
layout |
FancyQuizLayout |
Determines how the quiz will look like |
Source code in quizli/session.py
@dataclass
class QuizSession:
"""This class makes a quiz interactive
It accepts a `quiz` (`Quiz`) and interactively renders it within a `layout` (`QuizLayout`)
to interactively ask the user questions according to a `config` (`QuizConfig`).
Attributes:
quiz: Determines the quiz to be started
config: Determines the quiz settings
layout: Determines how the quiz will look like
"""
quiz: Quiz
config: QuizConfig
layout: FancyQuizLayout = FancyQuizLayout()
def _initialize(self) -> None:
"""Apply some of the quiz settings and initialize the quiz layout"""
if self.config.randomize:
self.quiz.shuffle()
self.layout.initialize(quiz_name=self.quiz.name, n_questions=len(self.quiz))
def start(self) -> None:
"""Start the quiz
This method powers the whole interactivity of the quiz, managing
layout updates, as well as iterating through the quiz to ask questions.
"""
self._initialize()
print(self.layout.layout)
for i, item in enumerate(self.quiz.items, start=1):
self.layout.show_question(item=item, idx=i)
answer_correct = item.ask(show_question=False)
self.layout.reveal_answer(item, answer_correct=answer_correct)
if not answer_correct and self.config.mode == QuizMode.SUDDEN_DEATH:
self.start() if Confirm.ask(
"Retry the quiz?"
) else self.layout.show_results(has_won=False)
return
else:
if not Confirm.ask("Continue", default="y"):
self.start() if Confirm.ask(
"Restart the quiz?"
) else self.layout.show_results()
return
if self.config.mode == QuizMode.SUDDEN_DEATH:
self.layout.show_results(has_won=True)
else:
self.layout.show_results()
start(self)
¶
Start the quiz
This method powers the whole interactivity of the quiz, managing layout updates, as well as iterating through the quiz to ask questions.
Source code in quizli/session.py
def start(self) -> None:
"""Start the quiz
This method powers the whole interactivity of the quiz, managing
layout updates, as well as iterating through the quiz to ask questions.
"""
self._initialize()
print(self.layout.layout)
for i, item in enumerate(self.quiz.items, start=1):
self.layout.show_question(item=item, idx=i)
answer_correct = item.ask(show_question=False)
self.layout.reveal_answer(item, answer_correct=answer_correct)
if not answer_correct and self.config.mode == QuizMode.SUDDEN_DEATH:
self.start() if Confirm.ask(
"Retry the quiz?"
) else self.layout.show_results(has_won=False)
return
else:
if not Confirm.ask("Continue", default="y"):
self.start() if Confirm.ask(
"Restart the quiz?"
) else self.layout.show_results()
return
if self.config.mode == QuizMode.SUDDEN_DEATH:
self.layout.show_results(has_won=True)
else:
self.layout.show_results()
Last update:
March 11, 2022