def primarymetadata_from_xml_factory(xmlpath, archpath): pri_obj = PrimaryMetadata(xmlpath, archpath) for _, elements in etree.iterparse(xmlpath, tag="%spackage" % PRI_NS): elements = MyElement(elements) pp = PrimaryPackage() for elem in elements: elem = MyElement(elem) if elem.tag.endswith("name"): pp.name = elem.text elif elem.tag.endswith("arch"): pp.arch = elem.text elif elem.tag.endswith("version"): pp.epoch = elem.get("epoch") pp.version = elem.get("ver") pp.release = elem.get("rel") elif elem.tag.endswith("checksum"): pp.checksum_type = elem.get("type") pp.checksum = elem.text elif elem.tag.endswith("summary"): pp.summary = elem.text elif elem.tag.endswith("description"): pp.description = elem.text elif elem.tag.endswith("packager"): pp.packager = elem.text elif elem.tag.endswith("url"): pp.url = elem.text elif elem.tag.endswith("time"): pp.time_file = int(elem.get("file")) pp.time_build = int(elem.get("build")) elif elem.tag.endswith("size"): pp.size_package = int(elem.get("package")) pp.size_installed = int(elem.get("installed")) pp.size_archive = int(elem.get("archive")) elif elem.tag.endswith("location"): pp.location = elem.get("href") pp.location_base = elem.get("{http://www.w3.org/XML/1998/namespace}base") elif elem.tag.endswith("format"): for felem in elem: if felem.tag.endswith("license"): pp.license = felem.text elif felem.tag.endswith("vendor"): pp.vendor = felem.text elif felem.tag.endswith("group"): pp.group = felem.text elif felem.tag.endswith("buildhost"): pp.buildhost = felem.text elif felem.tag.endswith("sourcerpm"): pp.sourcerpm = felem.text elif felem.tag.endswith("header-range"): pp.header_start = int(felem.get("start")) pp.header_end = int(felem.get("end")) elif felem.tag.endswith("provides"): pp.provides = _parse_pco(felem) elif felem.tag.endswith("conflicts"): pp.conflicts = _parse_pco(felem) elif felem.tag.endswith("obsoletes"): pp.obsoletes = _parse_pco(felem) elif felem.tag.endswith("requires"): pp.requires = _parse_pco(felem, requires=True) elif felem.tag.endswith("file"): if felem.get("type") == "dir": pp.dirs.add(felem.text) elif felem.get("type") == "ghost": pp.ghosts.add(felem.text) else: pp.files.add(felem.text) elements.clear() pri_obj.append(pp.checksum, pp) return pri_obj
def primarymetadata_from_xml_factory(xmlpath, archpath): pri_obj = PrimaryMetadata(xmlpath, archpath) for _, elements in etree.iterparse(xmlpath, tag="%spackage" % PRI_NS): elements = MyElement(elements) pp = PrimaryPackage() for elem in elements: elem = MyElement(elem) if elem.tag.endswith("name"): pp.name = elem.text elif elem.tag.endswith("arch"): pp.arch = elem.text elif elem.tag.endswith("version"): pp.epoch = elem.get("epoch") pp.version = elem.get("ver") pp.release = elem.get("rel") elif elem.tag.endswith("checksum"): pp.checksum_type = elem.get("type") pp.checksum = elem.text elif elem.tag.endswith("summary"): pp.summary = elem.text elif elem.tag.endswith("description"): pp.description = elem.text elif elem.tag.endswith("packager"): pp.packager = elem.text elif elem.tag.endswith("url"): pp.url = elem.text elif elem.tag.endswith("time"): pp.time_file = int(elem.get("file")) pp.time_build = int(elem.get("build")) elif elem.tag.endswith("size"): pp.size_package = int(elem.get("package")) pp.size_installed = int(elem.get("installed")) pp.size_archive = int(elem.get("archive")) elif elem.tag.endswith("location"): pp.location = elem.get("href") pp.location_base = elem.get( "{http://www.w3.org/XML/1998/namespace}base") elif elem.tag.endswith("format"): for felem in elem: if felem.tag.endswith("license"): pp.license = felem.text elif felem.tag.endswith("vendor"): pp.vendor = felem.text elif felem.tag.endswith("group"): pp.group = felem.text elif felem.tag.endswith("buildhost"): pp.buildhost = felem.text elif felem.tag.endswith("sourcerpm"): pp.sourcerpm = felem.text elif felem.tag.endswith("header-range"): pp.header_start = int(felem.get("start")) pp.header_end = int(felem.get("end")) elif felem.tag.endswith("provides"): pp.provides = _parse_pco(felem) elif felem.tag.endswith("conflicts"): pp.conflicts = _parse_pco(felem) elif felem.tag.endswith("obsoletes"): pp.obsoletes = _parse_pco(felem) elif felem.tag.endswith("requires"): pp.requires = _parse_pco(felem, requires=True) elif felem.tag.endswith("file"): if felem.get("type") == "dir": pp.dirs.add(felem.text) elif felem.get("type") == "ghost": pp.ghosts.add(felem.text) else: pp.files.add(felem.text) elements.clear() pri_obj.append(pp.checksum, pp) return pri_obj
def primarymetadata_from_sqlite_factory(sqlitepath, archpath): pri_obj = PrimaryMetadata(sqlitepath, archpath) con = sqlite.Connection(sqlitepath) pri_cur = con.cursor() col_packages = ['checksum', 'name', 'arch', 'version', 'epoch', 'release', 'summary', 'description', 'url', 'time_file', 'time_build', 'license', 'vendor', 'group', 'buildhost', 'sourcerpm', 'header_start', 'header_end', 'packager', 'size_package', 'size_installed', 'size_archive', 'location', 'location_base', 'checksum_type'] pri_cur.execute('SELECT * FROM packages') for row in pri_cur: pp = PrimaryPackage() uid = row[0] for key, val in zip(col_packages, row[1:]): setattr(pp, key, val) if pp.location_base == None: pp.location_base = '' cur = con.cursor() # provides, obsoletes, conflicts for pco in ('obsoletes', 'provides', 'conflicts'): pco_set = set([]) cur.execute('SELECT * FROM %s WHERE pkgKey=?' % pco, (uid,)) for name, flag, epoch, ver, rel, _ in cur: pco_set.add((name, flag, epoch, ver, rel)) setattr(pp, pco, pco_set) # requires req_set = set([]) cur.execute('SELECT * FROM requires WHERE pkgKey=?', (uid,)) for name, flag, epoch, ver, rel, _, pre in cur: if pre == 'TRUE': pre = True else: pre = False req_set.add((name, flag, epoch, ver, rel, pre)) setattr(pp, 'requires', req_set) #files files = set([]) dirs = set([]) ghosts = set([]) cur.execute('SELECT name, type FROM files WHERE pkgKey=?', (uid,)) for filename, ftype in cur: if ftype == 'file': files.add(filename) elif ftype == 'dir': dirs.add(filename) elif ftype == 'ghost': ghosts.add(filename) pp.files = files pp.dirs = dirs pp.ghosts = ghosts pri_obj.append(pp.checksum, pp) return pri_obj
def primarymetadata_from_sqlite_factory(sqlitepath, archpath): pri_obj = PrimaryMetadata(sqlitepath, archpath) con = sqlite.Connection(sqlitepath) pri_cur = con.cursor() col_packages = [ 'checksum', 'name', 'arch', 'version', 'epoch', 'release', 'summary', 'description', 'url', 'time_file', 'time_build', 'license', 'vendor', 'group', 'buildhost', 'sourcerpm', 'header_start', 'header_end', 'packager', 'size_package', 'size_installed', 'size_archive', 'location', 'location_base', 'checksum_type' ] pri_cur.execute('SELECT * FROM packages') for row in pri_cur: pp = PrimaryPackage() uid = row[0] for key, val in zip(col_packages, row[1:]): setattr(pp, key, val) if pp.location_base == None: pp.location_base = '' cur = con.cursor() # provides, obsoletes, conflicts for pco in ('obsoletes', 'provides', 'conflicts'): pco_set = set([]) cur.execute('SELECT * FROM %s WHERE pkgKey=?' % pco, (uid, )) for name, flag, epoch, ver, rel, _ in cur: pco_set.add((name, flag, epoch, ver, rel)) setattr(pp, pco, pco_set) # requires req_set = set([]) cur.execute('SELECT * FROM requires WHERE pkgKey=?', (uid, )) for name, flag, epoch, ver, rel, _, pre in cur: if pre == 'TRUE': pre = True else: pre = False req_set.add((name, flag, epoch, ver, rel, pre)) setattr(pp, 'requires', req_set) #files files = set([]) dirs = set([]) ghosts = set([]) cur.execute('SELECT name, type FROM files WHERE pkgKey=?', (uid, )) for filename, ftype in cur: if ftype == 'file': files.add(filename) elif ftype == 'dir': dirs.add(filename) elif ftype == 'ghost': ghosts.add(filename) pp.files = files pp.dirs = dirs pp.ghosts = ghosts pri_obj.append(pp.checksum, pp) return pri_obj