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)