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: 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, release_indices=[]): tpl = os.sep.join([Conf.template_dir, "frontpage.tmpl"]) OurTemplate.__init__(self, file=tpl) self.allindex = allindex self.relindices = release_indices class LetterTocTemplate(OurTemplate): idx = None pkgs = None dists = None def releases(self): return dists 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) 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) class LetterTocWriter(PageWriter): def __init__(self, letter, collection): t = LetterTocTemplate(letter, collection) dest = os.sep.join([Conf.output_dir, "index", t.idx, "index.html"]) PageWriter.__init__(self, dest, t)