ranks.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from datetime import timedelta
  2. from django.utils import timezone
  3. from misago.core.cache import cache
  4. from misago.users.models import Online, Rank
  5. from misago.users.online.utils import get_online_queryset
  6. RANKS_CACHE_NAME = 'misago_ranks_online'
  7. RANKS_CACHE_TIME = 3 * 60
  8. def get_ranks_online():
  9. cached_online = cache.get(RANKS_CACHE_NAME, 'nada')
  10. if cached_online == 'nada':
  11. cached_online = get_ranks_from_db()
  12. cache.set(RANKS_CACHE_NAME, cached_online, RANKS_CACHE_TIME)
  13. return cached_online
  14. else:
  15. return cached_online
  16. def get_ranks_from_db():
  17. _displayed_ranks = []
  18. ranks_dict = {}
  19. for rank in Rank.objects.filter(is_on_index=True).order_by('order'):
  20. ranks_dict[rank.pk] = {
  21. 'id': rank.id,
  22. 'pk': rank.pk,
  23. 'name': rank.name,
  24. 'slug': rank.slug,
  25. 'description': rank.description,
  26. 'title': rank.title,
  27. 'css_class': rank.css_class,
  28. 'online': []
  29. }
  30. _displayed_ranks.append(ranks_dict[rank.pk])
  31. queryset = get_online_queryset().filter(is_visible_on_index=True)
  32. for tracker in queryset.iterator():
  33. if tracker.user.rank_id in ranks_dict:
  34. ranks_dict[tracker.user.rank_id]['online'].append({
  35. 'id': tracker.user.id,
  36. 'pk': tracker.user.pk,
  37. 'username': tracker.user.username,
  38. 'slug': tracker.user.slug,
  39. 'title': tracker.user.title,
  40. })
  41. ranks_online = []
  42. for rank in _displayed_ranks:
  43. if rank['online']:
  44. ranks_online.append(rank)
  45. return ranks_online
  46. def clear_ranks_online_cache():
  47. cache.delete(RANKS_CACHE_NAME)