diff options
Diffstat (limited to 'src/software/openlmi/software/yumdb/repository.py')
-rw-r--r-- | src/software/openlmi/software/yumdb/repository.py | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/software/openlmi/software/yumdb/repository.py b/src/software/openlmi/software/yumdb/repository.py index 2863dac..758ae21 100644 --- a/src/software/openlmi/software/yumdb/repository.py +++ b/src/software/openlmi/software/yumdb/repository.py @@ -24,7 +24,9 @@ Module holding an abstraction for YUM repository. """ from datetime import datetime +import logging import yum +import yum.Errors # maps names of Repository properties to their corresponding property # names in YumRepository object @@ -182,9 +184,19 @@ def make_repository_from_db(repo): """ if not isinstance(repo, yum.yumRepo.YumRepository): raise TypeError("repo must be in instance of yum.yumRepo.YumRepository") - metadata = dict( - (prop_name, get_prop_from_yum_repo(repo, prop_name)) - for prop_name in Repository.__slots__[1:]) + metadata = {} + for prop_name in Repository.__slots__[1:]: + try: + metadata[prop_name] = get_prop_from_yum_repo(repo, prop_name) + except yum.Errors.RepoError as exc: + # some properties can cause error (like requesting ready) + logging.getLogger(__name__).warn( + 'failed to get property "%s" of repo "%s": %s' % ( + prop_name, repo.name, exc)) + if prop_name == "ready": + metadata[prop_name] = False + continue + res = Repository(id(repo), **metadata) return res |