X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/87e084d47c335cd6f0b3e91d614999f55d148044..6108010e9aae2dad2049286d43a77640f833116f:/src/catalogue/helpers.py diff --git a/src/catalogue/helpers.py b/src/catalogue/helpers.py index b48c483ea..bb7fa6821 100644 --- a/src/catalogue/helpers.py +++ b/src/catalogue/helpers.py @@ -4,19 +4,20 @@ # 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. @@ -46,8 +47,6 @@ def get_top_level_related_tags(tags, categories=None): tag.count = _COUNTERS['count'][tuple(sorted(tagids + (tag.pk,)))] yield tag - #~ return related - def update_counters(): def combinations(things): @@ -90,3 +89,16 @@ def update_counters(): 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