From 4b0ebd07ec3c651a77aa19324c0652fb4be66a65 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Tue, 7 Oct 2008 16:00:55 +0000 Subject: 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 --- pym/portage/sets/__init__.py | 54 ++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 24 deletions(-) (limited to 'pym') 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(): -- cgit v1.2.3-1-g7c22