# HG changeset patch # User Bernhard Herzog # Date 1207056441 0 # Node ID 02c261e4443f20985cea243b410fe302562d7d37 # Parent 312949e7628dd5652b3e274be2a41b2455b1afaa Extend treepkg.readconfig.read_config: - use import_packager_module - allow %(name)s substitutions in packager_class values in the pkg_* sections diff -r 312949e7628d -r 02c261e4443f test/test_readconfig.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/test_readconfig.py Tue Apr 01 13:27:21 2008 +0000 @@ -0,0 +1,98 @@ +# Copyright (C) 2008 by Intevation GmbH +# Authors: +# Bernhard Herzog +# +# This program is free software under the GPL (>=v2) +# Read the file COPYING coming with the software for details. + +"""Tests for the treepkg.readconfig module""" + +import sys +import os +import operator +import unittest + +from filesupport import FileTestMixin + +from treepkg.readconfig import read_config + + +class TestReadConfig(unittest.TestCase, FileTestMixin): + + config_contents = """\ +[DEFAULT] +treepkg_dir: /home/builder/mill +tracks_dir: %(treepkg_dir)s/tracks +root_cmd: sudo +pbuilder_dir: %(treepkg_dir)s/pbuilder +pbuilderrc: %(pbuilder_dir)s/pbuilderrc +deb_email: treepkg@example.com +deb_fullname: TreePKG +debrevision_prefix: treepkg + +[treepkg] +instructions_file: %(treepkg_dir)s/instructions +check_interval: 3600 + +[pkg_simple] +svn_url: svn://example.com/%(name)s/trunk +base_dir: %(tracks_dir)s/%(name)s +packager_class: readconfig_test.%(name)s + +[pkg_extraargs] +svn_url: svn://example.com/%(name)s/trunk +base_dir: %(tracks_dir)s/%(name)s +packager_class: readconfig_test.extraargs +orig_tarball: %(base_dir)s/mytarball.tgz +""" + + files = [("treepkg.cfg", config_contents), + ("readconfig_test", + [("__init__.py", ""), + ("simple.py", + "\n".join(["class SourcePackager:", + " pass", + ""])), + ("extraargs.py", + "\n".join(["class PackageTrack:", + " extra_config_desc=['orig_tarball']", + ""]))])] + + def setUp(self): + self.directory = self.create_temp_dir(self.id()) + self.create_files(self.directory, self.files) + self.old_path = sys.path + sys.path = [self.directory] + sys.path + + def tearDown(self): + sys.path = self.old_path + + def test_readconfig(self): + config_file = os.path.join(self.directory, "treepkg.cfg") + treepkg_opts, packager_opts = read_config(config_file) + self.assertEquals(treepkg_opts, + dict(instructions_file="/home/builder/mill/instructions", + check_interval=3600)) + self.assertEquals(sorted(packager_opts, + key=operator.itemgetter("name")), + [ + dict(name="extraargs", + base_dir="/home/builder/mill/tracks/extraargs", + deb_email="treepkg@example.com", + deb_fullname="TreePKG", + debrevision_prefix="treepkg", + packager_class="readconfig_test.extraargs", + pbuilderrc="/home/builder/mill/pbuilder/pbuilderrc", + root_cmd=['sudo'], + svn_url="svn://example.com/extraargs/trunk", + orig_tarball=("/home/builder/mill/" + "tracks/extraargs/mytarball.tgz")), + dict(name="simple", + base_dir="/home/builder/mill/tracks/simple", + deb_email="treepkg@example.com", + deb_fullname="TreePKG", + debrevision_prefix="treepkg", + packager_class="readconfig_test.simple", + pbuilderrc="/home/builder/mill/pbuilder/pbuilderrc", + root_cmd=['sudo'], + svn_url="svn://example.com/simple/trunk")]) diff -r 312949e7628d -r 02c261e4443f treepkg/readconfig.py --- a/treepkg/readconfig.py Tue Apr 01 12:30:39 2008 +0000 +++ b/treepkg/readconfig.py Tue Apr 01 13:27:21 2008 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007 by Intevation GmbH +# Copyright (C) 2007, 2008 by Intevation GmbH # Authors: # Bernhard Herzog # @@ -12,6 +12,7 @@ from ConfigParser import SafeConfigParser, NoOptionError import util +import packager defaults = dict(root_cmd="sudo") @@ -62,11 +63,12 @@ packagers = [] for section in parser.sections(): if section.startswith("pkg_"): - packager_class = parser.get(section, "packager_class") - module = util.import_dotted_name(packager_class) + 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, - dict(name=section[4:]))) + defaults=vars)) # main config treepkg = read_config_section(parser, "treepkg", treepkg_desc)