summaryrefslogtreecommitdiff
path: root/patchtracker/Templates.py
blob: 42140a8237e727356f831226299ac8f8c44d734b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
from patchtracker import Conf, DB
from patchtracker.DiffGzHandler import DiffGzHandler
from patchtracker.DebTarHandler import DebTarHandler
from patchtracker.SourceArchive import ReleaseList

from Cheetah.Template import Template
from Cheetah.Compiler import Compiler
import os, errno
import re

class OurTemplate(Template):
  def __init__(self, file, searchList=None):
    ourSearchList={"conf":Conf, "crumbs":[]}
    if searchList:
      for k,v in searchList.iteritems():
        ourSearchList[k]=v
    self.escape_name = self._escape_name
    self.wrappable_version = self._wrappable_version
    self.link = self._link
    Template.__init__(self, file=file, searchList=ourSearchList)

  def _link(self, where, name):
    return str("<a href=\"%s\">%s</a>"%(where,name))

  def _escape_name(self, name):
    return re.sub("([^a-zA-Z0-9-])", (lambda x: "_%d"%(ord(x.group(1)))), name)

  def _wrappable_version(self, version):
    """ output a version that can be broken up by a web browser using
        the unicode zero-whitespace-break character (&#8203;) """
    return '&#8203;'.join([version[i:i+12] for i in range(0,len(version),12)])

class PackageVersTemplate(OurTemplate):
  def __init__(self, srcpkg):
    self.src = srcpkg
    tpl=os.sep.join([Conf.template_dir, "package_vers.tmpl"])
    sl = {}
    # XXX c/p from PatchCmd.make_diffhandler
    db = DB.PatchTrackerDB()
    dfile = db.findDiffGz(srcpkg.name,srcpkg.version)
    if dfile:
      sl['diffhandler'] = DiffGzHandler(dfile)
    else:
      dfile = db.findDebTar(srcpkg.name, srcpkg.version)
      if dfile:
        sl['diffhandler'] = DebTarHandler(dfile)
    sl['crumbs'] = [("package/"+srcpkg.name,srcpkg.name),
                    ("package/"+srcpkg.name+"/"+srcpkg.version,
                     srcpkg.name+"/"+srcpkg.version)]
    OurTemplate.__init__(self, file=tpl, searchList=sl)

class FrontPageTemplate(OurTemplate):
  def __init__(self, indices):
    tpl = os.sep.join([Conf.template_dir, "frontpage.tmpl"])
    OurTemplate.__init__(self, file=tpl)
    self.indices = indices

class LetterTocTemplate(OurTemplate):
  def __init__(self, letter, collection):
    self.pkgs = collection
    self.idx = letter
    self.dists = ReleaseList("debian")
    sl = {}
    sl['crumbs'] = [("index/"+letter,"index for "+letter)]
    tpl = os.sep.join([Conf.template_dir, "letter_toc.tmpl"])
    OurTemplate.__init__(self, file=tpl, searchList=sl)

class SearchResultsTemplate(OurTemplate):
  def __init__(self, search, searchtype, collection):
    self.pkgs = {}
    self.idx = search
    self.searchtype = searchtype
    self.dists = ReleaseList("debian")
    for idx in collection.indices():
      for name,packagelist in collection.getletter(idx).iteritems():
        self.pkgs[name] = packagelist
    tpl = os.sep.join([Conf.template_dir, "searchresults.tmpl"])
    OurTemplate.__init__(self, file=tpl)


class ErrorTemplate(OurTemplate):
  def __init__(self, msg):
    tpl = os.sep.join([Conf.template_dir, "cgi_error.tmpl"])
    OurTemplate.__init__(self, file=tpl, searchList={'error':msg})

class PatchTemplate(OurTemplate):
  def __init__(self, pkg=None, vers=None, name=None, patch=None,patchtype=None):
    tpl = os.sep.join([Conf.template_dir, "patch_view.tmpl"])
    sl = {'package':pkg, 'version':vers, 'name':name, 
          'patch':patch, 'patchtype':patchtype}
    sl['crumbs'] = [("package/"+pkg,pkg),
                    ("package/"+pkg+"/"+vers, pkg+"/"+vers)]
    if patchtype == "debianonly":
      sl['crumbs'].append( ("patch/%s/view/%s/%s"%(patchtype,pkg,vers),
                            "./debian-dir only patch") )
    elif patchtype == "series":
      sl['crumbs'].append(("patch/%s/view/%s/%s/%s"%(patchtype,pkg,vers,name),
                           "series patch "+name) )
    elif patchtype == "misc":
      sl['crumbs'].append(("patch/%s/view/%s/%s/%s"%(patchtype,pkg,vers,name),
                           "direct patch of "+name) )
    OurTemplate.__init__(self, file=tpl, searchList=sl)