Beispiel #1
0
    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			
Beispiel #3
0
    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
Beispiel #4
0
	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