changeset 114:02c261e4443f

Extend treepkg.readconfig.read_config: - use import_packager_module - allow %(name)s substitutions in packager_class values in the pkg_* sections
author Bernhard Herzog <bh@intevation.de>
date Tue, 01 Apr 2008 13:27:21 +0000
parents 312949e7628d
children d7b53e7df961
files test/test_readconfig.py treepkg/readconfig.py
diffstat 2 files changed, 104 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- /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 <bh@intevation.de>
+#
+# 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")])
--- 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 <bh@intevation.de>
 #
@@ -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)
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)