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 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
... ... @@ -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 @@
  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 1 {{ object.name }}
2 2 {{ object.get_collaborators }}
3 3 {{ object.text }}
4   -{{ object.comment }}
5   -{{ object.ipnr }}
... ...