Commit d2f3f322e94656e18a861b99264cb68ff9c6656d

Authored by Luan
1 parent 6193fead

Adding command to update the badges

src/badger/management/__init__.py 0 → 100644
src/badger/management/commands/__init__.py 0 → 100644
src/badger/management/commands/update_badges.py 0 → 100644
... ... @@ -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)
... ...
src/badger/utils.py 0 → 100644
... ... @@ -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?
... ...