]> git.0d.be Git - panikdb.git/blob - panikdb/emissions/search_indexes.py
35a6aeb86d0e372d572a4d08e9bac48bc59ff612
[panikdb.git] / panikdb / emissions / search_indexes.py
1 import datetime
2
3 from haystack import indexes
4
5 from .models import Emission, Episode, NewsItem
6
7
8 class EmissionIndex(indexes.SearchIndex, indexes.Indexable):
9     title = indexes.CharField(model_attr='title', boost=1.5)
10     text = indexes.CharField(document=True, use_template=True)
11     categories = indexes.MultiValueField(faceted=True)
12
13     def prepare(self, obj):
14         data = super(EmissionIndex, self).prepare(obj)
15         data['boost'] = 1.3
16         return data
17
18     def get_model(self):
19         return Emission
20
21     def prepare_categories(self, obj):
22         return [category.title for category in obj.categories.all()]
23
24
25 class EpisodeIndex(indexes.SearchIndex, indexes.Indexable):
26     title = indexes.CharField(model_attr='title', boost=1.5)
27     text = indexes.CharField(document=True, use_template=True)
28     tags = indexes.MultiValueField(faceted=True)
29
30     def get_model(self):
31         return Episode
32
33     def prepare_tags(self, obj):
34         return [tag.name for tag in obj.tags.all()]
35
36
37 class NewsItemIndex(indexes.SearchIndex, indexes.Indexable):
38     title = indexes.CharField(model_attr='title', boost=1.5)
39     text = indexes.CharField(document=True, use_template=True)
40     tags = indexes.MultiValueField(faceted=True)
41
42     def prepare(self, obj):
43         data = super(NewsItemIndex, self).prepare(obj)
44         today = datetime.datetime.today()
45         if obj.datetime < today - datetime.timedelta(weeks=15):
46             # push older news in later pages
47             data['boost'] = 0.8
48         elif obj.datetime > today - datetime.timedelta(weeks=3):
49             # pull recent news
50             data['boost'] = 1.5
51         return data
52
53     def get_model(self):
54         return NewsItem
55
56     def prepare_tags(self, obj):
57         return [tag.name for tag in obj.tags.all()]