Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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