list.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from datetime import timedelta
  2. from django.contrib.auth import get_user_model
  3. from django.db.models import Count
  4. from django.utils import timezone
  5. from rest_framework.pagination import PageNumberPagination
  6. from misago.conf import settings
  7. from misago.core.cache import cache
  8. from misago.core.shortcuts import get_object_or_404
  9. from misago.forums.models import Forum
  10. from misago.users.views.lists import get_active_posters_rankig
  11. from misago.users.models import Rank
  12. from misago.users.online.utils import make_users_status_aware
  13. from misago.users.serializers import ScoredUserSerializer
  14. def active(request):
  15. ranking = get_active_posters_rankig()
  16. make_users_status_aware(ranking['users'], request.user.acl)
  17. return {
  18. 'tracked_period': settings.MISAGO_RANKING_LENGTH,
  19. 'results': ScoredUserSerializer(ranking['users'], many=True).data,
  20. 'count': ranking['users_count']
  21. }
  22. def rank(request, queryset):
  23. rank_slug = request.query_params.get('rank')
  24. if not rank_slug:
  25. return
  26. rank = get_object_or_404(Rank.objects.filter(is_tab=True), slug=rank_slug)
  27. queryset = queryset.filter(rank=rank).order_by('slug')
  28. return {'queryset': queryset, 'paginate': True}
  29. LISTS = {
  30. 'active': active,
  31. 'rank': rank,
  32. }
  33. def list_endpoint(request):
  34. list_type = request.query_params.get('list')
  35. list_handler = LISTS.get(list_type)
  36. if list_handler:
  37. return list_handler(request)
  38. else:
  39. return