view treepkg/web.py @ 52:78cf5f6778ec

Rename 'packagel ine' -> 'package track'
author Bernhard Herzog <bh@intevation.de>
date Tue, 03 Apr 2007 20:33:33 +0200
parents 467013d9d627
children 2ff966839859
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

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")



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()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)