summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2005-06-03 08:37:17 +0000
committerMichael Vogt <michael.vogt@ubuntu.com>2005-06-03 08:37:17 +0000
commit2f5f5bf3157ef3e35cad7607b744cfbaa650e207 (patch)
tree4e0fb2fc8563491394d34c06867a2ef55444a83b
parent9103e321939804418a861cdaf25f8df1347d768b (diff)
downloadpython-apt-2f5f5bf3157ef3e35cad7607b744cfbaa650e207.tar.gz
* added a "cache.conenct()" function, added a "cache_changed" signal
-rw-r--r--apt/cache.py43
1 files changed, 33 insertions, 10 deletions
diff --git a/apt/cache.py b/apt/cache.py
index 465a210a..6b974905 100644
--- a/apt/cache.py
+++ b/apt/cache.py
@@ -12,6 +12,7 @@ class Cache(object):
self._depcache = apt_pkg.GetDepCache(self._cache)
self._records = apt_pkg.GetPkgRecords(self._cache)
self._dict = {}
+ self._callbacks = {}
# build the packages dict
if progress != None:
@@ -57,13 +58,24 @@ class Cache(object):
def Upgrade(self, DistUpgrade=False):
self._depcache.Upgrade(DistUpgrade)
+ self.CacheChange()
def Commit(self, fprogress, iprogress):
self._depcache.Commit(fprogress, iprogress)
+ # cache changes
def CacheChange(self):
" called internally if the cache changes, emit a signal then "
- pass
+ if not self._callbacks.has_key("cache_changed"):
+ return
+ for callback in self._callbacks["cache_changed"]:
+ apply(callback)
+
+ def connect(self, name, callback):
+ " connect to a signal, currently only used for cache_changed "
+ if not self._callbacks.has_key(name):
+ self._callbacks[name] = []
+ self._callbacks[name].append(callback)
# ----------------------------- experimental interface
class Filter(object):
@@ -98,26 +110,31 @@ class FilteredCache(Cache):
return False
return True
- def reapplyFilter(self):
+ def _reapplyFilter(self):
for pkg in self._dict.keys():
for f in self._filters:
if f.apply(self._dict[pkg]):
self._filtered[pkg] = 1
-
+ break
- def AddFilter(self, filter):
+ def SetFilter(self, filter):
+ self._filters = []
self._filters.append(filter)
- self.reapplyFilter()
+ self._reapplyFilter()
def CacheChange(self):
+ Cache.CacheChange(self)
" called internally if the cache changes, emit a signal then "
- reapplyFilter()
+ self._reapplyFilter()
+def cache_changed():
+ print "cache changed"
if __name__ == "__main__":
print "Cache self test"
apt_pkg.init()
c = Cache(OpTextProgress())
+ c.connect("cache_changed", cache_changed)
print c.has_key("aptitude")
p = c["aptitude"]
print p.Name()
@@ -127,13 +144,19 @@ if __name__ == "__main__":
x= c[pkg].Name()
c.Upgrade()
- for p in c.GetChanges():
- print p.Name()
+ changes = c.GetChanges()
+ print len(changes)
+ for p in changes:
+ #print p.Name()
+ x = p.Name()
print "Testing filtered cache"
c = FilteredCache()
c.Upgrade()
- c.AddFilter(MarkedChangesFilter())
+ c.SetFilter(MarkedChangesFilter())
+ print len(c)
for pkg in c.keys():
- print c[pkg].Name()
+ #print c[pkg].Name()
+ x = c[pkg].Name()
+ print len(c)