def test_restricted_course_cache_with_save_delete(self): course_id = CourseLocator('abc', '123', 'doremi') RestrictedCourse.objects.create(course_key=course_id) # Warm the cache with self.assertNumQueries(1): RestrictedCourse.is_restricted_course(course_id) RestrictedCourse.is_disabled_access_check(course_id) # it should come from cache with self.assertNumQueries(0): RestrictedCourse.is_restricted_course(course_id) RestrictedCourse.is_disabled_access_check(course_id) self.assertFalse(RestrictedCourse.is_disabled_access_check(course_id)) # add new the course so the cache must get delete and again hit the db new_course_id = CourseLocator('def', '123', 'doremi') RestrictedCourse.objects.create( course_key=new_course_id, disable_access_check=True) with self.assertNumQueries(1): RestrictedCourse.is_restricted_course(new_course_id) RestrictedCourse.is_disabled_access_check(new_course_id) # it should come from cache with self.assertNumQueries(0): RestrictedCourse.is_restricted_course(new_course_id) RestrictedCourse.is_disabled_access_check(new_course_id) self.assertTrue( RestrictedCourse.is_disabled_access_check(new_course_id)) # deleting an object will delete cache also.and hit db on # get the is_restricted course abc = RestrictedCourse.objects.get(course_key=new_course_id) abc.delete() with self.assertNumQueries(1): RestrictedCourse.is_restricted_course(new_course_id) # it should come from cache with self.assertNumQueries(0): RestrictedCourse.is_restricted_course(new_course_id)
def test_restricted_course_cache_with_save_delete(self): course_id = CourseLocator('abc', '123', 'doremi') RestrictedCourse.objects.create(course_key=course_id) # Warm the cache with self.assertNumQueries(1): RestrictedCourse.is_restricted_course(course_id) RestrictedCourse.is_disabled_access_check(course_id) # it should come from cache with self.assertNumQueries(0): RestrictedCourse.is_restricted_course(course_id) RestrictedCourse.is_disabled_access_check(course_id) self.assertFalse(RestrictedCourse.is_disabled_access_check(course_id)) # add new the course so the cache must get delete and again hit the db new_course_id = CourseLocator('def', '123', 'doremi') RestrictedCourse.objects.create(course_key=new_course_id, disable_access_check=True) with self.assertNumQueries(1): RestrictedCourse.is_restricted_course(new_course_id) RestrictedCourse.is_disabled_access_check(new_course_id) # it should come from cache with self.assertNumQueries(0): RestrictedCourse.is_restricted_course(new_course_id) RestrictedCourse.is_disabled_access_check(new_course_id) self.assertTrue( RestrictedCourse.is_disabled_access_check(new_course_id)) # deleting an object will delete cache also.and hit db on # get the is_restricted course abc = RestrictedCourse.objects.get(course_key=new_course_id) abc.delete() with self.assertNumQueries(1): RestrictedCourse.is_restricted_course(new_course_id) # it should come from cache with self.assertNumQueries(0): RestrictedCourse.is_restricted_course(new_course_id)
def redirect_if_blocked(course_key, access_point='enrollment', **kwargs): """Redirect if the user does not have access to the course. In case of blocked if access_point is not enrollment and course has enabled is_disabled_access_check then user can view that course. Arguments: course_key (CourseKey): Location of the course the user is trying to access. Keyword Arguments: Same as `check_course_access` and `message_url_path` """ if settings.FEATURES.get('EMBARGO'): is_blocked = not check_course_access(course_key, **kwargs) if is_blocked: if access_point == "courseware": if not RestrictedCourse.is_disabled_access_check(course_key): return message_url_path(course_key, access_point) else: return message_url_path(course_key, access_point)
def redirect_if_blocked(course_key, access_point="enrollment", **kwargs): """Redirect if the user does not have access to the course. In case of blocked if access_point is not enrollment and course has enabled is_disabled_access_check then user can view that course. Arguments: course_key (CourseKey): Location of the course the user is trying to access. Keyword Arguments: Same as `check_course_access` and `message_url_path` """ if settings.FEATURES.get("EMBARGO"): is_blocked = not check_course_access(course_key, **kwargs) if is_blocked: if access_point == "courseware": if not RestrictedCourse.is_disabled_access_check(course_key): return message_url_path(course_key, access_point) else: return message_url_path(course_key, access_point)