threadposts.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from rest_framework import viewsets
  2. from rest_framework.response import Response
  3. from misago.core.shortcuts import get_int_or_404
  4. from ..viewmodels.posts import ThreadPosts
  5. from ..viewmodels.thread import ForumThread
  6. class ViewSet(viewsets.ViewSet):
  7. thread = None
  8. posts = None
  9. def list(self, request, thread_pk):
  10. page = get_int_or_404(request.query_params.get('page', 0))
  11. if page == 1:
  12. page = 0 # api allows explicit first page
  13. thread = self.get_thread(request, thread_pk)
  14. posts = self.get_posts(request, thread, page)
  15. data = thread.get_frontend_context()
  16. data['post_set'] = posts.get_frontend_context()
  17. return Response(data)
  18. def get_thread(self, request, pk):
  19. return self.thread(request, get_int_or_404(pk), read_aware=True, subscription_aware=True)
  20. def get_posts(self, request, thread, page):
  21. return self.posts(request, thread, page)
  22. class ThreadPostsViewSet(ViewSet):
  23. thread = ForumThread
  24. posts = ThreadPosts