Mercurial > treepkg > treepkg
view treepkg/web.py @ 64:2ff966839859
web: add method to create a static status web-site
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Wed, 11 Apr 2007 16:52:58 +0200 |
parents | 78cf5f6778ec |
children | 6c4a4b8d6729 |
line wrap: on
line source
# Copyright (C) 2007 by Intevation GmbH # Authors: # Bernhard Herzog <bh@intevation.de> # # This program is free software under the GPL (>=v2) # Read the file COPYING coming with the software for details. import os import shutil from genshi.template import TemplateLoader import cherrypy from cherrypy import expose from cherrypy.lib import cptools import report class Status(object): """Implements the tree packager status pages""" def __init__(self, treepkg_config): self.treepkg_config = treepkg_config self.loader = TemplateLoader([os.path.dirname(__file__)]) @expose def index(self): group = report.get_packager_group(self.treepkg_config) tmpl = self.loader.load('web-status.html') stream = tmpl.generate(report=report.prepare_report(group)) return stream.render('html') def build_log_filename(self, package_track_name, revno): """Returns the name of the build log file of a revision if it exists""" group = report.get_packager_group(self.treepkg_config) for track in group.get_package_tracks(): if track.name == package_track_name: for revision in track.get_revisions(): if str(revision.revision) == revno: if revision.has_build_log(): return revision.build_log @expose def default(self, *rest): """Handles requests for .../pkg/revno/build.log""" filename = None if len(rest) == 3 and rest[2] == "build.log": filename = self.build_log_filename(*rest[:2]) if filename is not None: return cptools.serveFile(filename, contentType="text/plain") else: raise cherrypy.HTTPError(status="404") def create_static_site(self, destdir): """Creates a static web-page under destdir""" # make sure we have an empty destdir shutil.rmtree(destdir, True) os.mkdir(destdir) # create the index file f = open(os.path.join(destdir, "index.html"), "wt") f.write(self.index()) f.close() # symlink the build-logs group = report.get_packager_group(self.treepkg_config) for track in group.get_package_tracks(): trackdir = os.path.join(destdir, track.name) for revision in track.get_revisions(): revdir = os.path.join(trackdir, str(revision.revision)) if revision.has_build_log(): if not os.path.isdir(trackdir): os.mkdir(trackdir) os.mkdir(revdir) os.symlink(revision.build_log, os.path.join(revdir, "build.log")) class TreePKG(object): """Root object for the tree packager web interface""" @expose def index(self): raise cherrypy.HTTPRedirect('/status') def runserver(treepkg_config, cherrypy_config): cherrypy.root = TreePKG() cherrypy.root.status = Status(treepkg_config=treepkg_config) cherrypy.config.update(file=cherrypy_config) cherrypy.server.start()