updateranking.py 1.3 KB

1234567891011121314151617181920212223242526272829303132
  1. from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
  2. from django.core.management.base import BaseCommand, CommandError
  3. from django.utils import timezone
  4. from optparse import make_option
  5. from misago.users.models import User, Rank
  6. class Command(BaseCommand):
  7. """
  8. 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.
  9. """
  10. help = 'Updates users ranking'
  11. def handle(self, *args, **options):
  12. # Find special ranks
  13. special_ranks = []
  14. for rank in Rank.objects.filter(special=1):
  15. special_ranks.append(str(rank.pk))
  16. # Count users that are in ranking
  17. users_total = User.objects.exclude(rank__in=special_ranks).count()
  18. # Update Ranking
  19. defaulted_ranks = False
  20. for rank in Rank.objects.filter(special=0).order_by('order'):
  21. if defaulted_ranks:
  22. # Set ranks according to ranking
  23. rank.assign_rank(users_total, special_ranks)
  24. else:
  25. # Set default rank first
  26. Users.objects.exclude(rank__in=special_ranks).update(rank=rank)
  27. defaulted_ranks = True
  28. self.stdout.write('Users ranking for has been updated.\n')