]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/config.py
Add by-hash support
[dak.git] / daklib / config.py
old mode 100755 (executable)
new mode 100644 (file)
index fef7512..a6a7951
@@ -28,6 +28,7 @@ Config access class
 
 ################################################################################
 
+import grp
 import os
 import apt_pkg
 import socket
@@ -39,12 +40,7 @@ default_config = "/etc/dak/dak.conf" #: default dak config, defines host propert
 # suppress some deprecation warnings in squeeze related to apt_pkg
 # module
 import warnings
-warnings.filterwarnings('ignore', \
-    "Attribute '.*' of the 'apt_pkg.*' object is deprecated, use '.*' instead\.", \
-    DeprecationWarning)
-warnings.filterwarnings('ignore', \
-    "apt_pkg.*\(\) is deprecated\. .* apt_pkg.*\(\) for the replacement\.", \
-    DeprecationWarning)
+warnings.filterwarnings('ignore', ".*apt_pkg.* is deprecated.*", DeprecationWarning)
 
 ################################################################################
 
@@ -70,27 +66,44 @@ class Config(object):
     def _readconf(self):
         apt_pkg.init()
 
-        self.Cnf = apt_pkg.newConfiguration()
+        self.Cnf = apt_pkg.Configuration()
 
-        apt_pkg.ReadConfigFileISC(self.Cnf, which_conf_file())
+        apt_pkg.read_config_file_isc(self.Cnf, which_conf_file())
 
         # 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)
+            apt_pkg.read_config_file_isc(self.Cnf, conffile)
+
+        # Read group-specific options
+        if 'ByGroup' in self.Cnf:
+            bygroup = self.Cnf.subtree('ByGroup')
+            groups = set([os.getgid()])
+            groups.update(os.getgroups())
+
+            for group in bygroup.list():
+                gid = grp.getgrnam(group).gr_gid
+                if gid in groups:
+                    if bygroup.get(group):
+                        apt_pkg.read_config_file_isc(self.Cnf, bygroup[group])
+                    break
 
         # Rebind some functions
         # TODO: Clean this up
         self.get = self.Cnf.get
-        self.SubTree = self.Cnf.SubTree
-        self.ValueList = self.Cnf.ValueList
-        self.Find = self.Cnf.Find
-        self.FindB = self.Cnf.FindB
+        self.subtree = self.Cnf.subtree
+        self.value_list = self.Cnf.value_list
+        self.find = self.Cnf.find
+        self.find_b = self.Cnf.find_b
+        self.find_i = self.Cnf.find_i
 
     def has_key(self, name):
-        return self.Cnf.has_key(name)
+        return name in self.Cnf
+
+    def __contains__(self, name):
+        return name in self.Cnf
 
     def __getitem__(self, name):
         return self.Cnf[name]
@@ -120,8 +133,7 @@ class Config(object):
         """
         for field in [('db_revision',      None,       int),
                       ('defaultsuitename', 'unstable', str),
-                      ('signingkeyids',    '',         str),
-                      ('exportpath',       '',         str)
+                      ('use_extfiles',     None,       int)
                       ]:
             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])))
@@ -135,4 +147,3 @@ class Config(object):
             return get_suite(suitename)
 
     defaultsuite = property(get_defaultsuite)
-