123456789101112131415161718192021222324252627282930313233343536 |
- from django.core.management.base import BaseCommand, CommandError
- from django.db.models import F
- from misago.dbsettings import DBSettings
- from misago.models import Rank, User
- class Command(BaseCommand):
- """
- 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.
- """
- help = 'Updates users ranking'
- def handle(self, *args, **options):
- # Find special ranks
- special_ranks = []
- for rank in Rank.objects.filter(special=1):
- special_ranks.append(str(rank.pk))
- # Count users that are in ranking
- users_total = User.objects.exclude(rank__in=special_ranks).count()
- # Update Ranking
- defaulted_ranks = False
- for rank in Rank.objects.filter(special=0).order_by('order'):
- if defaulted_ranks:
- # Set ranks according to ranking
- rank.assign_rank(users_total, special_ranks)
- else:
- # Set default rank first
- User.objects.exclude(rank__in=special_ranks).update(rank=rank)
- defaulted_ranks = True
- # Inflate scores
- settings = DBSettings()
- inflation = float(100 - settings['ranking_inflation']) / 100
- User.objects.all().update(score=F('score') * inflation, ranking=0)
- self.stdout.write('Users ranking for has been updated.\n')
|