from rest_framework import status
from rest_framework.decorators import action
from rest_framework.response import Response

from .serializers import SetPasswordSerializer


class SetPasswordApiMixin(object):
    @action(serializer_class=SetPasswordSerializer)
    def set_password(self, request, pk):
        obj = self.get_object()
        data = request.DATA
        if isinstance(data, basestring):
            data = {'password': data}
        serializer = SetPasswordSerializer(data=data)
        if serializer.is_valid():
            obj.set_password(serializer.data['password'])
            obj.save(update_fields=['password'])
            return Response({'status': 'password changed'})
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)