Exemple #1
0
 def test_claim_submission_lock_contested(self):
     # Trying to claim a lock when someone else has a lock raises a SubmissionLockContestedError
     assert SubmissionGradingLock.get_submission_lock(
         self.locked_submission_uuid) == self.existing_submission_lock
     with self.assertRaises(SubmissionLockContestedError):
         SubmissionGradingLock.claim_submission_lock(
             self.locked_submission_uuid, self.other_user_id)
Exemple #2
0
    def setUp(self):
        super().setUp()

        # create a test lock for test_submission_id by test_user_id_1
        self.test_submission_lock = SubmissionGradingLock.claim_submission_lock(
            self.test_submission_id,
            self.test_user_id_1,
        )
Exemple #3
0
    def test_claim_submission_lock_stale(self):
        # When a submission lock has become inactive (older than TIMEOUT), it can be claimed by a new user
        new_lock = SubmissionGradingLock.claim_submission_lock(
            self.expired_locked_submission_uuid, self.other_user_id)

        assert new_lock is not None
        assert SubmissionGradingLock.get_submission_lock(
            self.expired_locked_submission_uuid) == new_lock
Exemple #4
0
    def test_claim_submission_lock(self):
        # Can claim a lock on a submission without an existing lock
        assert SubmissionGradingLock.get_submission_lock(
            self.unlocked_submission_uuid) is None
        new_lock = SubmissionGradingLock.claim_submission_lock(
            self.unlocked_submission_uuid, self.user_id)

        assert new_lock is not None
        assert SubmissionGradingLock.get_submission_lock(
            self.unlocked_submission_uuid) == new_lock
Exemple #5
0
    def claim_submission_lock(self, submission_uuid, data, suffix=''):  # pylint: disable=unused-argument
        """
        Attempt to claim or reclaim a submission lock

        Returns:
        - Serialized submission lock info.

        Raises:
        - 403 in the case of a contested lock
        """
        anonymous_user_id = self.get_anonymous_user_id_from_xmodule_runtime()
        context = {'user_id': anonymous_user_id}

        try:
            submission_lock = SubmissionGradingLock.claim_submission_lock(
                submission_uuid, anonymous_user_id)
            return SubmissionLockSerializer(submission_lock,
                                            context=context).data
        except SubmissionLockContestedError as err:
            raise JsonHandlerError(403, err.get_error_code()) from err