summaryrefslogtreecommitdiffstats
path: root/src/software/openlmi/software/yumdb/repository.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/software/openlmi/software/yumdb/repository.py')
-rw-r--r--src/software/openlmi/software/yumdb/repository.py18
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