view treepkg/readconfig.py @ 2:e6a9f4037f68

readconfig.py is smarter now about conversions and supports shlex
author Bernhard Herzog <bh@intevation.de>
date Thu, 08 Mar 2007 19:55:44 +0100
parents f78a02e79c84
children fee641fec94e
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.

"""Reads the configuration file"""

import sys
import shlex
from ConfigParser import SafeConfigParser, NoOptionError

defaults = dict(root_cmd="sudo")

packager_desc = [
    "name", "base_dir", "svn_url",
    ("root_cmd", shlex.split),
    "deb_email", "deb_fullname",
    ]

treepkg_desc = [
    ("check_interval", int),
    ]


def read_config_section(parser, section, item_desc, defaults=None):
    if defaults is None:
        defaults = dict()
    options = dict()
    for item in item_desc:
        if isinstance(item, tuple):
            key, converter = item
        else:
            key = item
            converter = str
        try:
            value = parser.get(section, key, vars=defaults)
            options[key] = converter(value)
        except NoOptionError:
            print >>sys.stderr, "%s: Missing option %r in section %r" \
                  % (filename, key, section)
            sys.exit(1)
    return options


def read_config(filename):
    """Reads the tree packager configuration from the file given by filename.

    The function returns a tuple with a ('treepkg') and a list of dicts
    ('packagers').  The treepkg dict contains the main configuration of
    the tree packager.  The packagers list contains one dict with the
    configuratiin for each packager.
    """
    parser = SafeConfigParser(defaults)
    parser.read([filename])

    # extract packager configurations
    packagers = []
    for section in parser.sections():
        if section.startswith("pkg_"):
            packagers.append(read_config_section(parser, section, packager_desc,
                                                 dict(name=section[4:])))

    # main config
    treepkg = read_config_section(parser, "treepkg", treepkg_desc)

    return treepkg, packagers


if __name__ == "__main__":
    import pprint
    print pprint.pprint(read_config(sys.argv[1]))
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)