def update_assessment_transaction( self, email, assessment_type, new_answers, score): """Stores answer and updates user scores.""" student = Student.get_by_email(email) # 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 = StudentAnswersEntity.get_by_key_name(student.user_id) if not answers: answers = StudentAnswersEntity(key_name=student.user_id) answers.updated_on = datetime.datetime.now() utils.set_answer(answers, assessment_type, new_answers) assessment_type = store_score(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(), json.dumps({ 'type': 'assessment-%s' % assessment_type, 'values': new_answers, 'location': 'AnswerHandler'})) return (student, assessment_type)
def run(self): """Computes student statistics.""" enrollment = EnrollmentAggregator() scores = ScoresAggregator() student_scores = StudentAggregator() feedback = PostcourseAggregator() mapper = utils.QueryMapper( Student.all(), batch_size=500, report_every=1000) def map_fn(student): enrollment.visit(student) scores.visit(student) student_scores.visit(student) mapper.run(map_fn) mapper = utils.QueryMapper( StudentAnswersEntity.all(), batch_size=500, report_every=1000) def map_fn1(student): feedback.visit(student) mapper.run(map_fn1) data = { 'enrollment': { 'enrolled': enrollment.enrolled, 'unenrolled': enrollment.unenrolled}, 'scores': scores.name_to_tuple, 'students' : student_scores.name_to_tuple, 'feedback' : feedback.name_to_tuple} return data
def run(self): query = StudentAnswersEntity.all().run(limit=600) for ans_ent in query: ans_dict = transforms.loads(ans_ent.data) for assessment, answers in ans_dict.iteritems(): student = Student.all().filter('user_id', ans_ent.key().name()).get() s_scores = transforms.loads(student.scores) d = { 'email': student.key().name(), 'assessment': assessment, 'score': s_scores.get(assessment, '?????? wtf'), } for answer in answers: k = 'q%d' % (answer['index'] + 1) if answer['correct']: d[k] = 'correct' else: if isinstance(answer['value'], int): d[k] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[ answer['value']] else: d[k] = '' yield d
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 = 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 = StudentAnswersEntity.get_by_key_name(student.user_id) if not answers: answers = StudentAnswersEntity(key_name=student.user_id) answers.updated_on = datetime.datetime.now() 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
def update_assessment_transaction(self, email, assessment_type, new_answers, score): """Stores answer and updates user scores.""" student = Student.get_by_email(email) # 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 = StudentAnswersEntity.get_by_key_name(student.user_id) if not answers: answers = StudentAnswersEntity(key_name=student.user_id) answers.updated_on = datetime.datetime.now() utils.set_answer(answers, assessment_type, new_answers) assessment_type = store_score(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(), json.dumps({ 'type': 'assessment-%s' % assessment_type, 'values': new_answers, 'location': 'AnswerHandler' })) return (student, assessment_type)
def update_simassessment_transaction(self, email, 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 = Student.get_enrolled_student_by_email(email) print student.is_transient 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 = StudentAnswersEntity.get_by_key_name(student.user_id) if not answers: answers = StudentAnswersEntity(key_name=student.user_id) answers.updated_on = datetime.datetime.now() utils.set_answer(answers, assessment_type, new_answers) assessments.store_score(course, student, assessment_type, int(score)) student.put() answers.put()
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 = 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 = StudentAnswersEntity.get_by_key_name(student.user_id) if not answers: answers = StudentAnswersEntity(key_name=student.user_id) answers.updated_on = datetime.datetime.now() 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
def run(self): query = StudentAnswersEntity.all().run(limit=600) for ans_ent in query: ans_dict = transforms.loads(ans_ent.data) for assessment, answers in ans_dict.iteritems(): student = Student.all().filter('user_id', ans_ent.key().name()).get() s_scores = transforms.loads(student.scores) d = { 'email': student.key().name(), 'assessment': assessment, 'score': s_scores.get(assessment, '?????? wtf'), } for answer in answers: k = 'q%d' % (answer['index'] + 1) if answer['correct']: d[k] = 'correct' else: if isinstance(answer['value'], int): d[k] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[answer['value']] else: d[k] = '' yield d