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 = { | ... | ... |