Commit d2f3f322e94656e18a861b99264cb68ff9c6656d
1 parent
6193fead
Exists in
master
and in
39 other branches
Adding command to update the badges
Showing
4 changed files
with
57 additions
and
0 deletions
Show diff stats
... | ... | @@ -0,0 +1,30 @@ |
1 | +# -*- coding: utf-8 -*- | |
2 | + | |
3 | +from django.core.management.base import BaseCommand, CommandError | |
4 | + | |
5 | +from accounts.models import User | |
6 | +from badger.utils import get_counters_to_badge | |
7 | +from badger.models import Badge | |
8 | + | |
9 | + | |
10 | +class Command(BaseCommand): | |
11 | + help = "Updates 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 | + for user in User.objects.all(): | |
18 | + user_counters = get_counters_to_badge(user) | |
19 | + | |
20 | + # TODO remove user if it doesn't sastify the conditions of the | |
21 | + # badge anymore | |
22 | + if badge.comparison == 'gte': | |
23 | + if user_counters[badge.user_attr] >= badge.value: | |
24 | + badge.awardees.add(user) | |
25 | + elif badge.comparison == 'lte': | |
26 | + if user_counters[badge.user_attr] <= badge.value: | |
27 | + badge.awardees.add(user) | |
28 | + elif badge.comparison == 'equal': | |
29 | + if user_counters[badge.user_attr] == badge.value: | |
30 | + badge.awardees.add(user) | ... | ... |
... | ... | @@ -0,0 +1,27 @@ |
1 | +# -*- coding: utf-8 -*- | |
2 | + | |
3 | +from django.db.models import Count | |
4 | + | |
5 | +from proxy.models import Revision, Ticket, Wiki | |
6 | +from super_archives.models import Message | |
7 | + | |
8 | + | |
9 | +def get_counters_to_badge(user): | |
10 | + count_revisions = Revision.objects.filter(author=user.username).count() | |
11 | + count_tickets = Ticket.objects.filter(author=user.username).count() | |
12 | + count_wikis = Wiki.objects.filter(author=user.username).count() | |
13 | + | |
14 | + return dict( | |
15 | + messages=user.emails.aggregate(Count('message'))['message__count'], | |
16 | + revisions=count_revisions, | |
17 | + tickets=count_tickets, | |
18 | + wikis=count_wikis, | |
19 | + contributions=count_revisions + count_tickets + count_wikis, | |
20 | + ) | |
21 | + | |
22 | +# using haystack | |
23 | +# sqs = SearchQuerySet() | |
24 | +# sqs.filter(type='changeset', author=user.get_full_name()).count() | |
25 | +# sqs.filter(type='wiki', author=user.get_full_name()).count() | |
26 | +# sqs.filter(type='ticket', author=user.get_full_name()).count() | |
27 | +# Should it use the author_and_username attr too? | ... | ... |