123456789101112131415161718192021222324252627282930313233343536373839404142 |
- from django.db import transaction
- from rest_framework.response import Response
- from misago.threads.moderation import threads as moderation
- from misago.threads.permissions import allow_delete_thread
- from misago.threads.serializers import DeleteThreadsSerializer
- @transaction.atomic
- def delete_thread(request, thread):
- allow_delete_thread(request.user_acl, thread)
- moderation.delete_thread(request.user, thread)
- return Response({})
- def delete_bulk(request, viewmodel):
- serializer = DeleteThreadsSerializer(
- data={"threads": request.data},
- context={"request": request, "viewmodel": viewmodel},
- )
- if not serializer.is_valid():
- if "threads" in serializer.errors:
- errors = serializer.errors["threads"]
- if "details" in errors:
- return Response(hydrate_error_details(errors["details"]), status=400)
- return Response({"detail": errors[0]}, status=403)
- else:
- errors = list(serializer.errors)[0][0]
- return Response({"detail": errors}, status=400)
- for thread in serializer.validated_data["threads"]:
- with transaction.atomic():
- delete_thread(request, thread)
- return Response([])
- def hydrate_error_details(errors):
- for error in errors:
- error["thread"]["id"] = int(error["thread"]["id"])
- return errors
|