#
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
-from django.db.models import Count
+from django.core.cache import cache
+
from .models import Tag, Book
from os.path import getmtime
import cPickle
from collections import defaultdict
-
BOOK_CATEGORIES = ('author', 'epoch', 'genre', 'kind')
-
_COUNTERS = None
_COUNTER_TIME = None
+
+
def get_top_level_related_tags(tags, categories=None):
"""
Finds tags related to given tags through books, and counts their usage.
tag.count = _COUNTERS['count'][tuple(sorted(tagids + (tag.pk,)))]
yield tag
- #~ return related
-
def update_counters():
def combinations(things):
with open(settings.CATALOGUE_COUNTERS_FILE, 'w') as f:
cPickle.dump(counters, f)
+
+
+def get_audiobook_tags():
+ audiobook_tag_ids = cache.get('audiobook_tags')
+ if audiobook_tag_ids is None:
+ books_with_audiobook = Book.objects.filter(media__type__in=('mp3', 'ogg'))\
+ .distinct().values_list('pk', flat=True)
+ audiobook_tag_ids = Tag.objects.filter(
+ items__content_type=ContentType.objects.get_for_model(Book),
+ items__object_id__in=list(books_with_audiobook)).distinct().values_list('pk', flat=True)
+ audiobook_tag_ids = list(audiobook_tag_ids)
+ cache.set('audiobook_tags', audiobook_tag_ids)
+ return audiobook_tag_ids