Commit b6931d87192bb747729fe96556509d14ff528c9b
1 parent
4bb4c06a
Exists in
master
and in
39 other branches
Adding command to rebuild user's badges
Showing
2 changed files
with
44 additions
and
5 deletions
Show diff stats
| @@ -0,0 +1,44 @@ | @@ -0,0 +1,44 @@ | ||
| 1 | +# -*- coding: utf-8 -*- | ||
| 2 | + | ||
| 3 | +from django.core.management.base import BaseCommand, CommandError | ||
| 4 | +from haystack.query import SearchQuerySet | ||
| 5 | + | ||
| 6 | +from accounts.models import User | ||
| 7 | +from badger.models import Badge | ||
| 8 | + | ||
| 9 | + | ||
| 10 | +class Command(BaseCommand): | ||
| 11 | + help = "Rebuild the user's badges." | ||
| 12 | + | ||
| 13 | + def handle(self, *args, **kwargs): | ||
| 14 | + for badge in Badge.objects.filter(type='auto'): | ||
| 15 | + if not badge.comparison: | ||
| 16 | + continue | ||
| 17 | + elif badge.comparison == 'biggest': | ||
| 18 | + order = u'-{}'.format(Badge.USER_ATTR_OPTS[badge.user_attr]) | ||
| 19 | + sqs = SearchQuerySet().filter(type='user') | ||
| 20 | + user = sqs.order_by(order)[0] | ||
| 21 | + badge.awardees.remove(*list(badge.awardees.all())) | ||
| 22 | + badge.awardees.add(User.objects.get(pk=user.pk)) | ||
| 23 | + continue | ||
| 24 | + | ||
| 25 | + comparison = u'__{}'.format(badge.comparison) if badge.comparison \ | ||
| 26 | + is not 'equal' else u'' | ||
| 27 | + | ||
| 28 | + key = u'{}{}'.format( | ||
| 29 | + Badge.USER_ATTR_OPTS[badge.user_attr], | ||
| 30 | + comparison | ||
| 31 | + ) | ||
| 32 | + opts = {key: badge.value} | ||
| 33 | + | ||
| 34 | + sqs = SearchQuerySet().filter( | ||
| 35 | + type='user', | ||
| 36 | + **opts | ||
| 37 | + ) | ||
| 38 | + | ||
| 39 | + # Remove all awardees to make sure that all of then | ||
| 40 | + # still accomplish the necessary to keep the badge | ||
| 41 | + badge.awardees.remove(*list(badge.awardees.all())) | ||
| 42 | + | ||
| 43 | + for user in sqs: | ||
| 44 | + badge.awardees.add(User.objects.get(pk=user.pk)) |
src/badger/management/commands/update_badges.py
| @@ -18,7 +18,6 @@ class Command(BaseCommand): | @@ -18,7 +18,6 @@ class Command(BaseCommand): | ||
| 18 | order = u'-{}'.format(Badge.USER_ATTR_OPTS[badge.user_attr]) | 18 | order = u'-{}'.format(Badge.USER_ATTR_OPTS[badge.user_attr]) |
| 19 | sqs = SearchQuerySet().filter(type='user') | 19 | sqs = SearchQuerySet().filter(type='user') |
| 20 | user = sqs.order_by(order)[0] | 20 | user = sqs.order_by(order)[0] |
| 21 | - badge.awardees.remove(*list(badge.awardees.all())) | ||
| 22 | badge.awardees.add(User.objects.get(pk=user.pk)) | 21 | badge.awardees.add(User.objects.get(pk=user.pk)) |
| 23 | continue | 22 | continue |
| 24 | 23 | ||
| @@ -36,9 +35,5 @@ class Command(BaseCommand): | @@ -36,9 +35,5 @@ class Command(BaseCommand): | ||
| 36 | **opts | 35 | **opts |
| 37 | ) | 36 | ) |
| 38 | 37 | ||
| 39 | - # Remove all awardees to make sure that all of then | ||
| 40 | - # still accomplish the necessary to keep the badge | ||
| 41 | - badge.awardees.remove(*list(badge.awardees.all())) | ||
| 42 | - | ||
| 43 | for user in sqs: | 38 | for user in sqs: |
| 44 | badge.awardees.add(User.objects.get(pk=user.pk)) | 39 | badge.awardees.add(User.objects.get(pk=user.pk)) |