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') )
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'))
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)
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
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
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)
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)
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)