From 1749e8ced2c702ab422f6d8fd3dceb59365af18a Mon Sep 17 00:00:00 2001 From: Sergio Oliveira Date: Thu, 24 Oct 2013 09:47:23 -0200 Subject: [PATCH] Counting hits in trac objects --- requirements.txt | 2 +- src/colab/custom_settings.py | 1 + src/proxy/models.py | 11 ++++------- src/proxy/views.py | 32 ++++++++++++++++++++++++++++++-- src/super_archives/models.py | 3 ++- src/super_archives/views.py | 10 ++++++---- 6 files changed, 44 insertions(+), 15 deletions(-) diff --git a/requirements.txt b/requirements.txt index fde9f4c..ff4aad7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,7 +24,7 @@ tornado # Deps for Single SignOn (SSO) django-browserid -git+https://github.com/TracyWebTech/django-revproxy/ +django-revproxy # Converse.js (XMPP client) django-conversejs==0.2.8 diff --git a/src/colab/custom_settings.py b/src/colab/custom_settings.py index b6d5e28..300fd24 100644 --- a/src/colab/custom_settings.py +++ b/src/colab/custom_settings.py @@ -91,6 +91,7 @@ INSTALLED_APPS = INSTALLED_APPS + ( 'accounts', 'proxy', 'search', + 'hitcount', # Feedzilla and deps 'feedzilla', diff --git a/src/proxy/models.py b/src/proxy/models.py index e98a4ba..10c7015 100644 --- a/src/proxy/models.py +++ b/src/proxy/models.py @@ -3,13 +3,10 @@ from django.db import models from accounts.models import User +from hitcount.models import HitCountModelMixin -# get_absolute_url em todos -# get_author_url em todos - - -class Revision(models.Model): +class Revision(models.Model, HitCountModelMixin): rev = models.TextField(blank=True, primary_key=True) author = models.TextField(blank=True) message = models.TextField(blank=True) @@ -29,7 +26,7 @@ class Revision(models.Model): except User.DoesNotExist: return None -class Ticket(models.Model): +class Ticket(models.Model, HitCountModelMixin): id = models.IntegerField(primary_key=True) summary = models.TextField(blank=True) description = models.TextField(blank=True) @@ -60,7 +57,7 @@ class Ticket(models.Model): return None -class Wiki(models.Model): +class Wiki(models.Model, HitCountModelMixin): name = models.TextField(primary_key=True) wiki_text = models.TextField(blank=True) author = models.TextField(blank=True) diff --git a/src/proxy/views.py b/src/proxy/views.py index e14729a..0f8a8c0 100644 --- a/src/proxy/views.py +++ b/src/proxy/views.py @@ -4,19 +4,47 @@ import os from django.conf import settings from revproxy.views import ProxyView +from .models import Wiki, Ticket, Revision +from hitcount.views import HitCountViewMixin CWD = os.path.abspath(os.path.dirname(__file__)) DIAZO_RULES_DIR = os.path.join(CWD, 'diazo') - -class TracProxyView(ProxyView): +class TracProxyView(HitCountViewMixin, ProxyView): base_url = settings.COLAB_TRAC_URL add_remote_user = settings.REVPROXY_ADD_REMOTE_USER diazo_theme_template = 'proxy/trac.html' diazo_rules = os.path.join(DIAZO_RULES_DIR, 'trac.xml') html5 = True + def get_object(self): + obj = None + + if self.request.path_info.startswith('/wiki'): + wiki_name = self.request.path_info.split('/', 2)[-1] + if not wiki_name: + wiki_name = 'WikiStart' + try: + obj = Wiki.objects.get(name=wiki_name) + except Wiki.DoesNotExist: + return None + elif self.request.path_info.startswith('/ticket'): + ticket_id = self.request.path_info.split('/')[2] + try: + obj = Ticket.objects.get(id=ticket_id) + except (Ticket.DoesNotExist, ValueError): + return None + elif self.request.path_info.startswith('/changeset'): + changeset, repo = self.request.path_info.split('/')[2:4] + try: + obj = Revision.objects.get(rev=changeset, + repository_name=repo) + except Revision.DoesNotExist: + return None + + return obj + class JenkinsProxyView(ProxyView): base_url = settings.COLAB_CI_URL diff --git a/src/super_archives/models.py b/src/super_archives/models.py index 67d4ac1..d91e10d 100644 --- a/src/super_archives/models.py +++ b/src/super_archives/models.py @@ -14,6 +14,7 @@ from django.utils.translation import ugettext_lazy as _ from html2text import html2text from haystack.query import SearchQuerySet from taggit.managers import TaggableManager +from hitcount.models import HitCountModelMixin from .utils import blocks from .utils.etiquetador import etiquetador @@ -107,7 +108,7 @@ class Keyword(models.Model): return self.keyword -class Thread(models.Model): +class Thread(models.Model, HitCountModelMixin): subject_token = models.CharField(max_length=512) mailinglist = models.ForeignKey(MailingList, diff --git a/src/super_archives/views.py b/src/super_archives/views.py index a53ff5c..c329965 100644 --- a/src/super_archives/views.py +++ b/src/super_archives/views.py @@ -16,12 +16,10 @@ from django.contrib.auth.decorators import login_required from django.shortcuts import render, redirect from . import queries -from .decorators import count_hit from .utils.email import send_verification_email from .models import MailingList, Thread, EmailAddress, EmailAddressValidation -@count_hit def thread(request, mailinglist, thread_token): try: @@ -29,6 +27,12 @@ def thread(request, mailinglist, thread_token): thread_token) except ObjectDoesNotExist: raise http.Http404 + + thread = Thread.objects.get(subject_token=thread_token, + mailinglist__name=mailinglist) + + thread.hit() + order_by = request.GET.get('order') if order_by == 'voted': msgs_query = queries.get_messages_by_voted() @@ -44,8 +48,6 @@ def thread(request, mailinglist, thread_token): total_votes += email.votes_count() # Update relevance score - thread = Thread.objects.get(subject_token=thread_token, - mailinglist__name=mailinglist) thread.update_score() context = { -- libgit2 0.21.2