Esempio n. 1
0
 def test_get_repo_groupname_by_base(self):
     """
     Checks get_repo_groupname_by_base method
     """
     self.assertEqual(
         GroupTypes.get_repo_groupname_by_base(
             BaseGroupTypes.ADMINISTRATORS
         ),
         GroupTypes.REPO_ADMINISTRATOR
     )
     self.assertEqual(
         GroupTypes.get_repo_groupname_by_base(
             BaseGroupTypes.CURATORS
         ),
         GroupTypes.REPO_CURATOR
     )
     self.assertEqual(
         GroupTypes.get_repo_groupname_by_base(
             BaseGroupTypes.AUTHORS
         ),
         GroupTypes.REPO_AUTHOR
     )
     self.assertRaises(
         InvalidBaseGroupType,
         lambda: GroupTypes.get_repo_groupname_by_base('foo')
     )
Esempio n. 2
0
 def test_get_repo_groupname_by_base(self):
     """
     Checks get_repo_groupname_by_base method
     """
     self.assertEqual(
         GroupTypes.get_repo_groupname_by_base(
             BaseGroupTypes.ADMINISTRATORS), GroupTypes.REPO_ADMINISTRATOR)
     self.assertEqual(
         GroupTypes.get_repo_groupname_by_base(BaseGroupTypes.CURATORS),
         GroupTypes.REPO_CURATOR)
     self.assertEqual(
         GroupTypes.get_repo_groupname_by_base(BaseGroupTypes.AUTHORS),
         GroupTypes.REPO_AUTHOR)
     self.assertRaises(InvalidBaseGroupType,
                       lambda: GroupTypes.get_repo_groupname_by_base('foo'))
Esempio n. 3
0
 def delete(self, request, *args, **kwargs):
     """
     Delete a group for a user in a repo
     """
     # Get the user
     username = self.kwargs.get('username')
     user = User.objects.get(username=username)
     # Get the repo group type
     group_type = self.kwargs.get('group_type')
     repo_group_type = GroupTypes.get_repo_groupname_by_base(group_type)
     # Get the repo object
     repo = Repository.objects.get(slug=self.kwargs['repo_slug'])
     # if the group is administrators and this user is the last one
     # forbid to delete
     if (group_type == BaseGroupTypes.ADMINISTRATORS and
             is_last_admin_in_repo(user, repo)):
         return Response(
             data={
                 "detail": ("This is the last "
                            "administrator of the repository")
             },
             status=status.HTTP_400_BAD_REQUEST
         )
     remove_user_from_repo_group(user, repo, repo_group_type)
     return Response(status=status.HTTP_204_NO_CONTENT)
Esempio n. 4
0
def list_users_in_repo(repo, base_group_type=None):
    """
    List all the users in the repository groups.
    If the group type is specified, the list is limited to that group.

    Args:
        repo (learningresources.models.Repository): repository used to extract
            the right group to use
        base_group_type (unicode): group type from
            roles.permissions.BaseGroupTypes
    Returns:
        list (list of roles.user_models.UserGroup): list of users in one or
        all the repository groups
    """
    users_groups = []
    if base_group_type is not None:
        if not BaseGroupTypes.is_base_group_type(base_group_type):
            raise InvalidGroupType
        base_group_types = [base_group_type]
    else:
        base_group_types = BaseGroupTypes.all_base_groups()
    for base_group_type in base_group_types:
        group = Group.objects.get(
            name=GroupTypes.get_repo_groupname_by_base(
                base_group_type
            ).format(repo.slug)
        )
        users_groups += [
            UserGroup(user.username, base_group_type)
            for user in group.user_set.all()
        ]
    return users_groups
Esempio n. 5
0
def list_users_in_repo(repo, base_group_type=None):
    """
    List all the users in the repository groups.
    If the group type is specified, the list is limited to that group.

    Args:
        repo (learningresources.models.Repository): repository used to extract
            the right group to use
        base_group_type (unicode): group type from
            roles.permissions.BaseGroupTypes
    Returns:
        list (list of roles.user_models.UserGroup): list of users in one or
        all the repository groups
    """
    users_groups = []
    if base_group_type is not None:
        if not BaseGroupTypes.is_base_group_type(base_group_type):
            raise InvalidGroupType
        base_group_types = [base_group_type]
    else:
        base_group_types = BaseGroupTypes.all_base_groups()
    for base_group_type in base_group_types:
        group = Group.objects.get(name=GroupTypes.get_repo_groupname_by_base(
            base_group_type).format(repo.slug))
        users_groups += [
            UserGroup(user.username, base_group_type)
            for user in group.user_set.all()
        ]
    return users_groups
Esempio n. 6
0
 def remove_all_users_from_repo(self):
     """
     Helper method to remove all users from all repo groups.
     """
     # Remove all the users from all the groups in the repo.
     for user_group in list_users_in_repo(self.repo):
         user = User.objects.get(username=user_group.username)
         group_type = GroupTypes.get_repo_groupname_by_base(
             user_group.group_type)
         remove_user_from_repo_group(user, self.repo, group_type)
Esempio n. 7
0
 def remove_all_users_from_repo(self):
     """
     Helper method to remove all users from all repo groups.
     """
     # Remove all the users from all the groups in the repo.
     for user_group in list_users_in_repo(self.repo):
         user = User.objects.get(username=user_group.username)
         group_type = GroupTypes.get_repo_groupname_by_base(
             user_group.group_type
         )
         remove_user_from_repo_group(user, self.repo, group_type)
Esempio n. 8
0
 def perform_create(self, serializer):
     """Add a group for a user."""
     # Validate the incoming data
     serializer.is_valid(raise_exception=True)
     # Get the user
     username = self.kwargs.get('username')
     user = User.objects.get(username=username)
     # Get the repo group type
     group_type = serializer.data.get('group_type')
     repo_group_type = GroupTypes.get_repo_groupname_by_base(group_type)
     # Get the repo object
     repo = Repository.objects.get(slug=self.kwargs['repo_slug'])
     assign_user_to_repo_group(user, repo, repo_group_type)