summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/weakref.py67
1 files changed, 36 insertions, 31 deletions
diff --git a/Lib/weakref.py b/Lib/weakref.py
index 9373f02..77a41b1 100644
--- a/Lib/weakref.py
+++ b/Lib/weakref.py
@@ -57,6 +57,20 @@ class WeakValueDictionary(UserDict.UserDict):
else:
return o
+ def __contains__(self, key):
+ try:
+ o = self.data[key]()
+ except KeyError:
+ return False
+ return o is not None
+
+ def has_key(self, key):
+ try:
+ o = self.data[key]()
+ except KeyError:
+ return False
+ return o is not None
+
def __repr__(self):
return "<WeakValueDictionary at %s>" % id(self)
@@ -93,14 +107,22 @@ class WeakValueDictionary(UserDict.UserDict):
return L
def iteritems(self):
- return WeakValuedItemIterator(self)
+ for wr in self.data.itervalues():
+ value = wr()
+ if value is not None:
+ yield wr.key, value
def iterkeys(self):
return self.data.iterkeys()
- __iter__ = iterkeys
+
+ def __iter__(self):
+ return self.data.iterkeys()
def itervalues(self):
- return WeakValuedValueIterator(self)
+ for wr in self.data.itervalues():
+ obj = wr()
+ if obj is not None:
+ yield obj
def popitem(self):
while 1:
@@ -236,11 +258,19 @@ class WeakKeyDictionary(UserDict.UserDict):
return L
def iteritems(self):
- return WeakKeyedItemIterator(self)
+ for wr, value in self.data.iteritems():
+ key = wr()
+ if key is not None:
+ yield key, value
def iterkeys(self):
- return WeakKeyedKeyIterator(self)
- __iter__ = iterkeys
+ for wr in self.data.iterkeys():
+ obj = wr()
+ if obj is not None:
+ yield obj
+
+ def __iter__(self):
+ return self.iterkeys()
def itervalues(self):
return self.data.itervalues()
@@ -275,28 +305,3 @@ class WeakKeyDictionary(UserDict.UserDict):
d[ref(key, self._remove)] = value
if len(kwargs):
self.update(kwargs)
-
-
-def WeakKeyedKeyIterator(weakdict):
- for wr in weakdict.data.iterkeys():
- obj = wr()
- if obj is not None:
- yield obj
-
-def WeakKeyedItemIterator(weakdict):
- for wr, value in weakdict.data.iteritems():
- key = wr()
- if key is not None:
- yield key, value
-
-def WeakValuedValueIterator(weakdict):
- for wr in weakdict.data.itervalues():
- obj = wr()
- if obj is not None:
- yield obj
-
-def WeakValuedItemIterator(weakdict):
- for wr in weakdict.data.itervalues():
- value = wr()
- if value is not None:
- yield wr.key, value