Commit cc9a0241cbc17701bd59fe9a018866f1b77423bc

Authored by Luan
1 parent 85239cb9

Adding first proxy indexes to wiki

src/proxy/models.py
... ... @@ -39,6 +39,7 @@ class Revision(models.Model):
39 39  
40 40  
41 41 class Ticket(models.Model):
  42 + id = models.IntegerField(primary_key=True)
42 43 type = models.TextField(blank=True)
43 44 time = models.BigIntegerField(blank=True, null=True)
44 45 changetime = models.BigIntegerField(blank=True, null=True)
... ... @@ -85,7 +86,7 @@ class TicketCustom(models.Model):
85 86  
86 87  
87 88 class Wiki(models.Model):
88   - name = models.TextField()
  89 + name = models.TextField(primary_key=True)
89 90 version = models.IntegerField()
90 91 time = models.BigIntegerField(blank=True, null=True)
91 92 author = models.TextField(blank=True)
... ... @@ -97,3 +98,11 @@ class Wiki(models.Model):
97 98 class Meta:
98 99 managed = False
99 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
... ...
src/proxy/search_indexes.py 0 → 100644
... ... @@ -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(
... ...
src/proxy/templates/search/indexes/proxy/wiki_text.txt 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +{{ object.name }}
  2 +{{ object.author }}
  3 +{{ object.text }}
  4 +{{ object.comment }}
  5 +{{ object.ipnr }}
... ...
src/templates/search/search-wiki-preview.html 0 → 100644
... ... @@ -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 48 <br />
49 49 {% if result.model_name == 'message' %}
50 50 {% include "search/search-message-preview.html" %}
51   - {% else %}
  51 + {% elif result.model_name == 'user' %}
52 52 {% include "search/search-user-preview.html" %}
  53 + {% elif result.model_name == 'wiki' %}
  54 + {% include "search/search-wiki-preview.html" %}
53 55 {% endif %}
54 56 {% empty %}
55 57 <li class="text-center">
... ...