def add_questions(exercise_node, question_list): EXPECTED_QUESTION_TYPES = [ INPUT_QUESTION, MULTIPLE_SELECTION, SINGLE_SELECTION, FREE_RESPONSE, PERSEUS_QUESTION ] for q in question_list: question_type = q.get('question_type') if question_type not in EXPECTED_QUESTION_TYPES: LOGGER.critical(question_type) raise NotImplementedError( 'Unexpected question type found in channel json.') question_text = q.get('question') hints = q.get('hints') hints = hints if isinstance(hints, str) else [hint for hint in hints or []] if question_type == exercises.MULTIPLE_SELECTION: q_obj = questions.MultipleSelectQuestion( id=q['id'], question=question_text, correct_answers=[answer for answer in q['correct_answers']], all_answers=[answer for answer in q['all_answers']], hints=hints, ) exercise_node.add_question(q_obj) elif question_type == exercises.SINGLE_SELECTION: q_obj = questions.SingleSelectQuestion( id=q['id'], question=question_text, correct_answer=q['correct_answer'], all_answers=[answer for answer in q['all_answers']], hints=hints, ) exercise_node.add_question(q_obj) elif question_type == exercises.INPUT_QUESTION: q_obj = questions.InputQuestion( id=q['id'], question=question_text, answers=[answer for answer in q['answers']], hints=hints, ) exercise_node.add_question(q_obj) elif question_type == exercises.PERSEUS_QUESTION: q_obj = questions.PerseusQuestion( id=q['id'], raw_data=q.get('item_data'), source_url="https://www.khanacademy.org/", ) exercise_node.add_question(q_obj) else: raise UnknownQuestionTypeError( "Unrecognized question type '{0}': accepted types are {1}". format(question_type, [key for key, value in exercises.question_choices]))
def create_question(raw_question): if raw_question["type"] == exercises.MULTIPLE_SELECTION: return questions.MultipleSelectQuestion( id=raw_question["id"], question=raw_question["question"], correct_answers=raw_question["correct_answers"], all_answers=raw_question["all_answers"], hints=raw_question.get("hints"), randomize = True, ) if raw_question["type"] == exercises.SINGLE_SELECTION: return questions.SingleSelectQuestion( id=raw_question["id"], question=raw_question["question"], correct_answer=raw_question["correct_answer"], all_answers=raw_question["all_answers"], hints=raw_question.get("hints"), randomize = True ) if raw_question["type"] == exercises.INPUT_QUESTION: return questions.InputQuestion( id=raw_question["id"], question=raw_question["question"], answers=raw_question["answers"], hints=raw_question.get("hints"), ) else: raise UnknownQuestionTypeError("Unrecognized question type '{0}': accepted types are {1}".format(raw_question["type"], [key for key, value in exercises.question_choices]))
def create_question(raw_question): question = parse_images(raw_question.get('question')) hints = raw_question.get('hints') hints = parse_images(hints) if isinstance( hints, str) else [parse_images(hint) for hint in hints or []] if raw_question["type"] == exercises.MULTIPLE_SELECTION: return questions.MultipleSelectQuestion( id=raw_question["id"], question=question, correct_answers=[ parse_images(answer) for answer in raw_question['correct_answers'] ], all_answers=[ parse_images(answer) for answer in raw_question['all_answers'] ], hints=hints, ) if raw_question["type"] == exercises.SINGLE_SELECTION: return questions.SingleSelectQuestion( id=raw_question["id"], question=question, correct_answer=parse_images(raw_question['correct_answer']), all_answers=[ parse_images(answer) for answer in raw_question['all_answers'] ], hints=hints, ) if raw_question["type"] == exercises.INPUT_QUESTION: return questions.InputQuestion( id=raw_question["id"], question=question, answers=[ parse_images(answer) for answer in raw_question['answers'] ], hints=hints, ) if raw_question["type"] == exercises.PERSEUS_QUESTION: return questions.PerseusQuestion( id=raw_question["id"], raw_data=parse_images(raw_question.get('item_data')), source_url="https://www.google.com/", ) else: raise UnknownQuestionTypeError( "Unrecognized question type '{0}': accepted types are {1}".format( raw_question["type"], [key for key, value in exercises.question_choices]))
def create_question(raw_question): if raw_question["type"] == exercises.MULTIPLE_SELECTION: return MultipleSelectQuestion( id=raw_question["id"], question=raw_question["question"], correct_answers=raw_question["correct_answers"], all_answers=raw_question["all_answers"], hints=raw_question.get("hints"), ) if raw_question["type"] == exercises.SINGLE_SELECTION: return SingleSelectQuestion( id=raw_question["id"], question=raw_question["question"], correct_answer=raw_question["correct_answer"], all_answers=raw_question["all_answers"], hints=raw_question.get("hints"), ) if raw_question["type"] == exercises.INPUT_QUESTION: return InputQuestion( id=raw_question["id"], question=raw_question["question"], answers=raw_question["answers"], hints=raw_question.get("hints"), ) if raw_question["type"] == exercises.FREE_RESPONSE: return FreeResponseQuestion( id=raw_question["id"], question=raw_question["question"], hints=raw_question.get("hints"), ) if raw_question["type"] == exercises.PERSEUS_QUESTION: return PerseusQuestion( id=raw_question["id"], raw_data=raw_question["item_data"], ) else: raise UnknownQuestionTypeError( "Unrecognized question type '{0}': accepted types are {1}".format( raw_question["type"], [key for key, value in exercises.question_choices]))