1234567891011121314151617181920212223242526272829303132333435363738394041 |
- from django.db import transaction
- from rest_framework import viewsets
- from rest_framework.decorators import detail_route
- from rest_framework.response import Response
- from misago.core.shortcuts import get_int_or_404, get_object_or_404
- from misago.readtracker.categoriestracker import read_category
- from misago.threads.threadtypes import trees_map
- from .models import THREADS_ROOT_NAME, Category
- from .permissions import allow_browse_category, allow_see_category
- from .serializers import CategorySerializer
- from .utils import get_categories_tree
- class CategoryViewSet(viewsets.ViewSet):
- def list(self, request):
- categories_tree = get_categories_tree(request.user)
- return Response(CategorySerializer(categories_tree, many=True).data)
- @detail_route(methods=['post'])
- @transaction.atomic
- def read(self, request, pk):
- request.user.lock()
- category_id = get_int_or_404(pk)
- threads_tree_id = trees_map.get_tree_id_for_root(THREADS_ROOT_NAME)
- category = get_object_or_404(Category,
- id=category_id,
- tree_id=threads_tree_id,
- )
- if category.level:
- allow_see_category(request.user, category)
- allow_browse_category(request.user, category)
- read_category(request.user, category)
- return Response({'detail': 'ok'})
|