54 lines
2.1 KiB
Python
54 lines
2.1 KiB
Python
import logging
|
|
|
|
from django.contrib.auth.models import User
|
|
from rest_framework import status
|
|
from rest_framework.decorators import action
|
|
from rest_framework.exceptions import ValidationError
|
|
from rest_framework.generics import get_object_or_404
|
|
from rest_framework.response import Response
|
|
from rest_framework.viewsets import ModelViewSet
|
|
|
|
from core.mixins import ApiPermissionCheckMixin
|
|
from core.services.pagination import BasicPagination
|
|
from perms.models import Perm
|
|
from users.models import UserInfo
|
|
from users.serializers import UserInfoSerializer, UserInfoUpdateSerializer, UserSerializers
|
|
from users.services.userinfo import delete_user
|
|
|
|
LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
class NotDeletedUsersViewSet(ModelViewSet):
|
|
""" ViewSet for handling all operations with users """
|
|
|
|
filters = []
|
|
serializer_class = UserInfoSerializer
|
|
queryset = UserInfo.objects.exclude(user__username__contains='deleted')
|
|
console_permissions = {'list': [Perm.can_view_user_list], 'create': [Perm.can_add_user],
|
|
'retrieve': [Perm.can_view_user], 'update': [Perm.can_edit_user],
|
|
'partial_update': [Perm.can_edit_user],
|
|
"delete": [Perm.can_delete_user]}
|
|
pagination_class = BasicPagination
|
|
|
|
ordering_fields = ['user__id', 'comment', 'user__username', 'user__first_name', 'user__is_active', 'user__email']
|
|
|
|
class Meta:
|
|
model = UserInfo
|
|
|
|
def destroy(self, request, *args, **kwargs):
|
|
target_user = User.objects.get(pk=kwargs['pk'])
|
|
if request.user == target_user:
|
|
raise ValidationError({'details': 'You cannot delete your account'})
|
|
delete_user(user_deleting=target_user)
|
|
return Response(status=status.HTTP_204_NO_CONTENT)
|
|
|
|
def get_serializer_class(self):
|
|
if self.action == 'partial_update':
|
|
return UserInfoUpdateSerializer
|
|
else:
|
|
return UserInfoSerializer
|
|
|
|
@action(detail=False, methods=['GET'])
|
|
def whoami(self, request, *args, **kwargs):
|
|
user_serialize = UserSerializers(get_object_or_404(User, pk=request.user.pk))
|
|
return Response(user_serialize.data)
|