def approve(self, request, pk=None): instance = self.get_object() if not instance.is_approved: data = {'is_approved': True, 'approval_time': timezone.now()} serializer = self.get_serializer(instance, data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() return response.Ok(serializer.data) else: serializer = self.get_serializer(instance) return response.Ok(serializer.data)
def login(self, request): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user = user_services.get_and_authenticate_user( **serializer.validated_data) data = serializers.AuthUserSerializer(user).data return response.Ok(data)
def delete_image(self, request, pk=None): instance = self.get_object() if not instance.image: return response.BadRequest( {'error_message': 'Image is not present for this post'}) instance.image.delete(save=True) serializer = self.get_serializer(instance) return response.Ok(serializer.data)
def partial_update(self, request): """Update logged in user profile""" instance = self.get_object() serializer = self.get_serializer(instance, data=request.data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() return response.Ok(serializer.data)
def password_reset(self, request): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user = user_services.get_user_by_email(serializer.data['email']) if user: services.send_password_reset_mail(user) return response.Ok({ 'message': 'Further instructions will be sent to the email if it exists' })
def upload_image(self, request, pk=None): instance = self.get_object() if request.FILES: data = request.data serializer = self.get_serializer(instance, data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() return response.Ok(serializer.data) return response.BadRequest( {'error_message': 'Image file missing from the request'})
def retract(self, request, pk): proposal = get_object_or_404(models.Proposal, pk=pk) has_perm('can_retract_proposal', request.user, proposal, raise_exception=True) data = { 'status': models.Proposal.STATUS_CHOICES.RETRACTED, } serializer = self.get_serializer(proposal, data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() return response.Ok(serializer.data)
def accept(self, request, pk): proposal = get_object_or_404(models.Proposal, pk=pk) has_perm('can_accept_proposal', request.user, proposal, raise_exception=True) data = { 'status': models.Proposal.STATUS_CHOICES.ACCEPTED, 'accepted_at': timezone.now(), } serializer = self.get_serializer(proposal, data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() return response.Ok(serializer.data)
def unapprove(self, request, pk=None): instance = self.get_object() if not instance.is_approved: return response.BadRequest( {'error_message': 'Post has not been approved yet'}) elif not instance.is_posted: data = {'is_approved': False, 'approval_time': None} serializer = self.get_serializer(instance, data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() return response.Ok(serializer.data) else: return response.BadRequest({ 'error_message': 'Can not unapprove, post has already been published' })
def list(self, request): """Get logged in user profile""" serializer = self.get_serializer(self.get_object()) return response.Ok(serializer.data)
def logout(self, request): """ Calls Django logout method; Does not work for UserTokenAuth. """ logout(request) return response.Ok({"success": "Successfully logged out."})