views.py 1.75 KB

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(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
    add_remote_user = settings.REVPROXY_ADD_REMOTE_USER
    diazo_theme_template = 'base.html'
    diazo_rules = os.path.join(DIAZO_RULES_DIR, 'jenkins.xml')
    html5 = True