Skip to content

fl_server_api.views.group

Classes:

Name Description
Group

Group Model ViewSet.

Attributes

Classes

Group

Bases: ViewSet


              flowchart TD
              fl_server_api.views.group.Group[Group]
              fl_server_api.views.base.ViewSet[ViewSet]

                              fl_server_api.views.base.ViewSet --> fl_server_api.views.group.Group
                


              click fl_server_api.views.group.Group href "" "fl_server_api.views.group.Group"
              click fl_server_api.views.base.ViewSet href "" "fl_server_api.views.base.ViewSet"
            

Group Model ViewSet.

Methods:

Name Description
create

Create a new group.

destroy

Remove group by id.

list

Get all groups.

partial_update

Update group information partially.

retrieve

Get group information by id.

update

Update group information.

Attributes:

Name Type Description
serializer_class

The serializer for the ViewSet.

Source code in fl_server_api/views/group.py
class Group(ViewSet):
    """
    Group Model ViewSet.
    """

    serializer_class = GroupSerializer
    """The serializer for the ViewSet."""

    def _get_group(self, user: UserModel, group_id: int) -> GroupModel:
        """
        Get a group by id if the user is a member of the group.

        Args:
            user (UserModel): The user making the request.
            group_id (int): The id of the group.

        Raises:
            PermissionDenied: If the user is not a member of the group.

        Returns:
            GroupModel: The group instance.
        """
        group = get_entity(GroupModel, pk=group_id)
        if not user.groups.contains(group):
            raise PermissionDenied("You are not allowed to access this group.")
        return group

    @extend_schema(
        responses={
            status.HTTP_200_OK: GroupSerializer,
            status.HTTP_403_FORBIDDEN: error_response_403,
        }
    )
    def list(self, request: HttpRequest) -> HttpResponse:
        """
        Get all groups.

        Args:
            request (HttpRequest): request object

        Raises:
            PermissionDenied: If user is not a superuser.

        Returns:
            HttpResponse: list of groups as json response
        """
        if not request.user.is_superuser:
            raise PermissionDenied("You are not allowed to access all groups.")
        groups = GroupModel.objects.all()
        serializer = GroupSerializer(groups, many=True)
        return Response(serializer.data)

    @extend_schema(
        responses={
            status.HTTP_200_OK: GroupSerializer,
            status.HTTP_400_BAD_REQUEST: ErrorSerializer,
            status.HTTP_403_FORBIDDEN: error_response_403,
        },
        examples=[_default_group_example]
    )
    def retrieve(self, request: HttpRequest, id: int) -> HttpResponse:
        """
        Get group information by id.

        Args:
            request (HttpRequest): request object
            id (int): group id

        Returns:
            HttpResponse: group as json response
        """
        group = self._get_group(request.user, id)
        serializer = GroupSerializer(group)
        return Response(serializer.data)

    @extend_schema(
        responses={
            status.HTTP_201_CREATED: GroupSerializer,
            status.HTTP_400_BAD_REQUEST: ErrorSerializer,
            status.HTTP_403_FORBIDDEN: error_response_403,
        },
        examples=[OpenApiExample(
            name="Create group",
            description="Create a new group.",
            value={"name": "My new amazing group"},
        )]
    )
    def create(self, request: HttpRequest) -> HttpResponse:
        """
        Create a new group.

        Args:
            request (HttpRequest): request object

        Returns:
            HttpResponse: new created group as json response
        """
        serializer = GroupSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)

    def _update(self, request: HttpRequest, id: int, *, partial: bool) -> HttpResponse:
        """
        Update group information.

        Args:
            request (HttpRequest): request object
            id (int): group id
            partial (bool): allow partial update

        Returns:
            HttpResponse: updated group as json response
        """
        group = self._get_group(request.user, id)
        serializer = GroupSerializer(group, data=request.data, partial=partial)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        if getattr(group, '_prefetched_objects_cache', None):
            # If 'prefetch_related' has been applied to a queryset, we need to
            # forcibly invalidate the prefetch cache on the instance.
            group._prefetched_objects_cache = {}
        return Response(serializer.data)

    @extend_schema(
        responses={
            status.HTTP_200_OK: GroupSerializer,
            status.HTTP_400_BAD_REQUEST: ErrorSerializer,
            status.HTTP_403_FORBIDDEN: error_response_403,
        },
        examples=[
            _default_group_example,
            OpenApiExample(
                name="Update group",
                description="Update group fields.",
                value={"name": "My new amazing group is the best!"},
            )
        ]
    )
    def update(self, request: HttpRequest, id: int) -> HttpResponse:
        """
        Update group information.

        Args:
            request (HttpRequest): request object
            id (int): group id

        Returns:
            HttpResponse: updated group as json response
        """
        return self._update(request, id, partial=False)

    @extend_schema(
        responses={
            status.HTTP_200_OK: GroupSerializer,
            status.HTTP_400_BAD_REQUEST: ErrorSerializer,
            status.HTTP_403_FORBIDDEN: error_response_403,
        },
        examples=[
            _default_group_example,
            OpenApiExample(
                name="Update group partially",
                description="Update only some group fields.",
                value={"name": "My new amazing group is the best!"},
            )
        ]
    )
    def partial_update(self, request: HttpRequest, id: int) -> HttpResponse:
        """
        Update group information partially.

        Args:
            request (HttpRequest): request object
            id (int): group id

        Returns:
            HttpResponse: updated group as json response
        """
        return self._update(request, id, partial=True)

    @extend_schema(
        responses={
            status.HTTP_204_NO_CONTENT: None,
            status.HTTP_403_FORBIDDEN: error_response_403,
        },
        examples=[_default_group_example]
    )
    def destroy(self, request: HttpRequest, id: int) -> HttpResponse:
        """
        Remove group by id.

        Args:
            request (HttpRequest): request object
            id (int): group id

        Returns:
            HttpResponse: 204 NO CONTENT
        """
        group = self._get_group(request.user, id)
        group.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

Attributes

serializer_class class-attribute instance-attribute
serializer_class = GroupSerializer

The serializer for the ViewSet.

Functions

create
create(request: HttpRequest) -> HttpResponse

Create a new group.

Parameters:

Name Type Description Default
request
HttpRequest

request object

required

Returns:

Name Type Description
HttpResponse HttpResponse

new created group as json response

Source code in fl_server_api/views/group.py
@extend_schema(
    responses={
        status.HTTP_201_CREATED: GroupSerializer,
        status.HTTP_400_BAD_REQUEST: ErrorSerializer,
        status.HTTP_403_FORBIDDEN: error_response_403,
    },
    examples=[OpenApiExample(
        name="Create group",
        description="Create a new group.",
        value={"name": "My new amazing group"},
    )]
)
def create(self, request: HttpRequest) -> HttpResponse:
    """
    Create a new group.

    Args:
        request (HttpRequest): request object

    Returns:
        HttpResponse: new created group as json response
    """
    serializer = GroupSerializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    serializer.save()
    return Response(serializer.data, status=status.HTTP_201_CREATED)
destroy
destroy(request: HttpRequest, id: int) -> HttpResponse

Remove group by id.

Parameters:

Name Type Description Default
request
HttpRequest

request object

required
id
int

group id

required

Returns:

Name Type Description
HttpResponse HttpResponse

204 NO CONTENT

Source code in fl_server_api/views/group.py
@extend_schema(
    responses={
        status.HTTP_204_NO_CONTENT: None,
        status.HTTP_403_FORBIDDEN: error_response_403,
    },
    examples=[_default_group_example]
)
def destroy(self, request: HttpRequest, id: int) -> HttpResponse:
    """
    Remove group by id.

    Args:
        request (HttpRequest): request object
        id (int): group id

    Returns:
        HttpResponse: 204 NO CONTENT
    """
    group = self._get_group(request.user, id)
    group.delete()
    return Response(status=status.HTTP_204_NO_CONTENT)
list
list(request: HttpRequest) -> HttpResponse

Get all groups.

Parameters:

Name Type Description Default
request
HttpRequest

request object

required

Raises:

Type Description
PermissionDenied

If user is not a superuser.

Returns:

Name Type Description
HttpResponse HttpResponse

list of groups as json response

Source code in fl_server_api/views/group.py
@extend_schema(
    responses={
        status.HTTP_200_OK: GroupSerializer,
        status.HTTP_403_FORBIDDEN: error_response_403,
    }
)
def list(self, request: HttpRequest) -> HttpResponse:
    """
    Get all groups.

    Args:
        request (HttpRequest): request object

    Raises:
        PermissionDenied: If user is not a superuser.

    Returns:
        HttpResponse: list of groups as json response
    """
    if not request.user.is_superuser:
        raise PermissionDenied("You are not allowed to access all groups.")
    groups = GroupModel.objects.all()
    serializer = GroupSerializer(groups, many=True)
    return Response(serializer.data)
partial_update
partial_update(request: HttpRequest, id: int) -> HttpResponse

Update group information partially.

Parameters:

Name Type Description Default
request
HttpRequest

request object

required
id
int

group id

required

Returns:

Name Type Description
HttpResponse HttpResponse

updated group as json response

Source code in fl_server_api/views/group.py
@extend_schema(
    responses={
        status.HTTP_200_OK: GroupSerializer,
        status.HTTP_400_BAD_REQUEST: ErrorSerializer,
        status.HTTP_403_FORBIDDEN: error_response_403,
    },
    examples=[
        _default_group_example,
        OpenApiExample(
            name="Update group partially",
            description="Update only some group fields.",
            value={"name": "My new amazing group is the best!"},
        )
    ]
)
def partial_update(self, request: HttpRequest, id: int) -> HttpResponse:
    """
    Update group information partially.

    Args:
        request (HttpRequest): request object
        id (int): group id

    Returns:
        HttpResponse: updated group as json response
    """
    return self._update(request, id, partial=True)
retrieve
retrieve(request: HttpRequest, id: int) -> HttpResponse

Get group information by id.

Parameters:

Name Type Description Default
request
HttpRequest

request object

required
id
int

group id

required

Returns:

Name Type Description
HttpResponse HttpResponse

group as json response

Source code in fl_server_api/views/group.py
@extend_schema(
    responses={
        status.HTTP_200_OK: GroupSerializer,
        status.HTTP_400_BAD_REQUEST: ErrorSerializer,
        status.HTTP_403_FORBIDDEN: error_response_403,
    },
    examples=[_default_group_example]
)
def retrieve(self, request: HttpRequest, id: int) -> HttpResponse:
    """
    Get group information by id.

    Args:
        request (HttpRequest): request object
        id (int): group id

    Returns:
        HttpResponse: group as json response
    """
    group = self._get_group(request.user, id)
    serializer = GroupSerializer(group)
    return Response(serializer.data)
update
update(request: HttpRequest, id: int) -> HttpResponse

Update group information.

Parameters:

Name Type Description Default
request
HttpRequest

request object

required
id
int

group id

required

Returns:

Name Type Description
HttpResponse HttpResponse

updated group as json response

Source code in fl_server_api/views/group.py
@extend_schema(
    responses={
        status.HTTP_200_OK: GroupSerializer,
        status.HTTP_400_BAD_REQUEST: ErrorSerializer,
        status.HTTP_403_FORBIDDEN: error_response_403,
    },
    examples=[
        _default_group_example,
        OpenApiExample(
            name="Update group",
            description="Update group fields.",
            value={"name": "My new amazing group is the best!"},
        )
    ]
)
def update(self, request: HttpRequest, id: int) -> HttpResponse:
    """
    Update group information.

    Args:
        request (HttpRequest): request object
        id (int): group id

    Returns:
        HttpResponse: updated group as json response
    """
    return self._update(request, id, partial=False)

Functions