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): 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]))