Mercurial > treepkg > treepkg
view treepkg/readconfig.py @ 293:faeeac2c4c71
Replace debrevision_prefix with pkg_revision_template. Their meaning is
similar, but the template is not just a prefix, it's a template for
Python's %-based string formatting. This allows more complex
configuration to be done with command line settings so that it's easy to
do a one-off build with a package revision like "kk5.2".
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Tue, 06 Oct 2009 13:13:04 +0000 |
parents | bb98e728f25b |
children | 4dd6ec3a1151 |
line wrap: on
line source
# Copyright (C) 2007, 2008, 2009 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 import util import packager def convert_bool(s): s = s.lower() if s in ("true", "yes", "1"): return True if s in ("false", "no", "0"): return False raise ValueError("cannot determine boolean value of %r" % (s,)) packager_desc = [ "name", "base_dir", "svn_url", ("rules_svn_url", str, ""), "packager_class", ("root_cmd", shlex.split, "sudo"), "pbuilderrc", "deb_email", "deb_fullname", "pkg_revision_template", ("handle_dependencies", convert_bool), ("signing_key_id", str, ""), ] treepkg_desc = [ ("check_interval", int), "instructions_file", ] def read_config_section(parser, section, item_desc, defaults=None): if defaults is None: defaults = dict() options = dict() for item in item_desc: has_default_value = False if isinstance(item, tuple): key, converter = item[:2] if len(item) == 3: default_value = item[-1] has_default_value = True else: key = item converter = str try: value = parser.get(section, key, vars=defaults) except NoOptionError: if has_default_value: value = default_value else: print >>sys.stderr, "Missing option %r in section %r" \ % (key, section) sys.exit(1) options[key] = converter(value) return options def read_config(filename): """Reads the tree packager configuration from the file given by filename. The function returns a tuple with a dict ('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() parser.read([filename]) # extract packager configurations packagers = [] for section in parser.sections(): if section.startswith("pkg_"): vars = dict(name=section[4:]) packager_class = parser.get(section, "packager_class", vars=vars) module = packager.import_packager_module(packager_class) desc = packager_desc + module.PackageTrack.extra_config_desc packagers.append(read_config_section(parser, section, desc, defaults=vars)) # 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]))