Exemple #1
0
    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
Exemple #2
0
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']
    ]
Exemple #3
0
    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'])
Exemple #4
0
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']
    ]
Exemple #5
0
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)
Exemple #6
0
    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
Exemple #7
0
    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'])
Exemple #8
0
    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
Exemple #9
0
    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