simplify generation of SearchEntrys
[mygpo.git] / mygpo / search / util.py
blobdeba497d93ff62c6aadba6a1e956ebc833a6decb
1 from django.db.models import Count
2 from mygpo.api.models import Subscription, Podcast
3 from mygpo.data.models import PodcastTag
6 def podcast_group_entry(group, subscriber_count=None):
7 from mygpo.search.models import SearchEntry
9 if not subscriber_count:
10 subscriber_count = Subscription.objects.filter(podcast__group=group).values('user').distinct().count()
12 entry = SearchEntry()
13 entry.text = group.title
14 entry.obj_type = 'podcast_group'
15 entry.obj_id = group.id
17 podcasts = Podcast.objects.filter(group=group)
18 entry.tags = tag_string(PodcastTag.objects.filter(podcast__in=podcasts))
20 entry.priority = subscriber_count
22 return entry
25 def podcast_entry(podcast, subscriber_count=None):
26 from mygpo.search.models import SearchEntry
28 if not subscriber_count:
29 subscriber_count = Subscription.objects.filter(podcast=podcast).values('user').distinct().count()
31 entry = SearchEntry()
32 entry.text = podcast.title
33 entry.obj_type = 'podcast'
34 entry.obj_id = podcast.id
36 entry.tags = tag_string(PodcastTag.objects.filter(podcast=podcast))
38 entry.priority = subscriber_count
40 return entry
43 def tag_string(tags, max_length=200):
44 """
45 returns a string of the most-assigned tags
47 tags is expected to be a PodcastTag QuerySet
48 """
49 tags = PodcastTag.objects.top_tags(tags)
50 return ','.join([t['tag'] for t in tags])[:max_length]