list.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from rest_framework.response import Response
  2. from misago.core.shortcuts import get_int_or_404
  3. from ...viewmodels.category import (
  4. ThreadsCategory, ThreadsRootCategory, PrivateThreadsCategory)
  5. from ...viewmodels.threads import ForumThreads, PrivateThreads
  6. class ListEndpointBase(object):
  7. category = None
  8. threads = None
  9. template_name = None
  10. def __call__(self, request, **kwargs):
  11. page = get_int_or_404(request.query_params.get('page', 0))
  12. if page == 1:
  13. page = 0 # api allows explicit first page
  14. list_type = request.query_params.get('list', 'all')
  15. category = self.get_category(request, pk=request.query_params.get('category'))
  16. threads = self.get_threads(request, category, list_type, page)
  17. return Response(self.get_response_json(request, category, threads)['THREADS'])
  18. def get_threads(self, request, category, list_type, page):
  19. return self.threads(request, category, list_type, page)
  20. def get_response_json(self, request, category, threads):
  21. return threads.get_frontend_context()
  22. class ForumThreadsList(ListEndpointBase):
  23. threads = ForumThreads
  24. def get_category(self, request, pk=None):
  25. if pk:
  26. return ThreadsCategory(request, pk=pk)
  27. else:
  28. return ThreadsRootCategory(request)
  29. class PrivateThreadsList(ListEndpointBase):
  30. threads = PrivateThreads
  31. def get_category(self, request, pk=None):
  32. return PrivateThreadsCategory(request)
  33. threads_list_endpoint = ForumThreadsList()
  34. private_threads_list_endpoint = PrivateThreadsList()