From: Mark Hymers Date: Sat, 24 Jan 2009 18:01:43 +0000 (+0000) Subject: add basic config module X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=62ad62039ab12953de166b0f731e8d8a5949ac57;p=dak add basic config module Signed-off-by: Mark Hymers --- diff --git a/daklib/Config.py b/daklib/Config.py new file mode 100644 index 00000000..518d4de7 --- /dev/null +++ b/daklib/Config.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python + +# Config access class +# Copyright (C) 2008 Mark Hymers + +# 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 + +################################################################################ + +# 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