Coverage for src / mesh / views / views_inbox.py: 56%
25 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-08-27 14:14 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-08-27 14:14 +0000
1import ast
3from django.contrib.auth.mixins import LoginRequiredMixin
4from django.http import JsonResponse
5from django.shortcuts import get_object_or_404, render
6from django.utils.decorators import method_decorator
7from django.views import View
8from django.views.decorators.csrf import csrf_exempt
10from mesh.crud.discussion import get_inbox_comments, remove_inbox_item
11from mesh.models.orm import Comment, Discussion, Inbox
14class InboxItemsView(LoginRequiredMixin, View):
15 def get(self, request, **kwargs):
16 inbox_items = get_inbox_comments(request.user)
17 return render(request, "mesh/submission/inbox/inbox.html", {"inbox_items": inbox_items})
20@method_decorator([csrf_exempt], name="dispatch")
21class InboxItemRemoveView(LoginRequiredMixin, View):
22 def post(self, request, **kwargs):
23 request_body = ast.literal_eval(request.body.decode("UTF-8"))
24 if "comment_pk" in request_body:
25 comment = get_object_or_404(Comment, pk=request_body["comment_pk"])
26 remove_inbox_item(user=request.user, comment=comment)
27 elif "discussion_pk" in request_body:
28 discussion = get_object_or_404(Discussion, pk=request_body["discussion_pk"])
29 remove_inbox_item(user=request.user, discussion=discussion)
30 count = Inbox.objects.filter(user=request.user).count()
31 return JsonResponse({"inbox_count": count})