view treepkg/report.py @ 41:f7ec40638a06

use the enums for the status field of RevisionStatus
author Bernhard Herzog <bh@intevation.de>
date Thu, 15 Mar 2007 21:12:23 +0100
parents 22192fad1f79
children 78cf5f6778ec
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.

"""Support for status reports"""

from packager import create_package_line, PackagerGroup
from readconfig import read_config

class struct(object):

    """Class to create simple struct like objects

    All keyword arguments passed to the constructor are available as
    instance variables.
    """

    def __init__(self, **kw):
        self.__dict__.update(kw)

    def __repr__(self):
        fields = ["%s=%r" % item for item in self.__dict__.items()]
        return "struct(" + ", ".join(fields)  + ")"


def get_packager_group(config_file):
    treepkg_opts, packager_opts = read_config(config_file)
    return PackagerGroup([create_package_line(**opts)
                          for opts in packager_opts],
                         **treepkg_opts)

def status_class(status):
    """Returns the CSS class for a status"""
    if status.finished:
        return "finished"
    elif status.error:
        return "error"
    else:
        return "inprogress"

def format_time(timestamp):
    """Formats a datetime object for a status report

    if the argument is true, the return value is simply str applied to
    the argument, which for datetime objects is a string with the format
    'YYYY-MM-DD hh:mm:ss'.  If the argument is false, the return value
    is '<unknown>'.
    """
    if timestamp:
        return str(timestamp)
    else:
        return "<unknown>"


def prepare_status(status):
    return struct(desc=status.status.description,
                  start=format_time(status.start),
                  stop=format_time(status.stop),
                  cls=status_class(status.status))

def prepare_report(group):
    revisions = {}
    columns = []
    pkglines = group.get_package_lines()
    num_columns = len(pkglines)
    for column, line in enumerate(pkglines):
        columns.append((column, line.name))
        for revision in line.get_revisions():
            row = revisions.setdefault(revision.revision, [None] * num_columns)
            row[column] = struct(revno=revision.revision,
                                 revision=revision,
                                 column=column,
                                 name=line.name,
                                 status=prepare_status(revision.status))

    # convert the revisions dict into a sorted list of (revno, row)
    # pairs
    revisions = revisions.items()
    revisions.sort()
    revisions.reverse()

    return struct(columns=columns,
                  revisions=revisions)
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)