def get_sorted_submissions(self): """returns student recent assignments sorted on date""" assignments = [] submissions = submissions_api.get_all_submissions( self.course_id, self.block_id, ITEM_TYPE ) for submission in submissions: if is_finalized_submission(submission_data=submission): filename, user_response = None, None if "filename" in submission['answer'].keys(): filename = submission['answer']['filename'] if "user_response" in submission['answer'].keys(): user_response = submission['answer']['user_response'] assignments.append({ 'submission_id': submission['uuid'], 'filename': filename, 'user_response': user_response, 'timestamp': submission['submitted_at'] or submission['created_at'] }) assignments.sort( key=lambda assignment: assignment['timestamp'], reverse=True ) return assignments
def _get_student_submissions(block_id, course_id, locator): """ Returns valid submission file paths with the username of the student that submitted them. Args: course_id (unicode): edx course id block_id (unicode): edx block id locator (BlockUsageLocator): BlockUsageLocator for the sga module Returns: list(tuple): A list of 2-element tuples - (student username, submission file path) """ submissions = submissions_api.get_all_submissions( course_id, block_id, ITEM_TYPE ) return [ ( user_by_anonymous_id(submission['student_id']).username, get_file_storage_path( locator, submission['answer']['sha1'], submission['answer']['filename'] ) ) for submission in submissions if submission['answer'] ]
def test_get_all_submissions(self): api.create_submission(SECOND_STUDENT_ITEM, ANSWER_TWO) api.create_submission(STUDENT_ITEM, ANSWER_ONE) api.create_submission(STUDENT_ITEM, ANSWER_TWO) api.create_submission(SECOND_STUDENT_ITEM, ANSWER_ONE) with self.assertNumQueries(1): submissions = list( api.get_all_submissions( STUDENT_ITEM['course_id'], STUDENT_ITEM['item_id'], STUDENT_ITEM['item_type'], read_replica=False, )) student_item = self._get_student_item(STUDENT_ITEM) second_student_item = self._get_student_item(SECOND_STUDENT_ITEM) # The result is assumed to be sorted by student_id, which is not part of the specification # of get_all_submissions(), but it is what it currently does. self._assert_submission(submissions[0], ANSWER_ONE, second_student_item.pk, 2) self.assertEqual(submissions[0]['student_id'], SECOND_STUDENT_ITEM['student_id']) self._assert_submission(submissions[1], ANSWER_TWO, student_item.pk, 2) self.assertEqual(submissions[1]['student_id'], STUDENT_ITEM['student_id'])
def _get_student_submissions(block_id, course_id, locator): """ Returns valid submission file paths with the username of the student that submitted them. Args: course_id (unicode): edx course id block_id (unicode): edx block id locator (BlockUsageLocator): BlockUsageLocator for the sga module Returns: list(tuple): A list of 2-element tuples - (student username, submission file path) """ submissions = submissions_api.get_all_submissions( course_id, block_id, ITEM_TYPE ) return [ ( user_by_anonymous_id(submission['student_id']).username, get_file_storage_path( locator, submission['answer']['sha1'], submission['answer']['filename'] ) ) for submission in submissions if submission['answer'] ]
def _get_submissions(course_key_str, block_type, block_id): """ Return submissions for 'question'. """ # Load the actual student submissions for `question`. # Note this requires one giant query that retrieves all student submissions for `question` at once. logger.debug('in _get_submissions: ') return submissions_api.get_all_submissions(course_key_str, block_id, block_type)
def get_sorted_submissions(self): """returns student recent assignments sorted on date""" assignments = [] submissions = submissions_api.get_all_submissions( self.course_id, self.block_id, ITEM_TYPE) for submission in submissions: assignments.append({ 'submission_id': submission['uuid'], 'filename': submission['answer']["filename"], 'timestamp': submission['created_at'] }) assignments.sort(key=lambda assignment: assignment['timestamp'], reverse=True) return assignments
def test_get_all_submissions(self): api.create_submission(SECOND_STUDENT_ITEM, ANSWER_TWO) api.create_submission(STUDENT_ITEM, ANSWER_ONE) api.create_submission(STUDENT_ITEM, ANSWER_TWO) api.create_submission(SECOND_STUDENT_ITEM, ANSWER_ONE) with self.assertNumQueries(1): submissions = list(api.get_all_submissions( STUDENT_ITEM['course_id'], STUDENT_ITEM['item_id'], STUDENT_ITEM['item_type'], read_replica=False, )) student_item = self._get_student_item(STUDENT_ITEM) second_student_item = self._get_student_item(SECOND_STUDENT_ITEM) # The result is assumed to be sorted by student_id, which is not part of the specification # of get_all_submissions(), but it is what it currently does. self._assert_submission(submissions[0], ANSWER_ONE, second_student_item.pk, 2) self.assertEqual(submissions[0]['student_id'], SECOND_STUDENT_ITEM['student_id']) self._assert_submission(submissions[1], ANSWER_TWO, student_item.pk, 2) self.assertEqual(submissions[1]['student_id'], STUDENT_ITEM['student_id'])
def get_sorted_submissions(self): """returns student recent assignments sorted on date""" assignments = [] submissions = submissions_api.get_all_submissions( self.course_id, self.block_id, ITEM_TYPE ) for submission in submissions: if is_finalized_submission(submission_data=submission): assignments.append({ 'submission_id': submission['uuid'], 'filename': submission['answer']["filename"], 'timestamp': submission['submitted_at'] or submission['created_at'] }) assignments.sort( key=lambda assignment: assignment['timestamp'], reverse=True ) return assignments
def get_sorted_submissions(self): """returns student recent assignments sorted on date""" assignments = [] submissions = submissions_api.get_all_submissions( self.block_course_id, self.block_id, ITEM_TYPE) for submission in submissions: student = user_by_anonymous_id(submission['student_id']) sub = { 'submission_id': submission['uuid'], 'username': student.username, 'student_id': submission['student_id'], 'fullname': student.profile.name, 'timestamp': submission['submitted_at'] or submission['created_at'], 'filename': submission['answer']["filename"], 'score': json.loads(submission['answer']['score']) if 'score' in submission['answer'] else 0, 'result': json.loads(submission['answer']['result']) } if is_course_cohorted(self.course_id): group = get_cohort(student, self.course_id, assign=False, use_cached=True) sub['cohort'] = group.name if group else '(não atribuído)' assignments.append(sub) assignments.sort(key=lambda assignment: assignment['timestamp'], reverse=True) return assignments