def get_aggregate_exclusion_user_ids(course_key, roles=None): # pylint: disable=invalid-name """ This helper method will return the list of user ids that are marked in roles that can be excluded from certain aggregate queries. The list of roles to exclude can either be passed in roles argument or defined in a AGGREGATION_EXCLUDE_ROLES settings variable. """ cache_key = get_cache_key('exclude_users', unicode(course_key) + '_'.join(roles or 'None')) cached_data = cache.get(cache_key) if cached_data is not None: return cached_data exclude_user_ids = set() exclude_role_list = roles or getattr(settings, 'AGGREGATION_EXCLUDE_ROLES', [CourseStaffRole.ROLE]) for role in exclude_role_list: users = CourseRole(role, course_key).users_with_role() user_ids = set() for user in users: user_ids.add(user.id) exclude_user_ids = exclude_user_ids.union(user_ids) cache.set(cache_key, exclude_user_ids, 60 * 60) return exclude_user_ids
def test_group_name_case_insensitive(self): uppercase_loc = "i4x://ORG/COURSE/course/NAME" lowercase_loc = uppercase_loc.lower() lowercase_group = "role_org/course/name" uppercase_group = lowercase_group.upper() lowercase_user = UserFactory(groups=lowercase_group) uppercase_user = UserFactory(groups=uppercase_group) self.assertTrue( CourseRole("role", lowercase_loc).has_user(lowercase_user)) self.assertTrue( CourseRole("role", uppercase_loc).has_user(lowercase_user)) self.assertTrue( CourseRole("role", lowercase_loc).has_user(uppercase_user)) self.assertTrue( CourseRole("role", uppercase_loc).has_user(uppercase_user))
def check(self, user, instance=None): if not user.is_authenticated: return False if isinstance(instance, CourseKey): course_key = instance elif isinstance(instance, (CourseDescriptor, CourseOverview)): course_key = instance.id elif isinstance(instance, (ErrorDescriptor, XModule, XBlock)): course_key = instance.scope_ids.usage_id.course_key else: course_key = CourseKey.from_string(str(instance)) for role in self.roles: if CourseRole(role, course_key).has_user(user): return True if OrgRole(role, course_key.org).has_user(user): return True return False
def test_group_name_case_sensitive(self): uppercase_course_id = "ORG/COURSE/NAME" lowercase_course_id = uppercase_course_id.lower() uppercase_course_key = SlashSeparatedCourseKey.from_deprecated_string(uppercase_course_id) lowercase_course_key = SlashSeparatedCourseKey.from_deprecated_string(lowercase_course_id) role = "role" lowercase_user = UserFactory() CourseRole(role, lowercase_course_key).add_users(lowercase_user) uppercase_user = UserFactory() CourseRole(role, uppercase_course_key).add_users(uppercase_user) self.assertTrue(CourseRole(role, lowercase_course_key).has_user(lowercase_user)) self.assertFalse(CourseRole(role, uppercase_course_key).has_user(lowercase_user)) self.assertFalse(CourseRole(role, lowercase_course_key).has_user(uppercase_user)) self.assertTrue(CourseRole(role, uppercase_course_key).has_user(uppercase_user))