from patchtracker import Conf from patchtracker.DiffGzHandler import DiffGzHandler from Cheetah.Template import Template from Cheetah.Compiler import Compiler import os import errno class OurTemplate(Template): def __init__(self, file, searchList=None): ourSearchList={"conf":Conf} if searchList: for k,v in searchList.iteritems(): ourSearchList[k]=v Template.__init__(self, file=file, searchList=ourSearchList) class PackageVersTemplate(OurTemplate): src = None suite = None def __init__(self, srcpkg, suite): self.src = srcpkg self.suite = suite 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 OurTemplate.__init__(self, file=tpl, searchList=sl) class FrontPageTemplate(OurTemplate): allindex = None relindices = [] def __init__(self, allindex): tpl = os.sep.join([Conf.template_dir, "frontpage.tmpl"]) OurTemplate.__init__(self, file=tpl) self.allindex = allindex class LetterTocTemplate(OurTemplate): def __init__(self, letter, collection): self.pkgs = collection self.idx = letter self.dists = {} for name,packagelist in collection.iteritems(): for d in packagelist.iterkeys(): self.dists[d] = True tpl = os.sep.join([Conf.template_dir, "letter_toc.tmpl"]) OurTemplate.__init__(self, file=tpl) def releases(self): return dists 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): tpl = os.sep.join([Conf.template_dir, "patch_view.tmpl"]) sl = {'package':pkg, 'version':vers, 'name':name, 'patch':patch} OurTemplate.__init__(self, file=tpl, searchList=sl) class PageWriter: def __init__(self, filename, template): try: os.makedirs(os.path.dirname(filename)) except OSError, e: if e.errno != errno.EEXIST: raise e o = file(filename, "w") o.write(str(template)) o.close() class PackageVersWriter(PageWriter): def __init__(self, srcpkg, suite): t = PackageVersTemplate(srcpkg,suite) dstdir = os.sep.join([Conf.output_dir, "package", t.src.name, t.src.version]) try: os.makedirs(dstdir) except OSError, e: if e.errno != errno.EEXIST: raise e dst = os.sep.join([dstdir, "index.html"]) PageWriter.__init__(self, dst, t) class FrontPageWriter(PageWriter): def __init__(self, allindex, release_indices=[]): t = FrontPageTemplate(allindex, release_indices) dest = os.sep.join([Conf.output_dir, "index.html"]) PageWriter.__init__(self, dest, t)