list.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from django.http import Http404
  2. from rest_framework.response import Response
  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. try:
  11. page = int(request.query_params.get('page', 0))
  12. if page == 1:
  13. page = 0 # api allows explicit first page
  14. except (ValueError, TypeError):
  15. raise Http404()
  16. list_type = request.query_params.get('list', 'all')
  17. category = self.get_category(request, pk=request.query_params.get('category'))
  18. threads = self.get_threads(request, category, list_type, page)
  19. return Response(self.get_response_json(request, category, threads)['THREADS'])
  20. def get_threads(self, request, category, list_type, page):
  21. return self.threads(request, category, list_type, page)
  22. def get_response_json(self, request, category, threads):
  23. return threads.get_frontend_context()
  24. class ForumThreads(ListEndpointBase):
  25. threads = ForumThreads
  26. def get_category(self, request, pk=None):
  27. if pk:
  28. return ThreadsCategory(request, pk=pk)
  29. else:
  30. return ThreadsRootCategory(request)
  31. threads_list_endpoint = ForumThreads()