Commit a80fcb8f167a03cf0ffce9fca01b8c7447b50271

Authored by Luan
1 parent 64f04f30

Adding complete search_indexes to revision, wiki and ticket

src/proxy/models.py
@@ -2,107 +2,81 @@ @@ -2,107 +2,81 @@
2 2
3 from django.db import models 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 class Revision(models.Model): 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 author = models.TextField(blank=True) 14 author = models.TextField(blank=True)
34 message = models.TextField(blank=True) 15 message = models.TextField(blank=True)
  16 + repository_name = models.TextField(blank=True)
  17 + created = models.DateTimeField(blank=True, null=True)
35 18
36 class Meta: 19 class Meta:
37 managed = False 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 class Ticket(models.Model): 32 class Ticket(models.Model):
42 id = models.IntegerField(primary_key=True) 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 component = models.TextField(blank=True) 38 component = models.TextField(blank=True)
  39 + version = models.TextField(blank=True)
47 severity = models.TextField(blank=True) 40 severity = models.TextField(blank=True)
48 - priority = models.TextField(blank=True)  
49 - owner = models.TextField(blank=True)  
50 reporter = models.TextField(blank=True) 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 status = models.TextField(blank=True) 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 keywords = models.TextField(blank=True) 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 class Meta: 49 class Meta:
61 managed = False 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 class Wiki(models.Model): 63 class Wiki(models.Model):
89 name = models.TextField(primary_key=True) 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 author = models.TextField(blank=True) 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 class Meta: 71 class Meta:
99 managed = False 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 def get_author(self): 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 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 from datetime import datetime 3 from datetime import datetime
  4 +
4 from django.db.models import Q 5 from django.db.models import Q
5 from haystack import indexes 6 from haystack import indexes
6 7
7 -from .models import Wiki 8 +from .models import Ticket, Wiki, Revision
8 9
9 10
10 class WikiIndex(indexes.SearchIndex, indexes.Indexable): 11 class WikiIndex(indexes.SearchIndex, indexes.Indexable):
11 text = indexes.CharField(document=True, use_template=True) 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 type = indexes.CharField() 21 type = indexes.CharField()
23 22
24 def get_model(self): 23 def get_model(self):
25 return Wiki 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 def prepare_type(self, obj): 41 def prepare_type(self, obj):
31 return u'wiki' 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
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
  1 +{{ object.repository_name }}
  2 +{{ object.revision }}
  3 +{% firstof object.get_author.get_full_name object.author %}
  4 +{{ object.message }}
src/proxy/templates/search/indexes/proxy/ticket_text.txt 0 → 100644
@@ -0,0 +1,11 @@ @@ -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
1 {{ object.name }} 1 {{ object.name }}
2 {{ object.get_collaborators }} 2 {{ object.get_collaborators }}
3 {{ object.text }} 3 {{ object.text }}
4 -{{ object.comment }}  
5 -{{ object.ipnr }}