Mercurial > treepkg > treepkg
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]))