updateranking.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334
  1. from django.core.management.base import BaseCommand, CommandError
  2. from django.db.models import F
  3. from misago.ranks.models import Rank
  4. from misago.users.models import User
  5. class Command(BaseCommand):
  6. """
  7. This command is intended to work as CRON job fired of once per day or less if you have more users to update user ranking.
  8. """
  9. help = 'Updates users ranking'
  10. def handle(self, *args, **options):
  11. # Find special ranks
  12. special_ranks = []
  13. for rank in Rank.objects.filter(special=1):
  14. special_ranks.append(str(rank.pk))
  15. # Count users that are in ranking
  16. users_total = User.objects.exclude(rank__in=special_ranks).count()
  17. # Update Ranking
  18. defaulted_ranks = False
  19. for rank in Rank.objects.filter(special=0).order_by('order'):
  20. if defaulted_ranks:
  21. # Set ranks according to ranking
  22. rank.assign_rank(users_total, special_ranks)
  23. else:
  24. # Set default rank first
  25. User.objects.exclude(rank__in=special_ranks).update(rank=rank)
  26. defaulted_ranks = True
  27. # Inflate scores
  28. User.objects.all().update(score=F('score') * 0.95) # TODO: Ranking system SETTINGS!
  29. self.stdout.write('Users ranking for has been updated.\n')