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 @@ |
| 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 | 18 | order = u'-{}'.format(Badge.USER_ATTR_OPTS[badge.user_attr]) |
| 19 | 19 | sqs = SearchQuerySet().filter(type='user') |
| 20 | 20 | user = sqs.order_by(order)[0] |
| 21 | - badge.awardees.remove(*list(badge.awardees.all())) | |
| 22 | 21 | badge.awardees.add(User.objects.get(pk=user.pk)) |
| 23 | 22 | continue |
| 24 | 23 | |
| ... | ... | @@ -36,9 +35,5 @@ class Command(BaseCommand): |
| 36 | 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 | 38 | for user in sqs: |
| 44 | 39 | badge.awardees.add(User.objects.get(pk=user.pk)) | ... | ... |