from patchtracker import Conf 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("%s"%(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 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})