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