Hello All,<br>
<br>
Has anyone worked with rpm-python, i am kinda stuck in the addErase() function, Any help will be appreciated!<br>
<br>
Thanks,<br>
Vedanta<br>
<br>
Here is the code:<br>
<br>
#!/bin/env python<br>
import os,rpm,md5,sys<br>
<br>
class rpm_cb:<br>
def __init__(self):<br>
self.fdno={}<br>
<br>
<br>
def callbackInstall(self, what, amount, total, mydata, wibble):<br>
if what == rpm.RPMCALLBACK_TRANS_START:<br>
pass<br>
<br>
elif what == rpm.RPMCALLBACK_INST_OPEN_FILE:<br>
hdr, path = mydata<br>
print "Installing %s\r" % (hdr["name"])<br>
fdno = os.open(path, os.O_RDONLY)<br>
nvr
= '%s-%s-%s' % ( hdr['name'], hdr['version'], hdr['release'] )<br>
self.fdno[nvr] = fdno<br>
return fdno<br>
<br>
elif what == rpm.RPMCALLBACK_INST_CLOSE_FILE:<br>
hdr, path = mydata<br>
nvr
= '%s-%s-%s' % ( hdr['name'], hdr['version'], hdr['release'] )<br>
os.close(self.fdno[nvr])<br>
<br>
elif what == rpm.RPMCALLBACK_INST_PROGRESS:<br>
hdr, path = mydata<br>
print "%s: %.5s%% done\r" % (hdr["name"], (float(amount) / total)
* 100)<br>
<br>
def callbackRemove(self, what, amount, total, mydata, wibble):<br>
if what == rpm.RPMCALLBACK_TRANS_START:<br>
pass<br>
<br>
#elif what == rpm.RPMCALLBACK_INST_OPEN_FILE:<br>
# hdr, path = mydata<br>
# print "Installing %s\r" % (hdr["name"])<br>
# fdno = os.open(path, os.O_RDONLY)<br>
# nvr =
'%s-%s-%s' % ( hdr['name'], hdr['version'], hdr['release'] )<br>
# self.fdno[nvr] = fdno<br>
# return fdno<br>
<br>
#elif what == rpm.RPMCALLBACK_INST_CLOSE_FILE:<br>
# hdr, path = mydata<br>
# nvr =
'%s-%s-%s' % ( hdr['name'], hdr['version'], hdr['release'] )<br>
# os.close(self.fdno[nvr])<br>
<br>
elif what == rpm.RPMCALLBACK_UNINST_START:<br>
<br>
<br>
elif what == rpm.RPMCALLBACK_INST_PROGRESS:<br>
hdr, path = mydata<br>
print "%s: %.5s%% done\r" % (hdr["name"], (float(amount) / total)
* 100)<br>
<br>
<br>
class myrpm:<br>
def queryInstalledPackage(self,rpmname):<br>
ts = rpm.ts()<br>
mi = ts.dbMatch("name",rpmname)<br>
for hdr in mi:<br>
print "%s-%s-%s" % (hdr['name'],hdr['version'],hdr['release'])<br>
<br>
def queryInstalledPackages(self,pattern):<br>
ts = rpm.ts()<br>
mi = ts.dbMatch()<br>
mi.pattern("name",rpm.RPMMIRE_GLOB,pattern)<br>
for hdr in mi:<br>
print "%s-%s-%s" % (hdr['name'],hdr['version'],hdr['release'])<br>
<br>
def queryPackage(self,rpmlocation):<br>
ts = rpm.ts()<br>
fdno=os.open(rpmlocation,os.O_RDONLY)<br>
try:<br>
hdr = ts.hdrFromFdno(fdno)<br>
except:<br>
fdno=os.open(rpmlocation,os.O_RDONLY)<br>
ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES)<br>
hdr = ts.hdrFromFdno(fdno)<br>
os.close(fdno)<br>
print "%s-%s-%s : %s" %
(hdr['name'],hdr['version'],hdr['release'],hdr['description'])<br>
<br>
def install(self,rpmlocation):<br>
ts = rpm.ts()<br>
fdno=os.open(rpmlocation,os.O_RDONLY)<br>
try:<br>
hdr = ts.hdrFromFdno(fdno)<br>
except:<br>
fdno=os.open(rpmlocation,os.O_RDONLY)<br>
ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES)<br>
hdr = ts.hdrFromFdno(fdno)<br>
os.close(fdno)<br>
ts.addInstall(hdr,(hdr,rpmlocation),"u")<br>
cb=rpm_cb()<br>
ts.run(cb.callbackInstall,'')<br>
<br>
def remove(self,rpmname):<br>
ts = rpm.ts()<br>
mi = ts.dbMatch(rpm.RPMTAG_NAME,rpmname)<br>
mi.pattern(rpm.RPMTAG_ARCH,rpm.RPMMIRE_DEFAULT,"i386")<br>
for idx in mi:<br>
instance = mi.instance()<br>
#ts.addErase(instance)<br>
print type(instance);<br>
<br>
<br>
<br>
if __name__=="__main__":<br>
x=myrpm()<br>
<br>
# query a particular installed package<br>
#x.queryInstalledPackage(sys.argv[1])<br>
<br>
# query many installed packages using regex<br>
#x.queryInstalledPackages(sys.argv[1])<br>
<br>
# query a package that exists in rpmlocation, but is not installed<br>
#x.queryPackage(sys.argv[1])<br>
<br>
# install a package<br>
#x.install(sys.argv[1])<br>
<br>
# uninstall a package<br>
x.remove(sys.argv[1])<br>
<br><br>-- <br>*~:~*~:~*~:~*~:~*~:~*~:~*~:~*~:~*~:~*~:~*<br>Vedanta Barooah<br>YM! - vedanta2006<br>Skype - vedanta2006<br>