summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-10-07 16:00:55 +0000
committerZac Medico <zmedico@gentoo.org>2008-10-07 16:00:55 +0000
commit4b0ebd07ec3c651a77aa19324c0652fb4be66a65 (patch)
treee76db390ca907d35e0362800529bdd8a97c54e4c
parent4f99e705dba7f7c57b319f2959301ccd746e5a2d (diff)
downloadportage-4b0ebd07ec3c651a77aa19324c0652fb4be66a65.tar.gz
portage-4b0ebd07ec3c651a77aa19324c0652fb4be66a65.tar.bz2
portage-4b0ebd07ec3c651a77aa19324c0652fb4be66a65.zip
Instead of using inheritance, reference the ConfigParser part of SetConfig as
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
-rw-r--r--pym/portage/sets/__init__.py54
1 files changed, 30 insertions, 24 deletions
diff --git a/pym/portage/sets/__init__.py b/pym/portage/sets/__init__.py
index 7ac6502b7..b892bb308 100644
--- a/pym/portage/sets/__init__.py
+++ b/pym/portage/sets/__init__.py
@@ -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():