Commit 1749e8ced2c702ab422f6d8fd3dceb59365af18a
1 parent
56fc1188
Exists in
master
and in
39 other branches
Counting hits in trac objects
Showing
6 changed files
with
44 additions
and
15 deletions
Show diff stats
requirements.txt
src/colab/custom_settings.py
src/proxy/models.py
| ... | ... | @@ -3,13 +3,10 @@ |
| 3 | 3 | from django.db import models |
| 4 | 4 | |
| 5 | 5 | from accounts.models import User |
| 6 | +from hitcount.models import HitCountModelMixin | |
| 6 | 7 | |
| 7 | 8 | |
| 8 | -# get_absolute_url em todos | |
| 9 | -# get_author_url em todos | |
| 10 | - | |
| 11 | - | |
| 12 | -class Revision(models.Model): | |
| 9 | +class Revision(models.Model, HitCountModelMixin): | |
| 13 | 10 | rev = models.TextField(blank=True, primary_key=True) |
| 14 | 11 | author = models.TextField(blank=True) |
| 15 | 12 | message = models.TextField(blank=True) |
| ... | ... | @@ -29,7 +26,7 @@ class Revision(models.Model): |
| 29 | 26 | except User.DoesNotExist: |
| 30 | 27 | return None |
| 31 | 28 | |
| 32 | -class Ticket(models.Model): | |
| 29 | +class Ticket(models.Model, HitCountModelMixin): | |
| 33 | 30 | id = models.IntegerField(primary_key=True) |
| 34 | 31 | summary = models.TextField(blank=True) |
| 35 | 32 | description = models.TextField(blank=True) |
| ... | ... | @@ -60,7 +57,7 @@ class Ticket(models.Model): |
| 60 | 57 | return None |
| 61 | 58 | |
| 62 | 59 | |
| 63 | -class Wiki(models.Model): | |
| 60 | +class Wiki(models.Model, HitCountModelMixin): | |
| 64 | 61 | name = models.TextField(primary_key=True) |
| 65 | 62 | wiki_text = models.TextField(blank=True) |
| 66 | 63 | author = models.TextField(blank=True) | ... | ... |
src/proxy/views.py
| ... | ... | @@ -4,19 +4,47 @@ import os |
| 4 | 4 | from django.conf import settings |
| 5 | 5 | |
| 6 | 6 | from revproxy.views import ProxyView |
| 7 | +from .models import Wiki, Ticket, Revision | |
| 8 | +from hitcount.views import HitCountViewMixin | |
| 7 | 9 | |
| 8 | 10 | |
| 9 | 11 | CWD = os.path.abspath(os.path.dirname(__file__)) |
| 10 | 12 | DIAZO_RULES_DIR = os.path.join(CWD, 'diazo') |
| 11 | 13 | |
| 12 | - | |
| 13 | -class TracProxyView(ProxyView): | |
| 14 | +class TracProxyView(HitCountViewMixin, ProxyView): | |
| 14 | 15 | base_url = settings.COLAB_TRAC_URL |
| 15 | 16 | add_remote_user = settings.REVPROXY_ADD_REMOTE_USER |
| 16 | 17 | diazo_theme_template = 'proxy/trac.html' |
| 17 | 18 | diazo_rules = os.path.join(DIAZO_RULES_DIR, 'trac.xml') |
| 18 | 19 | html5 = True |
| 19 | 20 | |
| 21 | + def get_object(self): | |
| 22 | + obj = None | |
| 23 | + | |
| 24 | + if self.request.path_info.startswith('/wiki'): | |
| 25 | + wiki_name = self.request.path_info.split('/', 2)[-1] | |
| 26 | + if not wiki_name: | |
| 27 | + wiki_name = 'WikiStart' | |
| 28 | + try: | |
| 29 | + obj = Wiki.objects.get(name=wiki_name) | |
| 30 | + except Wiki.DoesNotExist: | |
| 31 | + return None | |
| 32 | + elif self.request.path_info.startswith('/ticket'): | |
| 33 | + ticket_id = self.request.path_info.split('/')[2] | |
| 34 | + try: | |
| 35 | + obj = Ticket.objects.get(id=ticket_id) | |
| 36 | + except (Ticket.DoesNotExist, ValueError): | |
| 37 | + return None | |
| 38 | + elif self.request.path_info.startswith('/changeset'): | |
| 39 | + changeset, repo = self.request.path_info.split('/')[2:4] | |
| 40 | + try: | |
| 41 | + obj = Revision.objects.get(rev=changeset, | |
| 42 | + repository_name=repo) | |
| 43 | + except Revision.DoesNotExist: | |
| 44 | + return None | |
| 45 | + | |
| 46 | + return obj | |
| 47 | + | |
| 20 | 48 | |
| 21 | 49 | class JenkinsProxyView(ProxyView): |
| 22 | 50 | base_url = settings.COLAB_CI_URL | ... | ... |
src/super_archives/models.py
| ... | ... | @@ -14,6 +14,7 @@ from django.utils.translation import ugettext_lazy as _ |
| 14 | 14 | from html2text import html2text |
| 15 | 15 | from haystack.query import SearchQuerySet |
| 16 | 16 | from taggit.managers import TaggableManager |
| 17 | +from hitcount.models import HitCountModelMixin | |
| 17 | 18 | |
| 18 | 19 | from .utils import blocks |
| 19 | 20 | from .utils.etiquetador import etiquetador |
| ... | ... | @@ -107,7 +108,7 @@ class Keyword(models.Model): |
| 107 | 108 | return self.keyword |
| 108 | 109 | |
| 109 | 110 | |
| 110 | -class Thread(models.Model): | |
| 111 | +class Thread(models.Model, HitCountModelMixin): | |
| 111 | 112 | |
| 112 | 113 | subject_token = models.CharField(max_length=512) |
| 113 | 114 | mailinglist = models.ForeignKey(MailingList, | ... | ... |
src/super_archives/views.py
| ... | ... | @@ -16,12 +16,10 @@ from django.contrib.auth.decorators import login_required |
| 16 | 16 | from django.shortcuts import render, redirect |
| 17 | 17 | |
| 18 | 18 | from . import queries |
| 19 | -from .decorators import count_hit | |
| 20 | 19 | from .utils.email import send_verification_email |
| 21 | 20 | from .models import MailingList, Thread, EmailAddress, EmailAddressValidation |
| 22 | 21 | |
| 23 | 22 | |
| 24 | -@count_hit | |
| 25 | 23 | def thread(request, mailinglist, thread_token): |
| 26 | 24 | |
| 27 | 25 | try: |
| ... | ... | @@ -29,6 +27,12 @@ def thread(request, mailinglist, thread_token): |
| 29 | 27 | thread_token) |
| 30 | 28 | except ObjectDoesNotExist: |
| 31 | 29 | raise http.Http404 |
| 30 | + | |
| 31 | + thread = Thread.objects.get(subject_token=thread_token, | |
| 32 | + mailinglist__name=mailinglist) | |
| 33 | + | |
| 34 | + thread.hit() | |
| 35 | + | |
| 32 | 36 | order_by = request.GET.get('order') |
| 33 | 37 | if order_by == 'voted': |
| 34 | 38 | msgs_query = queries.get_messages_by_voted() |
| ... | ... | @@ -44,8 +48,6 @@ def thread(request, mailinglist, thread_token): |
| 44 | 48 | total_votes += email.votes_count() |
| 45 | 49 | |
| 46 | 50 | # Update relevance score |
| 47 | - thread = Thread.objects.get(subject_token=thread_token, | |
| 48 | - mailinglist__name=mailinglist) | |
| 49 | 51 | thread.update_score() |
| 50 | 52 | |
| 51 | 53 | context = { | ... | ... |