annotate gpp/smiley/models.py @ 197:2baadae33f2e

Got autocomplete working for the member search. Updated django and ran into a bug where url tags with comma separated kwargs starting consuming tons of CPU throughput. The work-around is to cut over to using spaces between arguments. This is now allowed to be consistent with other tags. Did some query optimization for the news app.
author Brian Neal <bgneal@gmail.com>
date Sat, 10 Apr 2010 04:32:24 +0000
parents 48621ba5c385
children 3a626c48e9ae
rev   line source
gremmie@1 1 """
gremmie@1 2 Models for the smiley application.
gremmie@1 3 """
gremmie@1 4 from django.db import models
bgneal@123 5 from django.core.cache import cache
bgneal@123 6
bgneal@128 7 CACHE_TIMEOUT = 60 * 60 # seconds
gremmie@1 8
gremmie@1 9
gremmie@1 10 class SmileyManager(models.Manager):
gremmie@1 11
gremmie@1 12 def get_smiley_map(self):
bgneal@128 13 """
bgneal@128 14 Returns a dictionary of 2-tuples, indexed by smiley codes.
bgneal@128 15 Element 0 of the tuple is the HTML representation of the smiley,
bgneal@128 16 and element 1 is the markdown version.
bgneal@128 17 The dictionary is cached.
bgneal@128 18 """
bgneal@123 19 map = cache.get('smiley_map')
bgneal@123 20 if map:
bgneal@123 21 return map
gremmie@1 22
bgneal@128 23 map = dict((s.code, (s.html(), s.markdown())) for s in self.all())
bgneal@123 24 cache.set('smiley_map', map, CACHE_TIMEOUT)
bgneal@123 25 return map
gremmie@1 26
bgneal@123 27 def get_smilies(self, extra=False):
bgneal@123 28 key = 'smileys' if not extra else 'smileys_extra'
bgneal@123 29 smilies = cache.get(key)
bgneal@123 30 if smilies:
bgneal@123 31 return smilies
bgneal@123 32
bgneal@123 33 smilies = self.filter(is_extra=extra)
bgneal@123 34 cache.set(key, smilies, CACHE_TIMEOUT)
bgneal@123 35 return smilies
gremmie@1 36
gremmie@1 37
gremmie@1 38 class Smiley(models.Model):
gremmie@1 39 image = models.ImageField(upload_to='smiley/images/')
gremmie@1 40 title = models.CharField(max_length=32)
gremmie@1 41 code = models.CharField(max_length=32)
bgneal@123 42 is_extra = models.BooleanField()
gremmie@1 43
gremmie@1 44 objects = SmileyManager()
gremmie@1 45
gremmie@1 46 class Meta:
gremmie@1 47 verbose_name_plural = 'Smilies'
gremmie@1 48 ordering = ('title', )
gremmie@1 49
gremmie@1 50 def __unicode__(self):
gremmie@1 51 return self.title
gremmie@1 52
gremmie@1 53 def get_absolute_url(self):
gremmie@1 54 return self.image.url
gremmie@1 55
gremmie@1 56 def html(self):
bgneal@128 57 """Returns a HTML img tag representation of the smiley."""
gremmie@1 58 if self.image:
bgneal@123 59 return (u'<img src="%s" alt="%s" title="%s" />' %
bgneal@123 60 (self.get_absolute_url(), self.title, self.title))
gremmie@1 61 return u''
gremmie@1 62 html.allow_tags = True
gremmie@1 63
bgneal@128 64 def markdown(self):
bgneal@128 65 """Returns a markdown representation of the smiley."""
bgneal@128 66 if self.image:
bgneal@128 67 return (u'![%s](%s "%s")' %
bgneal@128 68 (self.title, self.get_absolute_url(), self.title))
bgneal@128 69 return u''