Mercurial > treepkg > treepkg
view treepkg/readconfig.py @ 299:c32dc72ba979
Turn the SourcePackager class attribute pkg_basename into a per-track
configuratin option. The default value is the track name, as in most
cases they're identical anyway. For now, the change is compatible with
old SourcePackager subclasses that override pkg_basename.
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Fri, 20 Nov 2009 21:06:10 +0000 |
parents | 4dd6ec3a1151 |
children | e82fb08781a2 |
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", ("deb_build_options", str, ""), "pkg_revision_template", ("pkg_basename", str, ""), ("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]))