search_indexes.py
3.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# -*- coding: utf-8 -*-
from datetime import datetime
from django.db.models import Q
from haystack import indexes
from .models import Ticket, Wiki, Revision
class WikiIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
name = indexes.CharField(model_attr='name')
wiki_text = indexes.CharField(model_attr='wiki_text')
author = indexes.CharField(null=True)
author_url = indexes.CharField(null=True)
collaborators = indexes.CharField(model_attr='collaborators', null=True)
created = indexes.DateTimeField(model_attr='created', null=True)
modified = indexes.DateTimeField(model_attr='modified', null=True)
url = indexes.CharField(model_attr='get_absolute_url')
type = indexes.CharField()
def get_model(self):
return Wiki
def get_updated_field(self):
return 'modified'
def prepare_author(self, obj):
author = obj.get_author()
if author:
return author.get_full_name()
return obj.author
def prepare_author_url(self, obj):
author = obj.get_author()
if author:
return author.get_absolute_url()
return None
def prepare_type(self, obj):
return u'wiki'
class TicketIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
summary = indexes.CharField(model_attr='summary', null=True)
description = indexes.CharField(model_attr='description', null=True)
milestone = indexes.CharField(model_attr='milestone', null=True)
component = indexes.CharField(model_attr='component', null=True)
version = indexes.CharField(model_attr='version', null=True)
severity = indexes.CharField(model_attr='severity', null=True)
reporter = indexes.CharField(model_attr='reporter', null=True)
author = indexes.CharField(null=True)
author_url = indexes.CharField(null=True)
status = indexes.CharField(model_attr='status', null=True)
keywords = indexes.CharField(model_attr='keywords', null=True)
collaborators = indexes.CharField(model_attr='collaborators', null=True)
created = indexes.DateTimeField(model_attr='created', null=True)
modified = indexes.DateTimeField(model_attr='modified', null=True)
url = indexes.CharField(model_attr='get_absolute_url')
type = indexes.CharField()
def get_model(self):
return Ticket
def get_updated_field(self):
return 'modified'
def prepare_author(self, obj):
author = obj.get_author()
if author:
return author.get_full_name()
return obj.author
def prepare_author_url(self, obj):
author = obj.get_author()
if author:
return author.get_absolute_url()
return None
def prepare_type(self, obj):
return 'ticket'
class RevisionIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
repository_name = indexes.CharField(model_attr='repository_name')
revision = indexes.CharField(model_attr='rev')
created = indexes.DateTimeField(model_attr='created', null=True)
modified = indexes.DateTimeField(model_attr='created', null=True)
author = indexes.CharField(null=True)
author_url = indexes.CharField(null=True)
message = indexes.CharField(model_attr='message', null=True)
url = indexes.CharField(model_attr='get_absolute_url')
type = indexes.CharField()
def get_model(self):
return Revision
def get_updated_field(self):
return 'created'
def prepare_author(self, obj):
author = obj.get_author()
if author:
return author.get_full_name()
return obj.author
def prepare_author_url(self, obj):
author = obj.get_author()
if author:
return author.get_absolute_url()
return None
def prepare_type(self, obj):
return 'changeset'