Commit a80fcb8f167a03cf0ffce9fca01b8c7447b50271
1 parent
64f04f30
Exists in
master
and in
39 other branches
Adding complete search_indexes to revision, wiki and ticket
Showing
5 changed files
with
158 additions
and
120 deletions
Show diff stats
src/proxy/models.py
... | ... | @@ -2,107 +2,81 @@ |
2 | 2 | |
3 | 3 | from django.db import models |
4 | 4 | |
5 | - | |
6 | -class Attachment(models.Model): | |
7 | - type = models.TextField() | |
8 | - filename = models.TextField() | |
9 | - size = models.IntegerField(blank=True, null=True) | |
10 | - time = models.BigIntegerField(blank=True, null=True) | |
11 | - description = models.TextField(blank=True) | |
12 | - author = models.TextField(blank=True) | |
13 | - ipnr = models.TextField(blank=True) | |
14 | - | |
15 | - class Meta: | |
16 | - managed = False | |
17 | - db_table = 'attachment' | |
5 | +from accounts.models import User | |
18 | 6 | |
19 | 7 | |
20 | -class Repository(models.Model): | |
21 | - name = models.TextField() | |
22 | - value = models.TextField(blank=True) | |
23 | - | |
24 | - class Meta: | |
25 | - managed = False | |
26 | - db_table = 'repository' | |
8 | +# get_absolute_url em todos | |
9 | +# get_author_url em todos | |
27 | 10 | |
28 | 11 | |
29 | 12 | class Revision(models.Model): |
30 | - repos = models.IntegerField() | |
31 | - rev = models.TextField() | |
32 | - time = models.BigIntegerField(blank=True, null=True) | |
13 | + rev = models.TextField(blank=True, primary_key=True) | |
33 | 14 | author = models.TextField(blank=True) |
34 | 15 | message = models.TextField(blank=True) |
16 | + repository_name = models.TextField(blank=True) | |
17 | + created = models.DateTimeField(blank=True, null=True) | |
35 | 18 | |
36 | 19 | class Meta: |
37 | 20 | managed = False |
38 | - db_table = 'revision' | |
21 | + db_table = 'revision_view' | |
22 | + | |
23 | + def get_absolute_url(self): | |
24 | + return u'/changeset/{}/{}'.format(self.rev, self.repository_name) | |
39 | 25 | |
26 | + def get_author(self): | |
27 | + try: | |
28 | + return User.objects.get(username=self.author) | |
29 | + except User.DoesNotExist: | |
30 | + return None | |
40 | 31 | |
41 | 32 | class Ticket(models.Model): |
42 | 33 | id = models.IntegerField(primary_key=True) |
43 | - type = models.TextField(blank=True) | |
44 | - time = models.BigIntegerField(blank=True, null=True) | |
45 | - changetime = models.BigIntegerField(blank=True, null=True) | |
34 | + summary = models.TextField(blank=True) | |
35 | + description = models.TextField(blank=True) | |
36 | + milestone = models.TextField(blank=True) | |
37 | + priority = models.TextField(blank=True) | |
46 | 38 | component = models.TextField(blank=True) |
39 | + version = models.TextField(blank=True) | |
47 | 40 | severity = models.TextField(blank=True) |
48 | - priority = models.TextField(blank=True) | |
49 | - owner = models.TextField(blank=True) | |
50 | 41 | reporter = models.TextField(blank=True) |
51 | - cc = models.TextField(blank=True) | |
52 | - version = models.TextField(blank=True) | |
53 | - milestone = models.TextField(blank=True) | |
42 | + author = models.TextField(blank=True) | |
54 | 43 | status = models.TextField(blank=True) |
55 | - resolution = models.TextField(blank=True) | |
56 | - summary = models.TextField(blank=True) | |
57 | - description = models.TextField(blank=True) | |
58 | 44 | keywords = models.TextField(blank=True) |
45 | + collaborators = models.TextField(blank=True) | |
46 | + created = models.DateTimeField(blank=True, null=True) | |
47 | + modified = models.DateTimeField(blank=True, null=True) | |
59 | 48 | |
60 | 49 | class Meta: |
61 | 50 | managed = False |
62 | - db_table = 'ticket' | |
63 | - | |
64 | - | |
65 | -class TicketChange(models.Model): | |
66 | - ticket = models.IntegerField() | |
67 | - time = models.BigIntegerField() | |
68 | - author = models.TextField(blank=True) | |
69 | - field = models.TextField() | |
70 | - oldvalue = models.TextField(blank=True) | |
71 | - newvalue = models.TextField(blank=True) | |
72 | - | |
73 | - class Meta: | |
74 | - managed = False | |
75 | - db_table = 'ticket_change' | |
51 | + db_table = 'ticket_view' | |
76 | 52 | |
53 | + def get_absolute_url(self): | |
54 | + return u'/ticket/{}'.format(self.id) | |
77 | 55 | |
78 | -class TicketCustom(models.Model): | |
79 | - ticket = models.IntegerField() | |
80 | - name = models.TextField() | |
81 | - value = models.TextField(blank=True) | |
82 | - | |
83 | - class Meta: | |
84 | - managed = False | |
85 | - db_table = 'ticket_custom' | |
56 | + def get_author(self): | |
57 | + try: | |
58 | + return User.objects.get(username=self.author) | |
59 | + except User.DoesNotExist: | |
60 | + return None | |
86 | 61 | |
87 | 62 | |
88 | 63 | class Wiki(models.Model): |
89 | 64 | name = models.TextField(primary_key=True) |
90 | - version = models.IntegerField() | |
91 | - time = models.BigIntegerField(blank=True, null=True) | |
65 | + wiki_text = models.TextField(blank=True) | |
92 | 66 | author = models.TextField(blank=True) |
93 | - ipnr = models.TextField(blank=True) | |
94 | - text = models.TextField(blank=True) | |
95 | - comment = models.TextField(blank=True) | |
96 | - readonly = models.IntegerField(blank=True, null=True) | |
67 | + collaborators = models.TextField(blank=True) | |
68 | + created = models.DateTimeField(blank=True, null=True) | |
69 | + modified = models.DateTimeField(blank=True, null=True) | |
97 | 70 | |
98 | 71 | class Meta: |
99 | 72 | managed = False |
100 | - db_table = 'wiki' | |
73 | + db_table = 'wiki_view' | |
101 | 74 | |
102 | - def get_collaborators(self): | |
103 | - return Wiki.objects.filter( | |
104 | - name=self.name, | |
105 | - ).values_list('author', flat=True) | |
75 | + def get_absolute_url(self): | |
76 | + return u'/ticket/{}'.format(self.name) | |
106 | 77 | |
107 | 78 | def get_author(self): |
108 | - return Wiki.objects.get(name=self.name, version=1).author | |
79 | + try: | |
80 | + return User.objects.get(username=self.author) | |
81 | + except User.DoesNotExist: | |
82 | + return None | ... | ... |
src/proxy/search_indexes.py
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | |
3 | 3 | from datetime import datetime |
4 | + | |
4 | 5 | from django.db.models import Q |
5 | 6 | from haystack import indexes |
6 | 7 | |
7 | -from .models import Wiki | |
8 | +from .models import Ticket, Wiki, Revision | |
8 | 9 | |
9 | 10 | |
10 | 11 | class WikiIndex(indexes.SearchIndex, indexes.Indexable): |
11 | 12 | text = indexes.CharField(document=True, use_template=True) |
12 | - wiki_text = indexes.CharField(model_attr='text') | |
13 | - name = indexes.CharField(model_attr='name') | |
14 | - author = indexes.CharField(model_attr='get_author', null=True) | |
15 | - collaborators = indexes.CharField( | |
16 | - model_attr='get_collaborators', null=True | |
17 | - ) | |
18 | - comment = indexes.CharField(model_attr='comment', null=True) | |
19 | - time = indexes.DateTimeField(model_attr='time', null=True) | |
20 | - | |
21 | - url = indexes.CharField() | |
13 | + wiki_text = indexes.CharField(model_attr='wiki_text') | |
14 | + author = indexes.CharField(null=True) | |
15 | + author_url = indexes.CharField(null=True) | |
16 | + collaborators = indexes.CharField(model_attr='collaborators', null=True) | |
17 | + created = indexes.DateTimeField(model_attr='created', null=True) | |
18 | + modified = indexes.DateTimeField(model_attr='modified', null=True) | |
19 | + | |
20 | + url = indexes.CharField(model_attr='get_absolute_url') | |
22 | 21 | type = indexes.CharField() |
23 | 22 | |
24 | 23 | def get_model(self): |
25 | 24 | return Wiki |
26 | 25 | |
27 | - def prepare_time(self, obj): | |
28 | - return datetime.fromtimestamp(self.prepared_data['time']/1000000) | |
26 | + def get_updated_field(self): | |
27 | + return 'modified' | |
28 | + | |
29 | + def prepare_author(self, obj): | |
30 | + author = obj.get_author() | |
31 | + if author: | |
32 | + return author.get_full_name() | |
33 | + return obj.author | |
34 | + | |
35 | + def prepare_author_url(self, obj): | |
36 | + author = obj.get_author() | |
37 | + if author: | |
38 | + return author.get_absolute_url() | |
39 | + return None | |
29 | 40 | |
30 | 41 | def prepare_type(self, obj): |
31 | 42 | return u'wiki' |
32 | 43 | |
33 | - def prepare_url(self, obj): | |
34 | - return u'/wiki/{}'.format(obj.name) | |
35 | - | |
36 | - def index_queryset(self, using=None): | |
37 | - wiki = self.get_model().objects.raw( | |
38 | - ''' | |
39 | - SELECT "wiki"."name", MAX("wiki"."version") AS version | |
40 | - FROM "wiki" | |
41 | - GROUP BY "wiki"."name" | |
42 | - ''' | |
43 | - ) | |
44 | - | |
45 | - q = Q() | |
46 | - for obj in wiki: | |
47 | - q |= Q(name=obj.name, version=obj.version) | |
48 | - | |
49 | - return self.get_model().objects.filter(q) | |
50 | - | |
51 | - | |
52 | -# def TicketIndex(indexes.SearchIndex, indexes.Indexable): | |
53 | -# text = = indexes.CharField(document=True, use_template=True) | |
54 | -# time = indexes.CharField( | |
55 | -# changetime = indexes.CharField( | |
56 | -# component = indexes.CharField( | |
57 | -# severity = indexes.CharField( | |
58 | -# priority = indexes.CharField( | |
59 | -# owner = indexes.CharField( | |
60 | -# reporter = indexes.CharField( | |
61 | -# cc = indexes.CharField( | |
62 | -# version = indexes.CharField( | |
63 | -# milestone = indexes.CharField( | |
64 | -# status = indexes.CharField( | |
65 | -# resolution = indexes.CharField( | |
66 | -# summary = indexes.CharField( | |
67 | -# description = indexes.CharField( | |
68 | -# keywords = indexes.CharField( | |
44 | + | |
45 | +class TicketIndex(indexes.SearchIndex, indexes.Indexable): | |
46 | + text = indexes.CharField(document=True, use_template=True) | |
47 | + summary = indexes.CharField(model_attr='summary', null=True) | |
48 | + description = indexes.CharField(model_attr='description', null=True) | |
49 | + milestone = indexes.CharField(model_attr='milestone', null=True) | |
50 | + component = indexes.CharField(model_attr='component', null=True) | |
51 | + version = indexes.CharField(model_attr='version', null=True) | |
52 | + severity = indexes.CharField(model_attr='severity', null=True) | |
53 | + reporter = indexes.CharField(model_attr='reporter', null=True) | |
54 | + author = indexes.CharField(null=True) | |
55 | + author_url = indexes.CharField(null=True) | |
56 | + status = indexes.CharField(model_attr='status', null=True) | |
57 | + keywords = indexes.CharField(model_attr='keywords', null=True) | |
58 | + collaborators = indexes.CharField(model_attr='collaborators', null=True) | |
59 | + created = indexes.DateTimeField(model_attr='created', null=True) | |
60 | + modified = indexes.DateTimeField(model_attr='modified', null=True) | |
61 | + | |
62 | + url = indexes.CharField(model_attr='get_absolute_url') | |
63 | + type = indexes.CharField() | |
64 | + | |
65 | + def get_model(self): | |
66 | + return Ticket | |
67 | + | |
68 | + def get_updated_field(self): | |
69 | + return 'modified' | |
70 | + | |
71 | + def prepare_author(self, obj): | |
72 | + author = obj.get_author() | |
73 | + if author: | |
74 | + return author.get_full_name() | |
75 | + return obj.author | |
76 | + | |
77 | + def prepare_author_url(self, obj): | |
78 | + author = obj.get_author() | |
79 | + if author: | |
80 | + return author.get_absolute_url() | |
81 | + return None | |
82 | + | |
83 | + def prepare_type(self, obj): | |
84 | + return 'ticket' | |
85 | + | |
86 | + | |
87 | +class RevisionIndex(indexes.SearchIndex, indexes.Indexable): | |
88 | + text = indexes.CharField(document=True, use_template=True) | |
89 | + repository_name = indexes.CharField(model_attr='repository_name') | |
90 | + revision = indexes.CharField(model_attr='rev') | |
91 | + created = indexes.DateTimeField(model_attr='created', null=True) | |
92 | + modified = indexes.DateTimeField(model_attr='created', null=True) | |
93 | + author = indexes.CharField(null=True) | |
94 | + author_url = indexes.CharField(null=True) | |
95 | + message = indexes.CharField(model_attr='message', null=True) | |
96 | + | |
97 | + url = indexes.CharField(model_attr='get_absolute_url') | |
98 | + type = indexes.CharField() | |
99 | + | |
100 | + def get_model(self): | |
101 | + return Revision | |
102 | + | |
103 | + def get_updated_field(self): | |
104 | + return 'created' | |
105 | + | |
106 | + def prepare_author(self, obj): | |
107 | + author = obj.get_author() | |
108 | + if author: | |
109 | + return author.get_full_name() | |
110 | + return obj.author | |
111 | + | |
112 | + def prepare_author_url(self, obj): | |
113 | + author = obj.get_author() | |
114 | + if author: | |
115 | + return author.get_absolute_url() | |
116 | + return None | |
117 | + | |
118 | + def prepare_type(self, obj): | |
119 | + return 'changeset' | ... | ... |
src/proxy/templates/search/indexes/proxy/revision_text.txt
0 → 100644
src/proxy/templates/search/indexes/proxy/ticket_text.txt
0 → 100644
... | ... | @@ -0,0 +1,11 @@ |
1 | +{{ object.summary }} | |
2 | +{{ object.description }} | |
3 | +{{ object.milestone }} | |
4 | +{{ object.component }} | |
5 | +{{ object.version }} | |
6 | +{{ object.severity }} | |
7 | +{{ object.reporter }} | |
8 | +{% firstof object.get_author.get_fullname or object.author %} | |
9 | +{{ object.status }} | |
10 | +{{ object.keywords }} | |
11 | +{{ object.collaborators }} | ... | ... |
src/proxy/templates/search/indexes/proxy/wiki_text.txt