--- /dev/null
+#!/usr/bin/env python
+
+# Config access class
+# Copyright (C) 2008 Mark Hymers <mhy@debian.org>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+################################################################################
+
+# <NCommander> mhy, how about "Now with 20% more monty python references"
+
+################################################################################
+
+import apt_pkg
+import socket
+
+from Singleton import Singleton
+
+################################################################################
+
+default_config = "/etc/dak/dak.conf"
+
+def which_conf_file(Cnf):
+ res = socket.gethostbyaddr(socket.gethostname())
+ if Cnf.get("Config::" + res[0] + "::DakConfig"):
+ return Cnf["Config::" + res[0] + "::DakConfig"]
+ else:
+ return default_config
+
+class Config(Singleton):
+ """
+ A Config object is a singleton containing
+ information about the DAK configuration
+ """
+ def __init__(self, *args, **kwargs):
+ super(Config, self).__init__(*args, **kwargs)
+
+ def _readconf(self):
+ apt_pkg.init()
+
+ self.Cnf = apt_pkg.newConfiguration()
+
+ apt_pkg.ReadConfigFileISC(self.Cnf, default_config)
+
+ # Check whether our dak.conf was the real one or
+ # just a pointer to our main one
+ res = socket.gethostbyaddr(socket.gethostname())
+ conffile = self.Cnf.get("Config::" + res[0] + "::DakConfig")
+ if conffile:
+ apt_pkg.ReadConfigFileISC(self.Cnf, conffile)
+
+ # Rebind some functions
+ # TODO: Clean this up
+ self.get = self.Cnf.get
+ self.SubTree = self.Cnf.SubTree
+ self.ValueList = self.Cnf.ValueList
+
+ def _startup(self, *args, **kwargs):
+ self._readconf()
+
+ def __getitem__(self, name):
+ return self.Cnf[name]
+
+ def GetDBConnString(self):
+ s = "dbname=%s" % self.Cnf["DB::Name"]
+ if self.Cnf["DB::Host"]:
+ s += " host=%s" % self.Cnf["DB::Host"]
+ if self.Cnf["DB::Port"] and self.Cnf["DB::Port"] != "-1":
+ s += " port=%s" % self.Cnf["DB::Port"]
+
+ return s