def iteritems(self): try: self.con.execute( "SELECT cpv, key, value FROM %s NATURAL JOIN %s " "WHERE label=%s" % (self.SCHEMA_PACKAGE_NAME, self.SCHEMA_VALUES_NAME, self.label) ) except self._BaseError as e: raise cache_errors.CacheCorruption(self, cpv, e) oldcpv = None l = [] for x, y, v in self.con.fetchall(): if oldcpv != x: if oldcpv != None: d = dict(l) if "_eclasses_" in d: d["_eclasses_"] = reconstruct_eclasses(oldcpv, d["_eclasses_"]) else: d["_eclasses_"] = {} yield cpv, d l.clear() oldcpv = x l.append((y, v)) if oldcpv != None: d = dict(l) if "_eclasses_" in d: d["_eclasses_"] = reconstruct_eclasses(oldcpv, d["_eclasses_"]) else: d["_eclasses_"] = {} yield cpv, d
def iteritems(self): try: self.con.execute("SELECT cpv, key, value FROM %s NATURAL JOIN %s " "WHERE label=%s" % (self.SCHEMA_PACKAGE_NAME, self.SCHEMA_VALUES_NAME, self.label)) except self._BaseError as e: raise cache_errors.CacheCorruption(self, cpv, e) oldcpv = None l = [] for x, y, v in self.con.fetchall(): if oldcpv != x: if oldcpv != None: d = dict(l) if "_eclasses_" in d: d["_eclasses_"] = reconstruct_eclasses(oldcpv, d["_eclasses_"]) else: d["_eclasses_"] = {} yield cpv, d l.clear() oldcpv = x l.append((y,v)) if oldcpv != None: d = dict(l) if "_eclasses_" in d: d["_eclasses_"] = reconstruct_eclasses(oldcpv, d["_eclasses_"]) else: d["_eclasses_"] = {} yield cpv, d
def _parse_data(self, data, cpv): _hashed_re_match = self._hashed_re.match d = {} for line in data: hashed = False hashed_match = _hashed_re_match(line) if hashed_match is None: d.clear() try: for i, key in enumerate(self.auxdbkey_order): d[key] = data[i] except IndexError: pass break else: d[hashed_match.group(1)] = hashed_match.group(2) if "_eclasses_" not in d: if "INHERITED" in d: if self.ec is None: self.ec = portage.eclass_cache.cache(self.location[:-15]) getter = attrgetter(self.validation_chf) try: ec_data = self.ec.get_eclass_data(d["INHERITED"].split()) d["_eclasses_"] = dict((k, (v.eclass_dir, getter(v))) for k, v in ec_data.items()) except KeyError as e: # INHERITED contains a non-existent eclass. raise cache_errors.CacheCorruption(cpv, e) else: d["_eclasses_"] = {} elif isinstance(d["_eclasses_"], basestring): # We skip this if flat_hash.database._parse_data() was called above # because it calls reconstruct_eclasses() internally. d["_eclasses_"] = reconstruct_eclasses(None, d["_eclasses_"]) return d
def _parse_data(self, data, cpv): _hashed_re_match = self._hashed_re.match d = {} for line in data: hashed = False hashed_match = _hashed_re_match(line) if hashed_match is None: d.clear() try: for i, key in enumerate(self.auxdbkey_order): d[key] = data[i] except IndexError: pass break else: d[hashed_match.group(1)] = hashed_match.group(2) if "_eclasses_" not in d: if "INHERITED" in d: if self.ec is None: self.ec = portage.eclass_cache.cache(self.location[:-15]) getter = attrgetter(self.validation_chf) try: ec_data = self.ec.get_eclass_data(d["INHERITED"].split()) d["_eclasses_"] = dict((k, (v.eclass_dir, getter(v))) for k,v in ec_data.items()) except KeyError as e: # INHERITED contains a non-existent eclass. raise cache_errors.CacheCorruption(cpv, e) else: d["_eclasses_"] = {} elif isinstance(d["_eclasses_"], basestring): # We skip this if flat_hash.database._parse_data() was called above # because it calls reconstruct_eclasses() internally. d["_eclasses_"] = reconstruct_eclasses(None, d["_eclasses_"]) return d