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)) | ... | ... |