core: add avatars to user api
This commit is contained in:
		@ -1,22 +1,32 @@
 | 
			
		||||
"""User API Views"""
 | 
			
		||||
from rest_framework.serializers import BooleanField, ModelSerializer
 | 
			
		||||
from rest_framework.viewsets import ModelViewSet
 | 
			
		||||
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"]
 | 
			
		||||
        fields = ["pk", "username", "name", "is_superuser", "email", "avatar"]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UserViewSet(ModelViewSet):
 | 
			
		||||
@ -26,6 +36,7 @@ class UserViewSet(ModelViewSet):
 | 
			
		||||
    serializer_class = UserSerializer
 | 
			
		||||
 | 
			
		||||
    @action(detail=False)
 | 
			
		||||
    # pylint: disable=invalid-name
 | 
			
		||||
    def me(self, request: Request) -> Response:
 | 
			
		||||
        """Get information about current user"""
 | 
			
		||||
        return Response(UserSerializer(request.user).data)
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@ class TestImpersonation(TestCase):
 | 
			
		||||
 | 
			
		||||
        self.client.get(reverse("passbook_core:impersonate-end"))
 | 
			
		||||
 | 
			
		||||
        response = self.client.get(reverse("passbook_core:overview"))
 | 
			
		||||
        response = self.client.get(reverse("passbook_api:user-me"))
 | 
			
		||||
        self.assertNotIn(self.other_user.username, response.content.decode())
 | 
			
		||||
        self.assertIn(self.pbadmin.username, response.content.decode())
 | 
			
		||||
 | 
			
		||||
@ -43,7 +43,7 @@ class TestImpersonation(TestCase):
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        response = self.client.get(reverse("passbook_core:overview"))
 | 
			
		||||
        response = self.client.get(reverse("passbook_api:user-me"))
 | 
			
		||||
        self.assertIn(self.other_user.username, response.content.decode())
 | 
			
		||||
        self.assertNotIn(self.pbadmin.username, response.content.decode())
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
"""passbook URL Configuration"""
 | 
			
		||||
from django.urls import path
 | 
			
		||||
 | 
			
		||||
from passbook.core.views import impersonate, overview, user, shell
 | 
			
		||||
from passbook.core.views import impersonate, overview, shell, user
 | 
			
		||||
 | 
			
		||||
urlpatterns = [
 | 
			
		||||
    # User views
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user