Mercurial > public > sg101
diff bio/badges.py @ 581:ee87ea74d46b
For Django 1.4, rearranged project structure for new manage.py.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sat, 05 May 2012 17:10:48 -0500 |
parents | gpp/bio/badges.py@47f4259ce511 |
children | 9e803323a0d0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bio/badges.py Sat May 05 17:10:48 2012 -0500 @@ -0,0 +1,37 @@ +"""This module contains user profile badge-related functionality.""" +import logging + +from bio.models import Badge +from bio.models import BadgeOwnership + + +# Numeric ID's for badges that are awarded for user actions: +(CONTRIBUTOR_PIN, CALENDAR_PIN, NEWS_PIN, LINK_PIN, DOWNLOAD_PIN, + SECURITY_PIN, POTD_PIN) = range(7) + + +def award_badge(badge_id, user): + """This function awards the badge specified by badge_id + to the given user. If the user already has the badge, + the badge count is incremented by one. + """ + try: + badge = Badge.objects.get(numeric_id=badge_id) + except Badge.DoesNotExist: + logging.error("Can't award badge with numeric_id = %d", badge_id) + return + + profile = user.get_profile() + + # Does the user already have badges of this type? + try: + bo = BadgeOwnership.objects.get(profile=profile, badge=badge) + except BadgeOwnership.DoesNotExist: + # No badge of this type, yet + bo = BadgeOwnership(profile=profile, badge=badge, count=1) + else: + # Already have this badge + bo.count += 1 + bo.save() + + logging.info('Awarded %s with the badge: %s', user.username, badge.name)