list.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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 rest_framework.response import Response
  7. from misago.conf import settings
  8. from misago.core.apipaginator import ApiPaginator
  9. from misago.core.cache import cache
  10. from misago.core.shortcuts import get_object_or_404
  11. from misago.forums.models import Forum
  12. from misago.users.views.lists import get_active_posters_rankig
  13. from misago.users.models import Rank
  14. from misago.users.online.utils import make_users_status_aware
  15. from misago.users.serializers import UserSerializer, ScoredUserSerializer
  16. Paginator = ApiPaginator(settings.MISAGO_USERS_PER_PAGE, 4)
  17. def active(request):
  18. ranking = get_active_posters_rankig()
  19. make_users_status_aware(
  20. ranking['users'], request.user.acl, fetch_state=True)
  21. return Response({
  22. 'tracked_period': settings.MISAGO_RANKING_LENGTH,
  23. 'results': ScoredUserSerializer(ranking['users'], many=True).data,
  24. 'count': ranking['users_count']
  25. })
  26. def rank(request):
  27. rank_slug = request.query_params.get('rank')
  28. if not rank_slug:
  29. return
  30. rank = get_object_or_404(Rank.objects, slug=rank_slug, is_tab=True)
  31. queryset = rank.user_set.select_related(
  32. 'rank', 'ban_cache', 'online_tracker')
  33. paginator = Paginator()
  34. users = paginator.paginate_queryset(queryset, request)
  35. make_users_status_aware(users, request.user.acl)
  36. return paginator.get_paginated_response(
  37. UserSerializer(users, many=True).data)
  38. LISTS = {
  39. 'active': active,
  40. 'rank': rank,
  41. }
  42. def list_endpoint(request):
  43. list_type = request.query_params.get('list')
  44. list_handler = LISTS.get(list_type)
  45. if list_handler:
  46. return list_handler(request)
  47. else:
  48. return