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 (​) """
return '​'.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)
|