from patchtracker import Conf from patchtracker.DiffGzHandler import DiffGzHandler 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.link = self._link Template.__init__(self, file=file, searchList=ourSearchList) def _link(self, where, name): return str("%s"%(where,name)) def _escape_name(self, name): return re.sub("([^a-zA-Z0-9-])", (lambda x: "_%d"%(ord(x.group(1)))), name) class PackageVersTemplate(OurTemplate): def __init__(self, srcpkg): self.src = srcpkg tpl=os.sep.join([Conf.template_dir, "package_vers.tmpl"]) sl = {} if srcpkg.diffgz_name: dfile = os.sep.join([Conf.archive_root,srcpkg.loc,srcpkg.diffgz_name]) sl['diffhandler'] = DiffGzHandler(dfile) else: sl['diffhandler'] = None 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)