Instead of using inheritance, reference the ConfigParser part of SetConfig as
authorZac Medico <zmedico@gentoo.org>
Tue, 7 Oct 2008 16:00:55 +0000 (16:00 -0000)
committerZac Medico <zmedico@gentoo.org>
Tue, 7 Oct 2008 16:00:55 +0000 (16:00 -0000)
an attribute in case we want to swap out the ConfigParser implemention and no
longer want to implement the whole interface.

svn path=/main/trunk/; revision=11653

pym/portage/sets/__init__.py

index 7ac6502b756bd862fea5219a72fa1c07ddb6487d..b892bb308f0e4d35b773d8349f10dcf6abf20165 100644 (file)
@@ -22,10 +22,10 @@ def get_boolean(options, name, default):
 class SetConfigError(Exception):
        pass
 
-class SetConfig(SafeConfigParser):
+class SetConfig(object):
        def __init__(self, paths, settings, trees):
-               SafeConfigParser.__init__(self)
-               self.read(paths)
+               self._parser = SafeConfigParser()
+               self._parser.read(paths)
                self.errors = []
                self.psets = {}
                self.trees = trees
@@ -34,6 +34,7 @@ class SetConfig(SafeConfigParser):
                self.active = []
 
        def update(self, setname, options):
+               parser = self._parser
                self.errors = []
                if not setname in self.psets:
                        options["name"] = setname
@@ -41,30 +42,32 @@ class SetConfig(SafeConfigParser):
                        
                        # for the unlikely case that there is already a section with the requested setname
                        import random
-                       while setname in self.sections():
+                       while setname in parser.sections():
                                setname = "%08d" % random.randint(0, 10**10)
                        
-                       self.add_section(setname)
+                       parser.add_section(setname)
                        for k, v in options.items():
-                               self.set(setname, k, v)                 
+                               parser.set(setname, k, v)
                else:
                        section = self.psets[setname].creator
-                       if self.has_option(section, "multiset") and self.getboolean(section, "multiset"):
+                       if parser.has_option(section, "multiset") and \
+                               parser.getboolean(section, "multiset"):
                                self.errors.append("Invalid request to reconfigure set '%s' generated by multiset section '%s'" % (setname, section))
                                return
                        for k, v in options.items():
-                               self.set(section, k, v)
+                               parser.set(section, k, v)
                self._parse(update=True)
 
        def _parse(self, update=False):
                if self._parsed and not update:
                        return
-               for sname in self.sections():
+               parser = self._parser
+               for sname in parser.sections():
                        # find classname for current section, default to file based sets
-                       if not self.has_option(sname, "class"):
+                       if not parser.has_option(sname, "class"):
                                classname = "portage.sets.files.StaticFileSet"
                        else:
-                               classname = self.get(sname, "class")
+                               classname = parser.get(sname, "class")
                        
                        # try to import the specified class
                        try:
@@ -77,11 +80,12 @@ class SetConfig(SafeConfigParser):
                                        continue
                        # prepare option dict for the current section
                        optdict = {}
-                       for oname in self.options(sname):
-                               optdict[oname] = self.get(sname, oname)
+                       for oname in parser.options(sname):
+                               optdict[oname] = parser.get(sname, oname)
                        
                        # create single or multiple instances of the given class depending on configuration
-                       if self.has_option(sname, "multiset") and self.getboolean(sname, "multiset"):
+                       if parser.has_option(sname, "multiset") and \
+                               parser.getboolean(sname, "multiset"):
                                if hasattr(setclass, "multiBuilder"):
                                        newsets = {}
                                        try:
@@ -93,7 +97,8 @@ class SetConfig(SafeConfigParser):
                                                if x in self.psets and not update:
                                                        self.errors.append("Redefinition of set '%s' (sections: '%s', '%s')" % (x, self.psets[x].creator, sname))
                                                newsets[x].creator = sname
-                                               if self.has_option(sname, "world-candidate") and not self.getboolean(sname, "world-candidate"):
+                                               if parser.has_option(sname, "world-candidate") and \
+                                                       not parser.getboolean(sname, "world-candidate"):
                                                        newsets[x].world_candidate = False
                                        self.psets.update(newsets)
                                else:
@@ -101,7 +106,7 @@ class SetConfig(SafeConfigParser):
                                        continue
                        else:
                                try:
-                                       setname = self.get(sname, "name")
+                                       setname = parser.get(sname, "name")
                                except NoOptionError:
                                        setname = sname
                                if setname in self.psets and not update:
@@ -110,7 +115,8 @@ class SetConfig(SafeConfigParser):
                                        try:
                                                self.psets[setname] = setclass.singleBuilder(optdict, self.settings, self.trees)
                                                self.psets[setname].creator = sname
-                                               if self.has_option(sname, "world-candidate") and not self.getboolean(sname, "world-candidate"):
+                                               if parser.has_option(sname, "world-candidate") and \
+                                                       not parser.getboolean(sname, "world-candidate"):
                                                        self.psets[setname].world_candidate = False
                                        except SetConfigError, e:
                                                self.errors.append("Configuration error in section '%s': %s" % (sname, str(e)))
@@ -127,7 +133,7 @@ class SetConfig(SafeConfigParser):
        def getSetAtoms(self, setname, ignorelist=None):
                myset = self.getSets()[setname]
                myatoms = myset.getAtoms()
-               
+               parser = self._parser
                extend = set()
                remove = set()
                intersect = set()
@@ -135,12 +141,12 @@ class SetConfig(SafeConfigParser):
                if ignorelist is None:
                        ignorelist = set()
                if not setname in ignorelist:
-                       if self.has_option(myset.creator, "extend"):
-                               extend.update(self.get(myset.creator, "extend").split())
-                       if self.has_option(myset.creator, "remove"):
-                               remove.update(self.get(myset.creator, "remove").split())
-                       if self.has_option(myset.creator, "intersect"):
-                               intersect.update(self.get(myset.creator, "intersect").split())
+                       if parser.has_option(myset.creator, "extend"):
+                               extend.update(parser.get(myset.creator, "extend").split())
+                       if parser.has_option(myset.creator, "remove"):
+                               remove.update(parser.get(myset.creator, "remove").split())
+                       if parser.has_option(myset.creator, "intersect"):
+                               intersect.update(parser.get(myset.creator, "intersect").split())
                                                
                ignorelist.add(setname)
                for n in myset.getNonAtoms():