from django.db import models
from django.db.models import permalink, Q
+import django.dispatch
from django.core.cache import cache
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
('daisy', _('DAISY file')),
)
+# not quite, but Django wants you to set a timeout
+CACHE_FOREVER = 2419200 # 28 days
+
class TagSubcategoryManager(models.Manager):
def __init__(self, subcategory):
super(TagSubcategoryManager, self).__init__()
tagged = managers.ModelTaggedItemManager(Tag)
tags = managers.TagDescriptor(Tag)
+ html_built = django.dispatch.Signal()
+
class AlreadyExists(Exception):
pass
def save(self, force_insert=False, force_update=False, reset_short_html=True, **kwargs):
self.sort_key = sortify(self.title)
+ ret = super(Book, self).save(force_insert, force_update)
+
if reset_short_html:
self.reset_short_html()
- return super(Book, self).save(force_insert, force_update)
+ return ret
@permalink
def get_absolute_url(self):
{'book': self, 'tags': tags, 'formats': formats}))
if self.id:
- cache.set(cache_key, short_html)
+ cache.set(cache_key, short_html, CACHE_FOREVER)
return mark_safe(short_html)
@property
new_fragment.save()
new_fragment.tags = set(meta_tags + themes + [book_tag] + ancestor_tags)
self.save()
+ self.html_built.send(sender=self)
return True
return False
fragment.tags = set(list(fragment.tags) + [book_tag])
book_descendants += list(child_book.children.all())
+ book.save()
+
# refresh cache
book.reset_tag_counter()
book.reset_theme_counter()
- book.save()
return book
def reset_tag_counter(self):
tags[tag.pk] = 1
if self.id:
- cache.set(cache_key, tags)
+ cache.set(cache_key, tags, CACHE_FOREVER)
return tags
def reset_theme_counter(self):
tags[tag.pk] = tags.get(tag.pk, 0) + 1
if self.id:
- cache.set(cache_key, tags)
+ cache.set(cache_key, tags, CACHE_FOREVER)
return tags
def pretty_title(self, html_links=False):
short_html = unicode(render_to_string('catalogue/fragment_short.html',
{'fragment': self}))
if self.id:
- cache.set(cache_key, short_html)
+ cache.set(cache_key, short_html, CACHE_FOREVER)
return mark_safe(short_html)