From cc9a0241cbc17701bd59fe9a018866f1b77423bc Mon Sep 17 00:00:00 2001 From: Luan Date: Wed, 9 Oct 2013 16:29:09 -0300 Subject: [PATCH] Adding first proxy indexes to wiki --- src/proxy/models.py | 11 ++++++++++- src/proxy/search_indexes.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/proxy/templates/search/indexes/proxy/wiki_text.txt | 5 +++++ src/templates/search/search-wiki-preview.html | 25 +++++++++++++++++++++++++ src/templates/search/search.html | 4 +++- 5 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 src/proxy/search_indexes.py create mode 100644 src/proxy/templates/search/indexes/proxy/wiki_text.txt create mode 100644 src/templates/search/search-wiki-preview.html diff --git a/src/proxy/models.py b/src/proxy/models.py index 5ab7314..dd10408 100644 --- a/src/proxy/models.py +++ b/src/proxy/models.py @@ -39,6 +39,7 @@ class Revision(models.Model): class Ticket(models.Model): + id = models.IntegerField(primary_key=True) type = models.TextField(blank=True) time = models.BigIntegerField(blank=True, null=True) changetime = models.BigIntegerField(blank=True, null=True) @@ -85,7 +86,7 @@ class TicketCustom(models.Model): class Wiki(models.Model): - name = models.TextField() + name = models.TextField(primary_key=True) version = models.IntegerField() time = models.BigIntegerField(blank=True, null=True) author = models.TextField(blank=True) @@ -97,3 +98,11 @@ class Wiki(models.Model): class Meta: managed = False db_table = 'wiki' + + def get_collaborators(self): + return Wiki.objects.filter( + name=self.name, + ).values_list('author', flat=True) + + def get_author(self): + return Wiki.objects.get(name=self.name, version=1).author diff --git a/src/proxy/search_indexes.py b/src/proxy/search_indexes.py new file mode 100644 index 0000000..7d19d4c --- /dev/null +++ b/src/proxy/search_indexes.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- + +from datetime import datetime +from django.db.models import Q +from haystack import indexes + +from .models import Wiki + + +class WikiIndex(indexes.SearchIndex, indexes.Indexable): + text = indexes.CharField(document=True, use_template=True) + wiki_text = indexes.CharField(model_attr='text') + name = indexes.CharField(model_attr='name') + author = indexes.CharField(model_attr='get_author', null=True) + collaborators = indexes.CharField( + model_attr='get_collaborators', null=True + ) + comment = indexes.CharField(model_attr='comment', null=True) + time = indexes.DateTimeField(model_attr='time', null=True) + + url = indexes.CharField() + type = indexes.CharField() + + def get_model(self): + return Wiki + + def prepare_time(self, obj): + return datetime.fromtimestamp(self.prepared_data['time']/1000000) + + def prepare_type(self, obj): + return u'wiki' + + def prepare_url(self, obj): + return u'/wiki/{}'.format(obj.name) + + def index_queryset(self, using=None): + wiki = self.get_model().objects.raw( + ''' + SELECT "wiki"."name", MAX("wiki"."version") AS version + FROM "wiki" + GROUP BY "wiki"."name" + ''' + ) + + q = Q() + for obj in wiki: + q |= Q(name=obj.name, version=obj.version) + + return self.get_model().objects.filter(q) + + +# def TicketIndex(indexes.SearchIndex, indexes.Indexable): +# text = = indexes.CharField(document=True, use_template=True) +# time = indexes.CharField( +# changetime = indexes.CharField( +# component = indexes.CharField( +# severity = indexes.CharField( +# priority = indexes.CharField( +# owner = indexes.CharField( +# reporter = indexes.CharField( +# cc = indexes.CharField( +# version = indexes.CharField( +# milestone = indexes.CharField( +# status = indexes.CharField( +# resolution = indexes.CharField( +# summary = indexes.CharField( +# description = indexes.CharField( +# keywords = indexes.CharField( diff --git a/src/proxy/templates/search/indexes/proxy/wiki_text.txt b/src/proxy/templates/search/indexes/proxy/wiki_text.txt new file mode 100644 index 0000000..3e2f075 --- /dev/null +++ b/src/proxy/templates/search/indexes/proxy/wiki_text.txt @@ -0,0 +1,5 @@ +{{ object.name }} +{{ object.author }} +{{ object.text }} +{{ object.comment }} +{{ object.ipnr }} diff --git a/src/templates/search/search-wiki-preview.html b/src/templates/search/search-wiki-preview.html new file mode 100644 index 0000000..141ea72 --- /dev/null +++ b/src/templates/search/search-wiki-preview.html @@ -0,0 +1,25 @@ +{% load i18n %} + +
  • + + + + {{ result.name }} + + + {% if result.text %}- {{ result.text|truncatechars:150 }} {% endif %}{% if result.comment|truncatechars:150 %}- {{ result.comment }}{% endif %} + +
    + + {% if result.author %} + {% trans "by" %} + {% endif %} + + {% if result.author %} + {{ result.author }} + {% endif %} + + + {{ result.time }} {% trans "ago" %} +
    +
  • diff --git a/src/templates/search/search.html b/src/templates/search/search.html index ed85970..a2a4ff0 100644 --- a/src/templates/search/search.html +++ b/src/templates/search/search.html @@ -48,8 +48,10 @@
    {% if result.model_name == 'message' %} {% include "search/search-message-preview.html" %} - {% else %} + {% elif result.model_name == 'user' %} {% include "search/search-user-preview.html" %} + {% elif result.model_name == 'wiki' %} + {% include "search/search-wiki-preview.html" %} {% endif %} {% empty %}
  • -- libgit2 0.21.2