From ebb1e3830b1a6ab489cba62874e53784a24d5e00 Mon Sep 17 00:00:00 2001 From: "J. Victor Martins" Date: Mon, 4 Apr 2011 18:05:43 -0300 Subject: [PATCH] Add UrpmiPackage class Add UrpmiPackage class to access package information from the urpmi cache. - Add packages property to urpmi to return the a generator of packages as UrpmiPackage objects. --- mdvpkg/repo.py | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/mdvpkg/repo.py b/mdvpkg/repo.py index 4482314..eabbb07 100644 --- a/mdvpkg/repo.py +++ b/mdvpkg/repo.py @@ -195,6 +195,40 @@ def __repr__(self): self.epoch) +class UrpmiPackage(object): + def __init__(self, + urpmi, + name): + self._urpmi = urpmi + self.name = name + + @property + def status(self): + if self._urpmi._cache[self.name]['new']: + return 'new' + else: + return 'current' + + @property + def upgrades(self): + if self.status == 'new': + raise AttributeError, "UrpmiPackage status == 'new'" + return self._installed_updates('upgrade') + + @property + def downgrades(self): + if self.status == 'new': + raise AttributeError, "UrpmiPackage status == 'new'" + return self._installed_updates('downgrade') + + @property + def versions(self): + return self._urpmi._cache[self.name][self.status].values() + + def _installed_updates(self, update_type): + return self._urpmi._cache[self.name][update_type].values() + + class URPMI(object): """ Represents a urpmi database. """ @@ -219,11 +253,12 @@ def medias(self): def medias(self): self._medias = None - @property def packages(self): if not self._cache: self.load_db() + for name in self._cache.keys(): + yield UrpmiPackage(self, name) def load_db(self): self._cache = {}