diff --git a/src/badger/management/commands/rebuild_badges.py b/src/badger/management/commands/rebuild_badges.py new file mode 100644 index 0000000..5cbb813 --- /dev/null +++ b/src/badger/management/commands/rebuild_badges.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +from django.core.management.base import BaseCommand, CommandError +from haystack.query import SearchQuerySet + +from accounts.models import User +from badger.models import Badge + + +class Command(BaseCommand): + help = "Rebuild the user's badges." + + def handle(self, *args, **kwargs): + for badge in Badge.objects.filter(type='auto'): + if not badge.comparison: + continue + elif badge.comparison == 'biggest': + order = u'-{}'.format(Badge.USER_ATTR_OPTS[badge.user_attr]) + sqs = SearchQuerySet().filter(type='user') + user = sqs.order_by(order)[0] + badge.awardees.remove(*list(badge.awardees.all())) + badge.awardees.add(User.objects.get(pk=user.pk)) + continue + + comparison = u'__{}'.format(badge.comparison) if badge.comparison \ + is not 'equal' else u'' + + key = u'{}{}'.format( + Badge.USER_ATTR_OPTS[badge.user_attr], + comparison + ) + opts = {key: badge.value} + + sqs = SearchQuerySet().filter( + type='user', + **opts + ) + + # Remove all awardees to make sure that all of then + # still accomplish the necessary to keep the badge + badge.awardees.remove(*list(badge.awardees.all())) + + for user in sqs: + badge.awardees.add(User.objects.get(pk=user.pk)) diff --git a/src/badger/management/commands/update_badges.py b/src/badger/management/commands/update_badges.py index 249a687..6920c89 100644 --- a/src/badger/management/commands/update_badges.py +++ b/src/badger/management/commands/update_badges.py @@ -18,7 +18,6 @@ class Command(BaseCommand): order = u'-{}'.format(Badge.USER_ATTR_OPTS[badge.user_attr]) sqs = SearchQuerySet().filter(type='user') user = sqs.order_by(order)[0] - badge.awardees.remove(*list(badge.awardees.all())) badge.awardees.add(User.objects.get(pk=user.pk)) continue @@ -36,9 +35,5 @@ class Command(BaseCommand): **opts ) - # Remove all awardees to make sure that all of then - # still accomplish the necessary to keep the badge - badge.awardees.remove(*list(badge.awardees.all())) - for user in sqs: badge.awardees.add(User.objects.get(pk=user.pk)) -- libgit2 0.21.2