diff --git a/src/proxy/models.py b/src/proxy/models.py index dd10408..754bae6 100644 --- a/src/proxy/models.py +++ b/src/proxy/models.py @@ -2,107 +2,81 @@ from django.db import models - -class Attachment(models.Model): - type = models.TextField() - filename = models.TextField() - size = models.IntegerField(blank=True, null=True) - time = models.BigIntegerField(blank=True, null=True) - description = models.TextField(blank=True) - author = models.TextField(blank=True) - ipnr = models.TextField(blank=True) - - class Meta: - managed = False - db_table = 'attachment' +from accounts.models import User -class Repository(models.Model): - name = models.TextField() - value = models.TextField(blank=True) - - class Meta: - managed = False - db_table = 'repository' +# get_absolute_url em todos +# get_author_url em todos class Revision(models.Model): - repos = models.IntegerField() - rev = models.TextField() - time = models.BigIntegerField(blank=True, null=True) + rev = models.TextField(blank=True, primary_key=True) author = models.TextField(blank=True) message = models.TextField(blank=True) + repository_name = models.TextField(blank=True) + created = models.DateTimeField(blank=True, null=True) class Meta: managed = False - db_table = 'revision' + db_table = 'revision_view' + + def get_absolute_url(self): + return u'/changeset/{}/{}'.format(self.rev, self.repository_name) + def get_author(self): + try: + return User.objects.get(username=self.author) + except User.DoesNotExist: + return None 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) + summary = models.TextField(blank=True) + description = models.TextField(blank=True) + milestone = models.TextField(blank=True) + priority = models.TextField(blank=True) component = models.TextField(blank=True) + version = models.TextField(blank=True) severity = models.TextField(blank=True) - priority = models.TextField(blank=True) - owner = models.TextField(blank=True) reporter = models.TextField(blank=True) - cc = models.TextField(blank=True) - version = models.TextField(blank=True) - milestone = models.TextField(blank=True) + author = models.TextField(blank=True) status = models.TextField(blank=True) - resolution = models.TextField(blank=True) - summary = models.TextField(blank=True) - description = models.TextField(blank=True) keywords = models.TextField(blank=True) + collaborators = models.TextField(blank=True) + created = models.DateTimeField(blank=True, null=True) + modified = models.DateTimeField(blank=True, null=True) class Meta: managed = False - db_table = 'ticket' - - -class TicketChange(models.Model): - ticket = models.IntegerField() - time = models.BigIntegerField() - author = models.TextField(blank=True) - field = models.TextField() - oldvalue = models.TextField(blank=True) - newvalue = models.TextField(blank=True) - - class Meta: - managed = False - db_table = 'ticket_change' + db_table = 'ticket_view' + def get_absolute_url(self): + return u'/ticket/{}'.format(self.id) -class TicketCustom(models.Model): - ticket = models.IntegerField() - name = models.TextField() - value = models.TextField(blank=True) - - class Meta: - managed = False - db_table = 'ticket_custom' + def get_author(self): + try: + return User.objects.get(username=self.author) + except User.DoesNotExist: + return None class Wiki(models.Model): name = models.TextField(primary_key=True) - version = models.IntegerField() - time = models.BigIntegerField(blank=True, null=True) + wiki_text = models.TextField(blank=True) author = models.TextField(blank=True) - ipnr = models.TextField(blank=True) - text = models.TextField(blank=True) - comment = models.TextField(blank=True) - readonly = models.IntegerField(blank=True, null=True) + collaborators = models.TextField(blank=True) + created = models.DateTimeField(blank=True, null=True) + modified = models.DateTimeField(blank=True, null=True) class Meta: managed = False - db_table = 'wiki' + db_table = 'wiki_view' - def get_collaborators(self): - return Wiki.objects.filter( - name=self.name, - ).values_list('author', flat=True) + def get_absolute_url(self): + return u'/ticket/{}'.format(self.name) def get_author(self): - return Wiki.objects.get(name=self.name, version=1).author + try: + return User.objects.get(username=self.author) + except User.DoesNotExist: + return None diff --git a/src/proxy/search_indexes.py b/src/proxy/search_indexes.py index 7d19d4c..df825ef 100644 --- a/src/proxy/search_indexes.py +++ b/src/proxy/search_indexes.py @@ -1,68 +1,119 @@ # -*- coding: utf-8 -*- from datetime import datetime + from django.db.models import Q from haystack import indexes -from .models import Wiki +from .models import Ticket, Wiki, Revision 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() + wiki_text = indexes.CharField(model_attr='wiki_text') + author = indexes.CharField(null=True) + author_url = indexes.CharField(null=True) + collaborators = indexes.CharField(model_attr='collaborators', null=True) + created = indexes.DateTimeField(model_attr='created', null=True) + modified = indexes.DateTimeField(model_attr='modified', null=True) + + url = indexes.CharField(model_attr='get_absolute_url') type = indexes.CharField() def get_model(self): return Wiki - def prepare_time(self, obj): - return datetime.fromtimestamp(self.prepared_data['time']/1000000) + def get_updated_field(self): + return 'modified' + + def prepare_author(self, obj): + author = obj.get_author() + if author: + return author.get_full_name() + return obj.author + + def prepare_author_url(self, obj): + author = obj.get_author() + if author: + return author.get_absolute_url() + return None 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( + +class TicketIndex(indexes.SearchIndex, indexes.Indexable): + text = indexes.CharField(document=True, use_template=True) + summary = indexes.CharField(model_attr='summary', null=True) + description = indexes.CharField(model_attr='description', null=True) + milestone = indexes.CharField(model_attr='milestone', null=True) + component = indexes.CharField(model_attr='component', null=True) + version = indexes.CharField(model_attr='version', null=True) + severity = indexes.CharField(model_attr='severity', null=True) + reporter = indexes.CharField(model_attr='reporter', null=True) + author = indexes.CharField(null=True) + author_url = indexes.CharField(null=True) + status = indexes.CharField(model_attr='status', null=True) + keywords = indexes.CharField(model_attr='keywords', null=True) + collaborators = indexes.CharField(model_attr='collaborators', null=True) + created = indexes.DateTimeField(model_attr='created', null=True) + modified = indexes.DateTimeField(model_attr='modified', null=True) + + url = indexes.CharField(model_attr='get_absolute_url') + type = indexes.CharField() + + def get_model(self): + return Ticket + + def get_updated_field(self): + return 'modified' + + def prepare_author(self, obj): + author = obj.get_author() + if author: + return author.get_full_name() + return obj.author + + def prepare_author_url(self, obj): + author = obj.get_author() + if author: + return author.get_absolute_url() + return None + + def prepare_type(self, obj): + return 'ticket' + + +class RevisionIndex(indexes.SearchIndex, indexes.Indexable): + text = indexes.CharField(document=True, use_template=True) + repository_name = indexes.CharField(model_attr='repository_name') + revision = indexes.CharField(model_attr='rev') + created = indexes.DateTimeField(model_attr='created', null=True) + modified = indexes.DateTimeField(model_attr='created', null=True) + author = indexes.CharField(null=True) + author_url = indexes.CharField(null=True) + message = indexes.CharField(model_attr='message', null=True) + + url = indexes.CharField(model_attr='get_absolute_url') + type = indexes.CharField() + + def get_model(self): + return Revision + + def get_updated_field(self): + return 'created' + + def prepare_author(self, obj): + author = obj.get_author() + if author: + return author.get_full_name() + return obj.author + + def prepare_author_url(self, obj): + author = obj.get_author() + if author: + return author.get_absolute_url() + return None + + def prepare_type(self, obj): + return 'changeset' diff --git a/src/proxy/templates/search/indexes/proxy/revision_text.txt b/src/proxy/templates/search/indexes/proxy/revision_text.txt new file mode 100644 index 0000000..1d87ec5 --- /dev/null +++ b/src/proxy/templates/search/indexes/proxy/revision_text.txt @@ -0,0 +1,4 @@ +{{ object.repository_name }} +{{ object.revision }} +{% firstof object.get_author.get_full_name object.author %} +{{ object.message }} diff --git a/src/proxy/templates/search/indexes/proxy/ticket_text.txt b/src/proxy/templates/search/indexes/proxy/ticket_text.txt new file mode 100644 index 0000000..2063a17 --- /dev/null +++ b/src/proxy/templates/search/indexes/proxy/ticket_text.txt @@ -0,0 +1,11 @@ +{{ object.summary }} +{{ object.description }} +{{ object.milestone }} +{{ object.component }} +{{ object.version }} +{{ object.severity }} +{{ object.reporter }} +{% firstof object.get_author.get_fullname or object.author %} +{{ object.status }} +{{ object.keywords }} +{{ object.collaborators }} diff --git a/src/proxy/templates/search/indexes/proxy/wiki_text.txt b/src/proxy/templates/search/indexes/proxy/wiki_text.txt index 9849792..7e7ef46 100644 --- a/src/proxy/templates/search/indexes/proxy/wiki_text.txt +++ b/src/proxy/templates/search/indexes/proxy/wiki_text.txt @@ -1,5 +1,3 @@ {{ object.name }} {{ object.get_collaborators }} {{ object.text }} -{{ object.comment }} -{{ object.ipnr }} -- libgit2 0.21.2