unpublish.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. from django.core.exceptions import ValidationError as DjangoValidationError
  2. from rest_framework import fields, status
  3. from rest_framework.exceptions import ValidationError
  4. from rest_framework.response import Response
  5. from rest_framework.serializers import Serializer
  6. from wagtail.actions.unpublish_page import UnpublishPageAction
  7. from .base import APIAction
  8. class UnpublishPageAPIActionSerializer(Serializer):
  9. recursive = fields.BooleanField(default=False, required=False)
  10. class UnpublishPageAPIAction(APIAction):
  11. serializer = UnpublishPageAPIActionSerializer
  12. def _action_from_data(self, instance, data):
  13. return UnpublishPageAction(
  14. page=instance,
  15. user=self.request.user,
  16. include_descendants=data["recursive"],
  17. )
  18. def execute(self, instance, data):
  19. action = self._action_from_data(instance, data)
  20. try:
  21. action.execute()
  22. except DjangoValidationError as e:
  23. raise ValidationError(e.message_dict)
  24. serializer = self.view.get_serializer(instance)
  25. return Response(serializer.data, status=status.HTTP_200_OK)