Commit cc9a0241cbc17701bd59fe9a018866f1b77423bc
1 parent
85239cb9
Exists in
master
and in
39 other branches
Adding first proxy indexes to wiki
Showing
5 changed files
with
111 additions
and
2 deletions
Show diff stats
src/proxy/models.py
@@ -39,6 +39,7 @@ class Revision(models.Model): | @@ -39,6 +39,7 @@ class Revision(models.Model): | ||
39 | 39 | ||
40 | 40 | ||
41 | class Ticket(models.Model): | 41 | class Ticket(models.Model): |
42 | + id = models.IntegerField(primary_key=True) | ||
42 | type = models.TextField(blank=True) | 43 | type = models.TextField(blank=True) |
43 | time = models.BigIntegerField(blank=True, null=True) | 44 | time = models.BigIntegerField(blank=True, null=True) |
44 | changetime = models.BigIntegerField(blank=True, null=True) | 45 | changetime = models.BigIntegerField(blank=True, null=True) |
@@ -85,7 +86,7 @@ class TicketCustom(models.Model): | @@ -85,7 +86,7 @@ class TicketCustom(models.Model): | ||
85 | 86 | ||
86 | 87 | ||
87 | class Wiki(models.Model): | 88 | class Wiki(models.Model): |
88 | - name = models.TextField() | 89 | + name = models.TextField(primary_key=True) |
89 | version = models.IntegerField() | 90 | version = models.IntegerField() |
90 | time = models.BigIntegerField(blank=True, null=True) | 91 | time = models.BigIntegerField(blank=True, null=True) |
91 | author = models.TextField(blank=True) | 92 | author = models.TextField(blank=True) |
@@ -97,3 +98,11 @@ class Wiki(models.Model): | @@ -97,3 +98,11 @@ class Wiki(models.Model): | ||
97 | class Meta: | 98 | class Meta: |
98 | managed = False | 99 | managed = False |
99 | db_table = 'wiki' | 100 | db_table = 'wiki' |
101 | + | ||
102 | + def get_collaborators(self): | ||
103 | + return Wiki.objects.filter( | ||
104 | + name=self.name, | ||
105 | + ).values_list('author', flat=True) | ||
106 | + | ||
107 | + def get_author(self): | ||
108 | + return Wiki.objects.get(name=self.name, version=1).author |
@@ -0,0 +1,68 @@ | @@ -0,0 +1,68 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | + | ||
3 | +from datetime import datetime | ||
4 | +from django.db.models import Q | ||
5 | +from haystack import indexes | ||
6 | + | ||
7 | +from .models import Wiki | ||
8 | + | ||
9 | + | ||
10 | +class WikiIndex(indexes.SearchIndex, indexes.Indexable): | ||
11 | + 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() | ||
22 | + type = indexes.CharField() | ||
23 | + | ||
24 | + def get_model(self): | ||
25 | + return Wiki | ||
26 | + | ||
27 | + def prepare_time(self, obj): | ||
28 | + return datetime.fromtimestamp(self.prepared_data['time']/1000000) | ||
29 | + | ||
30 | + def prepare_type(self, obj): | ||
31 | + return u'wiki' | ||
32 | + | ||
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( |
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +{% load i18n %} | ||
2 | + | ||
3 | +<li class="preview-message"> | ||
4 | + <span class="glyphicon glyphicon-file"></span> | ||
5 | + | ||
6 | + <span class="subject"> | ||
7 | + <a href="{{ result.url }}">{{ result.name }}</a> | ||
8 | + </span> | ||
9 | + | ||
10 | + <span class="quiet">{% if result.text %}- {{ result.text|truncatechars:150 }} {% endif %}{% if result.comment|truncatechars:150 %}- {{ result.comment }}{% endif %}</span> | ||
11 | + | ||
12 | + <div class="quiet"> | ||
13 | + <span class="pull-left"> | ||
14 | + {% if result.author %} | ||
15 | + {% trans "by" %} | ||
16 | + {% endif %} | ||
17 | + | ||
18 | + {% if result.author %} | ||
19 | + <a href="{{ result.author_username }}">{{ result.author }}</a> | ||
20 | + {% endif %} | ||
21 | + </span> | ||
22 | + | ||
23 | + <span class="pull-right">{{ result.time }} {% trans "ago" %}</span> | ||
24 | + </div> | ||
25 | +</li> |
src/templates/search/search.html
@@ -48,8 +48,10 @@ | @@ -48,8 +48,10 @@ | ||
48 | <br /> | 48 | <br /> |
49 | {% if result.model_name == 'message' %} | 49 | {% if result.model_name == 'message' %} |
50 | {% include "search/search-message-preview.html" %} | 50 | {% include "search/search-message-preview.html" %} |
51 | - {% else %} | 51 | + {% elif result.model_name == 'user' %} |
52 | {% include "search/search-user-preview.html" %} | 52 | {% include "search/search-user-preview.html" %} |
53 | + {% elif result.model_name == 'wiki' %} | ||
54 | + {% include "search/search-wiki-preview.html" %} | ||
53 | {% endif %} | 55 | {% endif %} |
54 | {% empty %} | 56 | {% empty %} |
55 | <li class="text-center"> | 57 | <li class="text-center"> |