""" views for actions you can take in the application """ from django.contrib.auth.decorators import login_required from django.shortcuts import get_object_or_404, redirect from django.template.response import TemplateResponse from django.utils.decorators import method_decorator from django.views import View from django.views.decorators.http import require_POST from bookwyrm import models # pylint: disable= no-self-use @method_decorator(login_required, name="dispatch") class Block(View): """blocking users""" def get(self, request): """list of blocked users""" return TemplateResponse(request, "preferences/blocks.html") def post(self, request, user_id): """block a user""" to_block = get_object_or_404(models.User, id=user_id) models.UserBlocks.objects.create( user_subject=request.user, user_object=to_block ) # remove the blocked users's lists from the groups models.List.remove_from_group(request.user, to_block) # remove the blocked user from all blocker's owned groups models.GroupMember.remove(request.user, to_block) return redirect("prefs-block") @require_POST @login_required def unblock(request, user_id): """undo a block""" to_unblock = get_object_or_404(models.User, id=user_id) block = get_object_or_404( models.UserBlocks, user_subject=request.user, user_object=to_unblock, ) block.delete() return redirect("prefs-block")