threadposts.py 994 B

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 get_thread(self, request, pk):
  10. return self.thread(request, get_int_or_404(pk))
  11. def get_posts(self, request, thread, page):
  12. return self.posts(request, thread, page)
  13. def list(self, request, thread_pk):
  14. page = get_int_or_404(request.query_params.get('page', 0))
  15. if page == 1:
  16. page = 0 # api allows explicit first page
  17. thread = self.get_thread(request, thread_pk)
  18. posts = self.get_posts(request, thread, page)
  19. data = thread.get_frontend_context()
  20. data['post_set'] = posts.get_frontend_context()
  21. return Response(data)
  22. class ThreadPostsViewSet(ViewSet):
  23. thread = ForumThread
  24. posts = ThreadPosts