[yum-cvs] yum/sqlitesack.py
Florian Festi
ffesti at linux.duke.edu
Thu Dec 6 15:39:34 UTC 2007
yum/sqlitesack.py | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
New commits:
commit 5a0c409cd6a6cb9242e168adf6a5c620af572515
Author: Florian Festi <ffesti at redhat.com>
Date: Wed Dec 5 10:42:15 2007 +0100
Catch sqlite exceptions and convert them to RepoError
as requested in rhbz #403371
diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index df03c08..cf8110f 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -32,6 +32,19 @@ import misc
from sqlutils import executeSQL
import rpmUtils.miscutils
+def catchSqliteException(func):
+ """This decorator converts sqlite exceptions into RepoError"""
+ def newFunc(*args, **kwargs):
+ try:
+ return func(*args, **kwargs)
+ except sqlutils.sqlite.Error:
+ raise Errors.RepoError
+
+ newFunc.__name__ = func.__name__
+ newFunc.__doc__ = func.__doc__
+ newFunc.__dict__.update(func.__dict__)
+ return newFunc
+
class YumAvailablePackageSqlite(YumAvailablePackage, PackageObject, RpmBase):
def __init__(self, repo, db_obj):
self._checksums = []
@@ -75,6 +88,7 @@ class YumAvailablePackageSqlite(YumAvailablePackage, PackageObject, RpmBase):
except (IndexError, KeyError):
pass
+ @catchSqliteException
def __getattr__(self, varname):
db2simplemap = { 'packagesize' : 'size_package',
'archivesize' : 'size_archive',
@@ -106,6 +120,7 @@ class YumAvailablePackageSqlite(YumAvailablePackage, PackageObject, RpmBase):
return r[0]
+ @catchSqliteException
def _loadFiles(self):
if self._loadedfiles:
return self._files
@@ -137,6 +152,7 @@ class YumAvailablePackageSqlite(YumAvailablePackage, PackageObject, RpmBase):
return self._files
+ @catchSqliteException
def _loadChangelog(self):
result = []
if not self._changelog:
@@ -174,12 +190,14 @@ class YumAvailablePackageSqlite(YumAvailablePackage, PackageObject, RpmBase):
self._loadFiles()
return RpmBase.returnFileTypes(self)
+ @catchSqliteException
def simpleFiles(self, ftype='file'):
cache = self.sack.primarydb[self.repo]
cur = cache.cursor()
executeSQL(cur, "select files.name as fname from files where files.pkgKey = ? and files.type= ?", (self.pkgKey, ftype))
return map(lambda x: x['fname'], cur)
+ @catchSqliteException
def returnPrco(self, prcotype, printable=False):
if isinstance(self.prco[prcotype], tuple):
cache = self.sack.primarydb[self.repo]
@@ -211,12 +229,14 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
'requires' : { },
}
+ @catchSqliteException
def __len__(self):
for (rep,cache) in self.primarydb.items():
cur = cache.cursor()
executeSQL(cur, "select count(pkgId) from packages")
return cur.fetchone()[0]
+ @catchSqliteException
def close(self):
for dataobj in self.primarydb.values() + \
self.filelistsdb.values() + \
@@ -297,6 +317,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return self.searchPrco(name, 'provides')
+ @catchSqliteException
def searchFiles(self, name):
"""search primary if file will be in there, if not, search filelists, use globs, if possible"""
@@ -372,6 +393,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
pkgs = misc.unique(pkgs)
return pkgs
+ @catchSqliteException
def searchPrimaryFields(self, fields, searchstring):
"""search arbitrary fields from the primarydb for a string"""
result = []
@@ -394,6 +416,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return result
+ @catchSqliteException
def returnObsoletes(self, newest=False):
if newest:
raise NotImplementedError()
@@ -426,6 +449,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return obsoletes
+ @catchSqliteException
def getPackageDetails(self,pkgId):
for (rep,cache) in self.primarydb.items():
cur = cache.cursor()
@@ -433,6 +457,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
for ob in cur:
return ob
+ @catchSqliteException
def _getListofPackageDetails(self, pkgId_list):
pkgs = []
if len(pkgId_list) == 0:
@@ -449,6 +474,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return pkgs
+ @catchSqliteException
def _search(self, prcotype, name, flags, version):
if flags == 0:
flags = None
@@ -517,6 +543,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return self._search("requires", name, flags, version)
+ @catchSqliteException
def searchPrco(self, name, prcotype):
"""return list of packages having prcotype name (any evr and flag)"""
glob = True
@@ -651,6 +678,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
'url': db['url'], 'vendor': db['rpm_vendor'], 'license': db['rpm_license'] }
return y
+ @catchSqliteException
def simplePkgList(self):
"""returns a list of pkg tuples (n, a, e, v, r) from the sack"""
@@ -671,6 +699,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return simplelist
+ @catchSqliteException
def returnNewestByNameArch(self, naTup=None):
# If naTup is set do it from the database otherwise use our parent's
@@ -694,6 +723,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
raise Errors.PackageSackError, 'No Package Matching %s.%s' % naTup
return misc.newestInList(allpkg)
+ @catchSqliteException
def returnNewestByName(self, name=None):
# If name is set do it from the database otherwise use our parent's
# returnNewestByName
@@ -716,6 +746,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return misc.newestInList(allpkg)
# Do what packages.matchPackageNames does, but query the DB directly
+ @catchSqliteException
def matchPackageNames(self, pkgspecs):
matched = []
exactmatch = []
@@ -744,6 +775,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
unmatched = misc.unique(unmatched)
return exactmatch, matched, unmatched
+ @catchSqliteException
def returnPackages(self, repoid=None):
"""Returns a list of packages, only containing nevra information """
@@ -771,6 +803,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return returnList
+ @catchSqliteException
def searchNevra(self, name=None, epoch=None, ver=None, rel=None, arch=None):
"""return list of pkgobjects matching the nevra requested"""
returnList = []
@@ -804,6 +837,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
returnList.append(self.pc(rep,x))
return returnList
+ @catchSqliteException
def excludeArchs(self, archlist):
"""excludes incompatible arches - archlist is a list of compat arches"""
More information about the Yum-cvs-commits
mailing list