list.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from rest_framework.response import Response
  2. from misago.core.shortcuts import get_int_or_404
  3. from misago.threads.viewmodels.category import ThreadsRootCategory, ThreadsCategory
  4. from misago.threads.viewmodels.threads import ForumThreads
  5. class ListEndpointBase(object):
  6. category = None
  7. threads = None
  8. template_name = None
  9. def __call__(self, request, **kwargs):
  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. list_type = request.query_params.get('list', 'all')
  14. category = self.get_category(request, pk=request.query_params.get('category'))
  15. threads = self.get_threads(request, category, list_type, page)
  16. return Response(self.get_response_json(request, category, threads)['THREADS'])
  17. def get_threads(self, request, category, list_type, page):
  18. return self.threads(request, category, list_type, page)
  19. def get_response_json(self, request, category, threads):
  20. return threads.get_frontend_context()
  21. class ForumThreads(ListEndpointBase):
  22. threads = ForumThreads
  23. def get_category(self, request, pk=None):
  24. if pk:
  25. return ThreadsCategory(request, pk=pk)
  26. else:
  27. return ThreadsRootCategory(request)
  28. threads_list_endpoint = ForumThreads()