Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
    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))
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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))