SF patch 564549 (Erik Andersén).

The WeakKeyDictionary constructor didn't work when a dict arg was
given.  Fixed by moving a line.  Also adding a unit test.

Bugfix candidate.
This commit is contained in:
Guido van Rossum 2002-06-10 20:00:52 +00:00
parent 804cdca7ea
commit 009afb7c90
3 changed files with 13 additions and 1 deletions

View 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))

View 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():

View File

@ -16,6 +16,7 @@ Jyrki Alakuijala
Billy G. Allie
Mark Anacker
Anders Andersen
Erik Andersén
Oliver Andrich
Ross Andrus
Jason Asbahr