annotate gpp/bio/badges.py @ 265:1ba2c6bf6eb7

Closing #98. Animated GIFs were losing their transparency and animated properties when saved as avatars. Reworked the avatar save process to only run the avatar through PIL if it is too big. This preserves the original uploaded file if it is within the desired size settings. This may still mangle big animated gifs. If this becomes a problem, then maybe look into calling the PIL Image.resize() method directly. Moved the PIL image specific functions from bio.forms to a new module: core.image for better reusability in the future.
author Brian Neal <bgneal@gmail.com>
date Fri, 24 Sep 2010 02:12:09 +0000
parents b4305e18d3af
children 767cedc7d12a
rev   line source
bgneal@204 1 """This module contains user profile badge-related functionality."""
bgneal@204 2
bgneal@204 3 from bio.models import Badge
bgneal@204 4 from bio.models import BadgeOwnership
bgneal@204 5
bgneal@204 6
bgneal@204 7 # Numeric ID's for badges that are awarded for user actions:
bgneal@204 8 (CONTRIBUTOR_PIN, CALENDAR_PIN, NEWS_PIN, LINK_PIN, DOWNLOAD_PIN,
bgneal@204 9 SECURITY_PIN) = range(6)
bgneal@204 10
bgneal@204 11
bgneal@204 12 def award_badge(badge_id, user):
bgneal@204 13 """This function awards the badge specified by badge_id
bgneal@204 14 to the given user. If the user already has the badge,
bgneal@204 15 the badge count is incremented by one.
bgneal@204 16 """
bgneal@204 17 import logging
bgneal@204 18 try:
bgneal@204 19 badge = Badge.objects.get(numeric_id=badge_id)
bgneal@204 20 except Badge.DoesNotExist:
bgneal@204 21 logging.error("Can't award badge with numeric_id = %d" % badge_id)
bgneal@204 22 return
bgneal@204 23
bgneal@204 24 profile = user.get_profile()
bgneal@204 25
bgneal@204 26 # Does the user already have badges of this type?
bgneal@204 27 try:
bgneal@204 28 bo = BadgeOwnership.objects.get(profile=profile, badge=badge)
bgneal@204 29 except BadgeOwnership.DoesNotExist:
bgneal@204 30 # No badge of this type, yet
bgneal@204 31 bo = BadgeOwnership(profile=profile, badge=badge, count=1)
bgneal@204 32 else:
bgneal@204 33 # Already have this badge
bgneal@204 34 bo.count += 1
bgneal@204 35 bo.save()