Fix SF 762891: "del p[key]" on proxy object raises SystemError()

This commit is contained in:
Raymond Hettinger 2003-06-30 04:18:48 +00:00
parent 562a855da0
commit d693a81595
3 changed files with 49 additions and 1 deletions

View File

@ -226,6 +226,17 @@ class ReferencesTestCase(TestBase):
self.assert_(not hasattr(o, 'foo'),
"object does not reflect attribute removal via proxy")
def test_proxy_deletion(self):
# Test clearing of SF bug #762891
class Foo:
result = None
def __delitem__(self, accessor):
self.result = accessor
g = Foo()
f = weakref.proxy(g)
del f[0]
self.assertEqual(f.result, 0)
def test_getweakrefcount(self):
o = C()
ref1 = weakref.ref(o)

View File

@ -4,6 +4,39 @@ Python News
(editors: check NEWS.help for information about editing NEWS using ReST.)
What's New in Python 2.3 release candidate?
===========================================
Core and builtins
-----------------
Extension modules
-----------------
- weakref.proxy() can now handle "del obj[i]" for proxy objects
defining __delitem__. Formerly, it generated a SystemError.
- SSL no longer crashes the interpreter when the remote side disconnects.
Library
-------
Tools/Demos
-----------
Build
-----
C API
-----
Windows
-------
Mac
---
What's New in Python 2.3 beta 2?
================================

View File

@ -389,7 +389,11 @@ proxy_setitem(PyWeakReference *proxy, PyObject *key, PyObject *value)
{
if (!proxy_checkref(proxy))
return -1;
return PyObject_SetItem(PyWeakref_GET_OBJECT(proxy), key, value);
if (value == NULL)
return PyObject_DelItem(PyWeakref_GET_OBJECT(proxy), key);
else
return PyObject_SetItem(PyWeakref_GET_OBJECT(proxy), key, value);
}
/* iterator slots */