"""User API Views""" from drf_yasg2.utils import swagger_auto_schema from rest_framework.decorators import action from rest_framework.request import Request from rest_framework.response import Response from rest_framework.serializers import ( BooleanField, ModelSerializer, SerializerMethodField, ) from rest_framework.viewsets import ModelViewSet from passbook.core.models import User from passbook.lib.templatetags.passbook_utils import avatar class UserSerializer(ModelSerializer): """User Serializer""" is_superuser = BooleanField(read_only=True) avatar = SerializerMethodField() def get_avatar(self, user: User) -> str: """Add user's avatar as URL""" return avatar(user) class Meta: model = User fields = ["pk", "username", "name", "is_superuser", "email", "avatar"] class UserViewSet(ModelViewSet): """User Viewset""" queryset = User.objects.all() serializer_class = UserSerializer @swagger_auto_schema(responses={200: UserSerializer(many=False)}) @action(detail=False) # pylint: disable=invalid-name def me(self, request: Request) -> Response: """Get information about current user""" return Response(UserSerializer(request.user).data)