def test_safe_key_transforms_name(self): student_key = models.Student(key_name='name').put() answers = models.StudentAnswersEntity(key_name=student_key.name()) answers_key = answers.put() self.assertEqual( 'transformed_name', models.StudentAnswersEntity.safe_key(answers_key, self.transform).name())
def update_assessment_transaction(self, key_name, assessment_type, new_answers, score): """Stores answer and updates user scores. Args: email: the student's email address. assessment_type: the title of the assessment. new_answers: the latest set of answers supplied by the student. score: the numerical assessment score. Returns: the student instance. """ student = models.Student.get_by_key_name(key_name) if not student or not student.is_enrolled: raise Exception('Expected enrolled student with key_name "%s".', key_name) course = self.get_course() # It may be that old Student entities don't have user_id set; fix it. if not student.user_id: student.user_id = self.get_user().user_id() answers = models.StudentAnswersEntity.get_by_key_name(student.user_id) if not answers: answers = models.StudentAnswersEntity(key_name=student.user_id) answers.updated_on = datetime.datetime.now() models_utils.set_answer(answers, assessment_type, new_answers) store_score(course, student, assessment_type, score) student.put() answers.put() # Also record the event, which is useful for tracking multiple # submissions and history. models.EventEntity.record( 'submit-assessment', self.get_user(), transforms.dumps({ 'type': 'assessment-%s' % assessment_type, 'values': new_answers, 'location': 'AnswerHandler' })) return student