X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fconfig.py;h=1c3f92ba5d41ec5b4bc9a64301be8bb1a23512a6;hb=1ef15ae934490b4dbb5ee652c44f282b41013e4f;hp=c86c1b36580931bf81427b6f5c0bee48d1acd8df;hpb=2a96091acb1b1eaf66f181e95872771878290885;p=dak.git diff --git a/daklib/config.py b/daklib/config.py index c86c1b36..1c3f92ba 100755 --- a/daklib/config.py +++ b/daklib/config.py @@ -32,25 +32,28 @@ import os import apt_pkg import socket -from singleton import Singleton - ################################################################################ -default_config = "/etc/dak/dak.conf" +default_config = "/etc/dak/dak.conf" #: default dak config, defines host properties def which_conf_file(): - if os.getenv("DAK_CONFIG"): - return os.getenv("DAK_CONFIG") - else: - return default_config + return os.getenv("DAK_CONFIG", default_config) -class Config(Singleton): +class Config(object): """ A Config object is a singleton containing information about the DAK configuration """ + + __shared_state = {} + def __init__(self, *args, **kwargs): - super(Config, self).__init__(*args, **kwargs) + self.__dict__ = self.__shared_state + + if not getattr(self, 'initialised', False): + self.initialised = True + self._readconf() + self._setup_routines() def _readconf(self): apt_pkg.init() @@ -74,9 +77,6 @@ class Config(Singleton): self.Find = self.Cnf.Find self.FindB = self.Cnf.FindB - def _startup(self, *args, **kwargs): - self._readconf() - def has_key(self, name): return self.Cnf.has_key(name) @@ -85,3 +85,41 @@ class Config(Singleton): def __setitem__(self, name, value): self.Cnf[name] = value + + @staticmethod + def get_db_value(name, default=None, rettype=None): + from daklib.dbconn import DBConfig, DBConn, NoResultFound + try: + res = DBConn().session().query(DBConfig).filter(DBConfig.name == name).one() + except NoResultFound: + return default + + if rettype: + return rettype(res.value) + else: + return res.value + + def _setup_routines(self): + """ + This routine is the canonical list of which fields need to exist in + the config table. If your dak instance is to work, we suggest reading it + + Of course, what the values do is another matter + """ + for field in [('db_revision', None, int), + ('defaultsuitename', 'unstable', str), + ('signingkeyids', '', str) + ]: + setattr(self, 'get_%s' % field[0], lambda x=None: self.get_db_value(field[0], field[1], field[2])) + setattr(Config, '%s' % field[0], property(fget=getattr(self, 'get_%s' % field[0]))) + + def get_defaultsuite(self): + from daklib.dbconn import get_suite + suitename = self.defaultsuitename + if not suitename: + return None + else: + return get_suite(suitename) + + defaultsuite = property(get_defaultsuite) +