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:
parent
804cdca7ea
commit
009afb7c90
|
@ -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))
|
||||
|
|
|
@ -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():
|
||||
|
|
Loading…
Reference in New Issue