Source code for tcms.rpc.api.group
# Copyright (c) 2025-2026 Alexander Todorov <atodorov@MrSenko.com>
#
# Licensed under the GPL 2.0: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
from django.contrib.auth.models import Group
from django.db.models import Value
from django.db.models.functions import Concat
from modernrpc.core import rpc_method
from tcms.rpc.decorators import permissions_required
[docs]
@permissions_required("auth.view_group")
@rpc_method(name="Group.filter")
def filter(query): # pylint: disable=redefined-builtin
"""
.. function:: RPC Group.filter(query)
Search and return the resulting list of groups.
:param query: Field lookups for :class:`django.contrib.auth.models.Group`
:type query: dict
:return: Serialized list of :class:`django.contrib.auth.models.Group` objects
:rtype: list(dict)
:raises PermissionDenied: if missing the *auth.view_group* permission
.. versionadded:: 15.3
"""
return list(
Group.objects.filter(**query)
.values(
"id",
"name",
)
.order_by("id")
.distinct()
)
[docs]
@permissions_required("auth.view_group")
@rpc_method(name="Group.permissions")
def permissions(group_id): # pylint: disable=redefined-builtin
"""
.. function:: RPC Group.permissions(query)
Search and return the resulting list of permissions for a particular group.
:param group_id: PK for a :class:`django.contrib.auth.models.Group` object
:type group_id: int
:return: Serialized list of permission labels
:rtype: list(str)
:raises PermissionDenied: if missing the *auth.view_group* permission
:raises DoesNotExist: if group doesn't exist
.. versionadded:: 15.3
"""
group = Group.objects.get(pk=group_id)
return list(
group.permissions.annotate(
perm_name=Concat("content_type__app_label", Value("."), "codename")
)
.values_list("perm_name", flat=True)
.distinct()
)
[docs]
@permissions_required(("auth.view_group", "auth.view_user"))
@rpc_method(name="Group.users")
def users(group_id): # pylint: disable=redefined-builtin
"""
.. function:: RPC Group.users(group_id)
Return the list of users for a particular group.
:param group_id: PK for a :class:`django.contrib.auth.models.Group` object
:type group_id: int
:return: Serialized list of :class:`django.contrib.auth.models.User` objects
:rtype: list(dict)
:raises PermissionDenied: if missing the *auth.view_group* permission
:raises PermissionDenied: if missing the *auth.view_user* permission
:raises DoesNotExist: if group doesn't exist
.. versionadded:: 15.3
"""
group = Group.objects.get(pk=group_id)
return list(
group.user_set.values(
"id",
"username",
).distinct()
)