2 from karmaworld.apps.notes.models import Note
3 from karmaworld.apps.quizzes.models import MultipleChoiceQuestion, Quiz, TrueFalseQuestion, MultipleChoiceOption, \
4 Keyword, FlashCardQuestion
6 KEYWORD_MULTIPLE_CHOICE = 1
7 DEFINITION_MULTIPLE_CHOICE = 2
8 KEYWORD_DEFINITION_TRUE_FALSE = 3
9 FLASHCARD_KEYWORD_BLANK = 4
10 GENERATED_QUESTION_TYPE = (
11 KEYWORD_MULTIPLE_CHOICE,
12 DEFINITION_MULTIPLE_CHOICE,
13 KEYWORD_DEFINITION_TRUE_FALSE,
14 FLASHCARD_KEYWORD_BLANK,
17 MULTIPLE_CHOICE_CHOICES = 4
20 def _create_keyword_multiple_choice(keyword, keywords, quiz):
21 question_object = MultipleChoiceQuestion.objects.create(
22 question_text=keyword.definition,
25 MultipleChoiceOption.objects.create(
28 question=question_object)
30 for other_keyword in random.sample(keywords.exclude(id=keyword.id), MULTIPLE_CHOICE_CHOICES - 1):
31 MultipleChoiceOption.objects.create(
32 text=other_keyword.word,
34 question=question_object)
37 def _create_definition_multiple_choice(keyword, keywords, quiz):
38 question_object = MultipleChoiceQuestion.objects.create(
39 question_text=keyword.word,
42 MultipleChoiceOption.objects.create(
43 text=keyword.definition,
45 question=question_object)
47 for other_keyword in random.sample(keywords.exclude(id=keyword.id), MULTIPLE_CHOICE_CHOICES - 1):
48 MultipleChoiceOption.objects.create(
49 text=other_keyword.definition,
51 question=question_object)
54 def _create_keyword_definition_true_false(keyword, keywords, quiz):
55 true = random.choice((True, False))
58 definition = keyword.definition
60 other_keyword = keywords.exclude(id=keyword.id)
61 definition = other_keyword.definition
63 question_text = 'Is the following a correct definition of {w}:<br/>{d}'. \
64 format(w=keyword.word, d=definition)
66 TrueFalseQuestion.objects.create(
72 def _create_keyword_flashcard_blank(keyword, quiz):
73 FlashCardQuestion.objects.create(
74 definition_side=keyword.definition,
75 keyword_side=keyword.word,
79 def quiz_from_keywords(note_id):
80 note_object = Note.objects.get(id=note_id)
81 quiz_object = Quiz.objects.create(note=note_object, name=note_object.name)
82 keywords = Keyword.objects.filter(note=note_object)
84 for keyword in keywords:
85 if keyword.word and keyword.definition:
86 question_type = random.choice(GENERATED_QUESTION_TYPE)
88 if question_type is KEYWORD_MULTIPLE_CHOICE:
89 _create_keyword_multiple_choice(keyword, keywords, quiz_object)
91 elif question_type is DEFINITION_MULTIPLE_CHOICE:
92 _create_definition_multiple_choice(keyword, keywords, quiz_object)
94 elif question_type is KEYWORD_DEFINITION_TRUE_FALSE:
95 _create_keyword_definition_true_false(keyword, keywords, quiz_object)
97 elif question_type is FLASHCARD_KEYWORD_BLANK:
98 _create_keyword_flashcard_blank(keyword, quiz_object)