def record_learner_answer_info( entity_type, state_reference, interaction_id, answer, answer_details): """Records the new learner answer info received from the learner in the model and then saves it. Args: entity_type: str. The type of entity i.e ENTITY_TYPE_EXPLORATION or ENTITY_TYPE_QUESTION, which are declared in feconf.py. state_reference: str. This is used to refer to a state in an exploration or question. For an exploration the value will be equal to 'exp_id:state_name' and for question this will be equal to 'question_id'. interaction_id: str. The ID of the interaction. answer: *(json-like). The answer which is submitted by the learner. The actual type of answer depends on the interaction. answer_details: str. The details the learner will submit when the learner will be asked questions like 'Hey how did you land on this answer', 'Why did you pick that answer' etc. """ learner_answer_details = get_learner_answer_details( entity_type, state_reference) if learner_answer_details is None: learner_answer_details = stats_domain.LearnerAnswerDetails( state_reference, entity_type, interaction_id, [], 0) learner_answer_info_id = ( stats_domain.LearnerAnswerInfo.get_new_learner_answer_info_id()) learner_answer_info = stats_domain.LearnerAnswerInfo( learner_answer_info_id, answer, answer_details, datetime.datetime.utcnow()) learner_answer_details.add_learner_answer_info(learner_answer_info) save_learner_answer_details( entity_type, state_reference, learner_answer_details)
def get_learner_answer_details_from_model(learner_answer_details_model): """Returns a LearnerAnswerDetails domain object given a LearnerAnswerDetailsModel loaded from the datastore. Args: learner_answer_details_model: LearnerAnswerDetailsModel. The learner answer details model loaded from the datastore. Returns: LearnerAnswerDetails|None. A LearnerAnswerDetails domain object corresponding to the given model. """ return stats_domain.LearnerAnswerDetails( learner_answer_details_model.state_reference, learner_answer_details_model.entity_type, learner_answer_details_model.interaction_id, [stats_domain.LearnerAnswerInfo.from_dict(learner_answer_info_dict) for learner_answer_info_dict in learner_answer_details_model.learner_answer_info_list], learner_answer_details_model.learner_answer_info_schema_version, learner_answer_details_model.accumulated_answer_info_json_size_bytes)