]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/config.py
Suppress warnings in the most suitable files.
[dak.git] / daklib / config.py
index 2f24cd3a84aee1598092a652b3963e21252fed5e..9993ec3adbfb3bb2d61c4168d726e72eb7bc5cad 100755 (executable)
@@ -32,25 +32,38 @@ import os
 import apt_pkg
 import socket
 
-from singleton import Singleton
-
 ################################################################################
 
 default_config = "/etc/dak/dak.conf" #: default dak config, defines host properties
 
+# suppress some deprecation warnings in squeeze related to apt_pkg
+# module
+import warnings
+warnings.filterwarnings('ignore', \
+    "Attribute '.*' of the 'apt_pkg\.Configuration' object is deprecated, use '.*' instead\.", \
+    DeprecationWarning)
+warnings.filterwarnings('ignore', \
+    "apt_pkg\.newConfiguration\(\) is deprecated\. Use apt_pkg\.Configuration\(\) instead\.", \
+    DeprecationWarning)
+
 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 +87,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 +95,42 @@ 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),
+                      ('exportpath',       '',         str)
+                      ]:
+            setattr(self, 'get_%s' % field[0], lambda s=None, x=field[0], y=field[1], z=field[2]: self.get_db_value(x, y, z))
+            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)
+