def filelistsmetadata_from_sqlite_factory(sqlitepath, archpath): fil_obj = FilelistsMetadata(sqlitepath, archpath) con = sqlite.Connection(sqlitepath) fil_cur = con.cursor() fil_cur.execute('SELECT * FROM packages') for row in fil_cur: fp = FilelistsDbPackage() pkgkey = row[0] fp.checksum = row[1] cur = con.cursor() cur.execute( 'SELECT dirname, filenames, filetypes FROM filelist WHERE pkgKey=?', (pkgkey, )) for dirname, filenames, filetypes in cur: # XXX: If there is dir without name '/' it's splited into 2 empty string # so, if there are two empty string next to each other, replace # it with only one empty string splited_filenames = filenames.split('/') filtered_splited_filenames = [] if len(filenames): filtered_splited_filenames.append(splited_filenames[0]) for i in xrange(1, len(filenames.split('/'))): if splited_filenames[i] == '' and splited_filenames[i - 1] == '': continue filtered_splited_filenames.append(splited_filenames[i]) # XXX: End for filename, ftype in zip(filtered_splited_filenames, list(filetypes)): # If in XML is "foo" in db will be DIR: "." FILE: "foo" # Thus result will be "./foo" after join, so if dir is "." # do not do a join if dirname != ".": path = os.path.join(dirname, filename) else: path = filename if ftype == 'f': fp.files.add(path) fp.files_db.add(filename) elif ftype == 'd': fp.dirs.add(path) fp.dirs_db.add(filename) else: fp.ghosts.add(path) fp.ghosts_db.add(filename) fp.dbdirectories.append(dirname) fp.dbdirectories = sorted(fp.dbdirectories) fil_obj.append(fp.checksum, fp) return fil_obj
def filelistsmetadata_from_sqlite_factory(sqlitepath, archpath): fil_obj = FilelistsMetadata(sqlitepath, archpath) con = sqlite.Connection(sqlitepath) fil_cur = con.cursor() fil_cur.execute('SELECT * FROM packages') for row in fil_cur: fp = FilelistsDbPackage() pkgkey = row[0] fp.checksum = row[1] cur = con.cursor() cur.execute('SELECT dirname, filenames, filetypes FROM filelist WHERE pkgKey=?', (pkgkey,)) for dirname, filenames, filetypes in cur: # XXX: If there is dir without name '/' it's splited into 2 empty string # so, if there are two empty string next to each other, replace # it with only one empty string splited_filenames = filenames.split('/') filtered_splited_filenames = [] if len(filenames): filtered_splited_filenames.append(splited_filenames[0]) for i in xrange(1, len(filenames.split('/'))): if splited_filenames[i] == '' and splited_filenames[i-1] == '': continue filtered_splited_filenames.append(splited_filenames[i]) # XXX: End for filename, ftype in zip(filtered_splited_filenames, list(filetypes)): # If in XML is "foo" in db will be DIR: "." FILE: "foo" # Thus result will be "./foo" after join, so if dir is "." # do not do a join if dirname != ".": path = os.path.join(dirname, filename) else: path = filename if ftype == 'f': fp.files.add(path) fp.files_db.add(filename) elif ftype == 'd': fp.dirs.add(path) fp.dirs_db.add(filename) else: fp.ghosts.add(path) fp.ghosts_db.add(filename) fp.dbdirectories.append(dirname) fp.dbdirectories = sorted(fp.dbdirectories) fil_obj.append(fp.checksum, fp) return fil_obj
def filelistsmetadata_from_xml_factory(xmlpath, archpath): fil_obj = FilelistsMetadata(xmlpath, archpath) for _, elements in etree.iterparse(xmlpath, tag="%spackage" % FIL_NS): elements = MyElement(elements) fp = FilelistsPackage() fp.checksum = elements.get("pkgid") fp.arch = elements.get("arch") fp.name = elements.get("name") for elem in elements: elem = MyElement(elem) if elem.tag.endswith("version"): fp.epoch = elem.get("epoch") fp.version = elem.get("ver") fp.release = elem.get("rel") elif elem.tag.endswith("file"): if elem.get("type") == "dir": fp.dirs.add(elem.text) elif elem.get("type") == "ghost": fp.ghosts.add(elem.text) else: fp.files.add(elem.text) elements.clear() fil_obj.append(fp.checksum, fp) return fil_obj