SF patch 588728 (Nathan Srebro).

The __delete__ method wrapper for descriptors was not supported

(I added a test, too.)

2.2 bugfix candidate.
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 1dfc5ab..543dfa4 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -1399,13 +1399,16 @@
     if verbose: print "Testing computed attributes..."
     class C(object):
         class computed_attribute(object):
-            def __init__(self, get, set=None):
+            def __init__(self, get, set=None, delete=None):
                 self.__get = get
                 self.__set = set
+                self.__delete = delete
             def __get__(self, obj, type=None):
                 return self.__get(obj)
             def __set__(self, obj, value):
                 return self.__set(obj, value)
+            def __delete__(self, obj):
+                return self.__delete(obj)
         def __init__(self):
             self.__x = 0
         def __get_x(self):
@@ -1414,13 +1417,17 @@
             return x
         def __set_x(self, x):
             self.__x = x
-        x = computed_attribute(__get_x, __set_x)
+        def __delete_x(self):
+            del self.__x
+        x = computed_attribute(__get_x, __set_x, __delete_x)
     a = C()
     vereq(a.x, 0)
     vereq(a.x, 1)
     a.x = 10
     vereq(a.x, 10)
     vereq(a.x, 11)
+    del a.x
+    vereq(hasattr(a, 'x'), 0)
 
 def newslot():
     if verbose: print "Testing __new__ slot override..."
@@ -1733,8 +1740,8 @@
     verify(not hasattr(a, "_C__x"))
     C.x.__set__(a, 100)
     vereq(C.x.__get__(a), 100)
-##    C.x.__set__(a)
-##    verify(not hasattr(a, "x"))
+    C.x.__delete__(a)
+    verify(not hasattr(a, "x"))
 
     raw = C.__dict__['x']
     verify(isinstance(raw, property))