]> granicus.if.org Git - python/commitdiff
SF patch 564549 (Erik Andersén).
authorGuido van Rossum <guido@python.org>
Mon, 10 Jun 2002 20:00:52 +0000 (20:00 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 10 Jun 2002 20:00:52 +0000 (20:00 +0000)
The WeakKeyDictionary constructor didn't work when a dict arg was
given.  Fixed by moving a line.  Also adding a unit test.

Bugfix candidate.

Lib/test/test_weakref.py
Lib/weakref.py
Misc/ACKS

index 9f164821e5814cc6b5bef790ef817cf2846b881a..076435841d914177811c591c59666ca645e8c940 100644 (file)
@@ -391,6 +391,17 @@ class MappingTestCase(TestBase):
             values.remove(v)
         self.assert_(len(values) == 0, "itervalues() did not touch all values")
 
+    def test_make_weak_keyed_dict_from_dict(self):
+        o = Object(3)
+        dict = weakref.WeakKeyDictionary({o:364})
+        self.assert_(dict[o] == 364)
+
+    def test_make_weak_keyed_dict_from_weak_keyed_dict(self):
+        o = Object(3)
+        dict = weakref.WeakKeyDictionary({o:364})
+        dict2 = weakref.WeakKeyDictionary(dict)
+        self.assert_(dict[o] == 364)
+
     def make_weak_keyed_dict(self):
         dict = weakref.WeakKeyDictionary()
         objects = map(Object, range(self.COUNT))
index 70d36fa3b98c7acd88f8a008d20006bc40c870ea..a1fa4e82de423cabf56962c0186ffb1b70bdb859 100644 (file)
@@ -144,12 +144,12 @@ class WeakKeyDictionary(UserDict.UserDict):
 
     def __init__(self, dict=None):
         self.data = {}
-        if dict is not None: self.update(dict)
         def remove(k, selfref=ref(self)):
             self = selfref()
             if self is not None:
                 del self.data[k]
         self._remove = remove
+        if dict is not None: self.update(dict)
 
     def __delitem__(self, key):
         for ref in self.data.iterkeys():
index 0adeec30c08588f7037dd45090b49e0a4eabb7b1..51807a7c5d08506659adde46be5075aa62c800c5 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -16,6 +16,7 @@ Jyrki Alakuijala
 Billy G. Allie
 Mark Anacker
 Anders Andersen
+Erik Andersén
 Oliver Andrich
 Ross Andrus
 Jason Asbahr