From 2be27bf9cd1801ded98cefbbe7c01544ecd3aede Mon Sep 17 00:00:00 2001 From: Sergio Oliveira Date: Tue, 2 Sep 2014 18:52:44 -0300 Subject: [PATCH] Moved all trac bits to it's own django app --- src/proxy/diazo/jenkins.xml | 27 --------------------------- src/proxy/diazo/trac.xml | 45 --------------------------------------------- src/proxy/jenkins/diazo.xml | 27 +++++++++++++++++++++++++++ src/proxy/search_indexes.py | 157 ------------------------------------------------------------------------------------------------------------------------------------------------------------- src/proxy/templates/proxy/trac.html | 7 ------- src/proxy/test.html | 44 -------------------------------------------- src/proxy/trac/diazo.xml | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/proxy/trac/search_indexes.py | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/proxy/trac/templates/proxy/trac.html | 7 +++++++ src/proxy/trac/urls.py | 10 +++------- src/proxy/trac/views.py | 15 +++------------ src/proxy/urls.py | 2 +- src/proxy/utils.py | 10 ++++++++++ 13 files changed, 253 insertions(+), 300 deletions(-) delete mode 100644 src/proxy/diazo/jenkins.xml delete mode 100644 src/proxy/diazo/trac.xml create mode 100644 src/proxy/jenkins/diazo.xml delete mode 100644 src/proxy/search_indexes.py delete mode 100644 src/proxy/templates/proxy/trac.html delete mode 100644 src/proxy/test.html create mode 100644 src/proxy/trac/diazo.xml create mode 100644 src/proxy/trac/search_indexes.py create mode 100644 src/proxy/trac/templates/proxy/trac.html create mode 100644 src/proxy/utils.py diff --git a/src/proxy/diazo/jenkins.xml b/src/proxy/diazo/jenkins.xml deleted file mode 100644 index 7eacea4..0000000 --- a/src/proxy/diazo/jenkins.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/src/proxy/diazo/trac.xml b/src/proxy/diazo/trac.xml deleted file mode 100644 index 03ab404..0000000 --- a/src/proxy/diazo/trac.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/proxy/jenkins/diazo.xml b/src/proxy/jenkins/diazo.xml new file mode 100644 index 0000000..7eacea4 --- /dev/null +++ b/src/proxy/jenkins/diazo.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + diff --git a/src/proxy/search_indexes.py b/src/proxy/search_indexes.py deleted file mode 100644 index c7c413f..0000000 --- a/src/proxy/search_indexes.py +++ /dev/null @@ -1,157 +0,0 @@ -# -*- coding: utf-8 -*- - -import math -import string - -from django.template import loader, Context -from django.utils.text import slugify -from haystack import indexes -from haystack.utils import log as logging - -from search.base_indexes import BaseIndex -from .models import Attachment, Ticket, Wiki, Revision - - -logger = logging.getLogger('haystack') - -# the string maketrans always return a string encoded with latin1 -# http://stackoverflow.com/questions/1324067/how-do-i-get-str-translate-to-work-with-unicode-strings -table = string.maketrans( - string.punctuation, - '.' * len(string.punctuation) -).decode('latin1') - - -class AttachmentIndex(BaseIndex, indexes.Indexable): - title = indexes.CharField(model_attr='filename') - description = indexes.CharField(model_attr='description', null=True) - modified = indexes.DateTimeField(model_attr='created', null=True) - used_by = indexes.CharField(model_attr='used_by', null=True, stored=False) - mimetype = indexes.CharField( - model_attr='mimetype', - null=True, - stored=False - ) - size = indexes.IntegerField(model_attr='size', null=True, stored=False) - filename = indexes.CharField(stored=False) - - def get_model(self): - return Attachment - - def get_updated_field(self): - return 'created' - - def prepare(self, obj): - data = super(AttachmentIndex, self).prepare(obj) - - try: - file_obj = open(obj.filepath) - except IOError as e: - logger.warning(u'IOError: %s - %s', e.strerror, e.filename) - return data - backend = self._get_backend(None) - - extracted_data = backend.extract_file_contents(file_obj) - file_obj.close() - - if not extracted_data: - return data - - t = loader.select_template( - ('search/indexes/proxy/attachment_text.txt', ) - ) - data['text'] = t.render(Context({ - 'object': obj, - 'extracted': extracted_data, - })) - return data - - def prepare_filename(self, obj): - return obj.filename.translate(table).replace('.', ' ') - - def prepare_icon_name(self, obj): - return u'file' - - def prepare_type(self, obj): - return u'attachment' - - -class WikiIndex(BaseIndex, indexes.Indexable): - title = indexes.CharField(model_attr='name') - collaborators = indexes.CharField( - model_attr='collaborators', - null=True, - stored=False, - ) - - def get_model(self): - return Wiki - - def prepare_description(self, obj): - return u'{}\n{}'.format(obj.wiki_text, obj.collaborators) - - def prepare_icon_name(self, obj): - return u'book' - - def prepare_type(self, obj): - return u'wiki' - - -class TicketIndex(BaseIndex, indexes.Indexable): - tag = indexes.CharField(model_attr='status', null=True) - milestone = indexes.CharField(model_attr='milestone', null=True) - component = indexes.CharField(model_attr='component', null=True) - severity = indexes.CharField(model_attr='severity', null=True) - reporter = indexes.CharField(model_attr='reporter', null=True) - keywords = indexes.CharField(model_attr='keywords', null=True) - collaborators = indexes.CharField( - model_attr='collaborators', - null=True, - stored=False, - ) - - def get_model(self): - return Ticket - - def prepare_description(self, obj): - return u'{}\n{}\n{}\n{}\n{}\n{}\n{}'.format( - obj.description, obj.milestone, obj.component, obj.severity, - obj.reporter, obj.keywords, obj.collaborators - ) - - def prepare_icon_name(self, obj): - return u'tag' - - def prepare_title(self, obj): - return u'#{} - {}'.format(obj.pk, obj.summary) - - def prepare_type(self, obj): - return 'ticket' - - -class RevisionIndex(BaseIndex, indexes.Indexable): - description = indexes.CharField(model_attr='message', null=True) - modified = indexes.DateTimeField(model_attr='created', null=True) - repository_name = indexes.CharField( - model_attr='repository_name', - stored=False - ) - - def get_model(self): - return Revision - - def get_updated_field(self): - return 'created' - - def get_boost(self, obj): - boost = super(RevisionIndex, self).get_boost(obj) - return boost * 0.8 - - def prepare_icon_name(self, obj): - return u'align-right' - - def prepare_title(self, obj): - return u'{} [{}]'.format(obj.repository_name, obj.rev) - - def prepare_type(self, obj): - return 'changeset' diff --git a/src/proxy/templates/proxy/trac.html b/src/proxy/templates/proxy/trac.html deleted file mode 100644 index bae56e4..0000000 --- a/src/proxy/templates/proxy/trac.html +++ /dev/null @@ -1,7 +0,0 @@ -{% extends "base.html" %} - -{% block head %} - - - {{ block.super }} -{% endblock %} diff --git a/src/proxy/test.html b/src/proxy/test.html deleted file mode 100644 index 8febf1e..0000000 --- a/src/proxy/test.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - Painel Principal [Jenkins]
Tudo
 + 
   S   WNameÚltimo SucessoÚltima FalhaÚltima Duração  
Falhou0%
WDescrição%
Estabilidade de construção: Todas as construções recentes falharam.0
Portal InterlegisN/D - 1 ano 2 meses - (#13) - 4,2 segundosAgendar uma construção 
Ícone: -  S M L
\ No newline at end of file diff --git a/src/proxy/trac/diazo.xml b/src/proxy/trac/diazo.xml new file mode 100644 index 0000000..03ab404 --- /dev/null +++ b/src/proxy/trac/diazo.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + diff --git a/src/proxy/trac/search_indexes.py b/src/proxy/trac/search_indexes.py new file mode 100644 index 0000000..c7c413f --- /dev/null +++ b/src/proxy/trac/search_indexes.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- + +import math +import string + +from django.template import loader, Context +from django.utils.text import slugify +from haystack import indexes +from haystack.utils import log as logging + +from search.base_indexes import BaseIndex +from .models import Attachment, Ticket, Wiki, Revision + + +logger = logging.getLogger('haystack') + +# the string maketrans always return a string encoded with latin1 +# http://stackoverflow.com/questions/1324067/how-do-i-get-str-translate-to-work-with-unicode-strings +table = string.maketrans( + string.punctuation, + '.' * len(string.punctuation) +).decode('latin1') + + +class AttachmentIndex(BaseIndex, indexes.Indexable): + title = indexes.CharField(model_attr='filename') + description = indexes.CharField(model_attr='description', null=True) + modified = indexes.DateTimeField(model_attr='created', null=True) + used_by = indexes.CharField(model_attr='used_by', null=True, stored=False) + mimetype = indexes.CharField( + model_attr='mimetype', + null=True, + stored=False + ) + size = indexes.IntegerField(model_attr='size', null=True, stored=False) + filename = indexes.CharField(stored=False) + + def get_model(self): + return Attachment + + def get_updated_field(self): + return 'created' + + def prepare(self, obj): + data = super(AttachmentIndex, self).prepare(obj) + + try: + file_obj = open(obj.filepath) + except IOError as e: + logger.warning(u'IOError: %s - %s', e.strerror, e.filename) + return data + backend = self._get_backend(None) + + extracted_data = backend.extract_file_contents(file_obj) + file_obj.close() + + if not extracted_data: + return data + + t = loader.select_template( + ('search/indexes/proxy/attachment_text.txt', ) + ) + data['text'] = t.render(Context({ + 'object': obj, + 'extracted': extracted_data, + })) + return data + + def prepare_filename(self, obj): + return obj.filename.translate(table).replace('.', ' ') + + def prepare_icon_name(self, obj): + return u'file' + + def prepare_type(self, obj): + return u'attachment' + + +class WikiIndex(BaseIndex, indexes.Indexable): + title = indexes.CharField(model_attr='name') + collaborators = indexes.CharField( + model_attr='collaborators', + null=True, + stored=False, + ) + + def get_model(self): + return Wiki + + def prepare_description(self, obj): + return u'{}\n{}'.format(obj.wiki_text, obj.collaborators) + + def prepare_icon_name(self, obj): + return u'book' + + def prepare_type(self, obj): + return u'wiki' + + +class TicketIndex(BaseIndex, indexes.Indexable): + tag = indexes.CharField(model_attr='status', null=True) + milestone = indexes.CharField(model_attr='milestone', null=True) + component = indexes.CharField(model_attr='component', null=True) + severity = indexes.CharField(model_attr='severity', null=True) + reporter = indexes.CharField(model_attr='reporter', null=True) + keywords = indexes.CharField(model_attr='keywords', null=True) + collaborators = indexes.CharField( + model_attr='collaborators', + null=True, + stored=False, + ) + + def get_model(self): + return Ticket + + def prepare_description(self, obj): + return u'{}\n{}\n{}\n{}\n{}\n{}\n{}'.format( + obj.description, obj.milestone, obj.component, obj.severity, + obj.reporter, obj.keywords, obj.collaborators + ) + + def prepare_icon_name(self, obj): + return u'tag' + + def prepare_title(self, obj): + return u'#{} - {}'.format(obj.pk, obj.summary) + + def prepare_type(self, obj): + return 'ticket' + + +class RevisionIndex(BaseIndex, indexes.Indexable): + description = indexes.CharField(model_attr='message', null=True) + modified = indexes.DateTimeField(model_attr='created', null=True) + repository_name = indexes.CharField( + model_attr='repository_name', + stored=False + ) + + def get_model(self): + return Revision + + def get_updated_field(self): + return 'created' + + def get_boost(self, obj): + boost = super(RevisionIndex, self).get_boost(obj) + return boost * 0.8 + + def prepare_icon_name(self, obj): + return u'align-right' + + def prepare_title(self, obj): + return u'{} [{}]'.format(obj.repository_name, obj.rev) + + def prepare_type(self, obj): + return 'changeset' diff --git a/src/proxy/trac/templates/proxy/trac.html b/src/proxy/trac/templates/proxy/trac.html new file mode 100644 index 0000000..bae56e4 --- /dev/null +++ b/src/proxy/trac/templates/proxy/trac.html @@ -0,0 +1,7 @@ +{% extends "base.html" %} + +{% block head %} + + + {{ block.super }} +{% endblock %} diff --git a/src/proxy/trac/urls.py b/src/proxy/trac/urls.py index de2bb98..686bb5e 100644 --- a/src/proxy/trac/urls.py +++ b/src/proxy/trac/urls.py @@ -1,14 +1,10 @@ -from django.conf.urls import patterns, include, url +from django.conf.urls import patterns, url from .views import TracProxyView urlpatterns = patterns('', - # Trac URLs - url(r'^(?P(?:admin|wiki|changeset|newticket|ticket|chrome|timeline|roadmap|browser|report|tags|query|about|prefs|log|attachment|raw-attachment|diff|milestone).*)$', - TracProxyView.as_view()), - - # Trac - url(r'^trac/(?P.*)$', TracProxyView.as_view()), + # Trac + url(r'^trac/(?P.*)$', TracProxyView.as_view()), ) diff --git a/src/proxy/trac/views.py b/src/proxy/trac/views.py index c2e820c..b7b3ad3 100644 --- a/src/proxy/trac/views.py +++ b/src/proxy/trac/views.py @@ -1,24 +1,15 @@ -import os - from django.conf import settings -from revproxy.views import ProxyView from hitcounter.views import HitCounterViewMixin +from ..utils import ColabProxyView from .models import Wiki, Ticket, Revision -CWD = os.path.abspath(os.path.dirname(__file__)) -DIAZO_RULES_DIR = os.path.join(CWD, 'diazo') - - -class TracProxyView(HitCounterViewMixin, ProxyView): - base_url = settings.COLAB_TRAC_URL - add_remote_user = settings.REVPROXY_ADD_REMOTE_USER +class TracProxyView(HitCounterViewMixin, ColabProxyView): + upstream = settings.COLAB_TRAC_URL diazo_theme_template = 'proxy/trac.html' - diazo_rules = os.path.join(DIAZO_RULES_DIR, 'trac.xml') - html5 = True def get_object(self): obj = None diff --git a/src/proxy/urls.py b/src/proxy/urls.py index 1e59ca3..3dc853a 100644 --- a/src/proxy/urls.py +++ b/src/proxy/urls.py @@ -1,7 +1,7 @@ from django.conf.urls import patterns, include, url -from .views import ProxyView, JenkinsProxyView, GitlabProxyView, RedmineProxyView +from .views import JenkinsProxyView, GitlabProxyView, RedmineProxyView urlpatterns = patterns('', diff --git a/src/proxy/utils.py b/src/proxy/utils.py new file mode 100644 index 0000000..429ebe6 --- /dev/null +++ b/src/proxy/utils.py @@ -0,0 +1,10 @@ + +from django.conf import settings + +from revproxy.views import ProxyView + + +class ColabProxyView(ProxyView): + add_remote_user = settings.REVPROXY_ADD_REMOTE_USER + diazo_theme_template = 'base.html' + html5 = True -- libgit2 0.21.2