def remove_credit_requirement_status(username, course_key, req_namespace, req_name): """ Remove the user's requirement status. This will remove the record from the credit requirement status table. The user will still be eligible for the credit in a course. Args: username (str): Username of the user course_key (CourseKey): Identifier for the course associated with the requirement. req_namespace (str): Namespace of the requirement (e.g. "grade" or "reverification") req_name (str): Name of the requirement (e.g. "grade" or the location of the ICRV XBlock) """ # Find the requirement we're trying to remove req_to_remove = CreditRequirement.get_course_requirement(course_key, req_namespace, req_name) # If we can't find the requirement, then the most likely explanation # is that there was a lag removing the credit requirements after the course # was published. We *could* attempt to remove the requirement here, # but that could cause serious performance issues if many users attempt to # lock the row at the same time. # Instead, we skip removing the requirement and log an error. if not req_to_remove: log.error( ( u'Could not remove credit requirement in course "%s" ' u'with namespace "%s" and name "%s" ' u'because the requirement does not exist. ' ), six.text_type(course_key), req_namespace, req_name ) return # Remove the requirement status CreditRequirementStatus.remove_requirement_status( username, req_to_remove )
def remove_credit_requirement_status(username, course_key, req_namespace, req_name): """ Remove the user's requirement status. This will remove the record from the credit requirement status table. The user will still be eligible for the credit in a course. Args: username (str): Username of the user course_key (CourseKey): Identifier for the course associated with the requirement. req_namespace (str): Namespace of the requirement (e.g. "grade" or "reverification") req_name (str): Name of the requirement (e.g. "grade" or the location of the ICRV XBlock) """ # Find the requirement we're trying to remove req_to_remove = CreditRequirement.get_course_requirement(course_key, req_namespace, req_name) # If we can't find the requirement, then the most likely explanation # is that there was a lag removing the credit requirements after the course # was published. We *could* attempt to remove the requirement here, # but that could cause serious performance issues if many users attempt to # lock the row at the same time. # Instead, we skip removing the requirement and log an error. if not req_to_remove: log.error( ( u'Could not remove credit requirement in course "%s" ' u'with namespace "%s" and name "%s" ' u'because the requirement does not exist. ' ), unicode(course_key), req_namespace, req_name ) return # Remove the requirement status CreditRequirementStatus.remove_requirement_status( username, req_to_remove )
def test_set_credit_requirement_status(self): self.add_credit_course() requirements = [ { "namespace": "grade", "name": "grade", "display_name": "Grade", "criteria": { "min_grade": 0.8 } }, { "namespace": "reverification", "name": "i4x://edX/DemoX/edx-reverification-block/assessment_uuid", "display_name": "Assessment 1", "criteria": {} } ] set_credit_requirements(self.course_key, requirements) course_requirements = CreditRequirement.get_course_requirements(self.course_key) self.assertEqual(len(course_requirements), 2) requirement = get_credit_requirement(self.course_key, "grade", "grade") set_credit_requirement_status("staff", requirement, 'satisfied', {}) course_requirement = CreditRequirement.get_course_requirement( requirement['course_key'], requirement['namespace'], requirement['name'] ) status = CreditRequirementStatus.objects.get(username="******", requirement=course_requirement) self.assertEqual(status.requirement.namespace, requirement['namespace']) self.assertEqual(status.status, "satisfied") set_credit_requirement_status( "staff", requirement, 'failed', {'failure_reason': "requirements not satisfied"} ) status = CreditRequirementStatus.objects.get(username="******", requirement=course_requirement) self.assertEqual(status.requirement.namespace, requirement['namespace']) self.assertEqual(status.status, "failed")