[Python-checkins] r76398 - in python/branches/release26-maint: Lib/test/test_weakref.py Misc/NEWS Objects/weakrefobject.c

benjamin.peterson python-checkins at python.org
Thu Nov 19 04:11:10 CET 2009


Author: benjamin.peterson
Date: Thu Nov 19 04:11:09 2009
New Revision: 76398

Log:
Merged revisions 76395 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r76395 | benjamin.peterson | 2009-11-18 21:00:02 -0600 (Wed, 18 Nov 2009) | 1 line
  
  #5037 proxy __unicode__ correctly
........


Modified:
   python/branches/release26-maint/   (props changed)
   python/branches/release26-maint/Lib/test/test_weakref.py
   python/branches/release26-maint/Misc/NEWS
   python/branches/release26-maint/Objects/weakrefobject.c

Modified: python/branches/release26-maint/Lib/test/test_weakref.py
==============================================================================
--- python/branches/release26-maint/Lib/test/test_weakref.py	(original)
+++ python/branches/release26-maint/Lib/test/test_weakref.py	Thu Nov 19 04:11:09 2009
@@ -188,6 +188,17 @@
         self.assertEqual(L3[:5], p3[:5])
         self.assertEqual(L3[2:5], p3[2:5])
 
+    def test_proxy_unicode(self):
+        # See bug 5037
+        class C(object):
+            def __str__(self):
+                return "string"
+            def __unicode__(self):
+                return u"unicode"
+        instance = C()
+        self.assertTrue("__unicode__" in dir(weakref.proxy(instance)))
+        self.assertEqual(unicode(weakref.proxy(instance)), u"unicode")
+
     def test_proxy_index(self):
         class C:
             def __index__(self):

Modified: python/branches/release26-maint/Misc/NEWS
==============================================================================
--- python/branches/release26-maint/Misc/NEWS	(original)
+++ python/branches/release26-maint/Misc/NEWS	Thu Nov 19 04:11:09 2009
@@ -251,6 +251,9 @@
 Library
 -------
 
+- Issue #5037: Proxy the __unicode__ special method instead to __unicode__
+  instead of __str__.
+
 - Issue #6894: Fixed the issue urllib2 doesn't respect "no_proxy" environment
 
 - Issue #6790: Make it possible again to pass an `array.array` to

Modified: python/branches/release26-maint/Objects/weakrefobject.c
==============================================================================
--- python/branches/release26-maint/Objects/weakrefobject.c	(original)
+++ python/branches/release26-maint/Objects/weakrefobject.c	Thu Nov 19 04:11:09 2009
@@ -433,6 +433,13 @@
         return generic(proxy, v, w); \
     }
 
+#define WRAP_METHOD(method, special) \
+    static PyObject * \
+    method(PyObject *proxy) { \
+	    UNWRAP(proxy); \
+		return PyObject_CallMethod(proxy, special, ""); \
+	}
+
 
 /* direct slots */
 
@@ -593,6 +600,15 @@
 }
 
 
+WRAP_METHOD(proxy_unicode, "__unicode__");
+
+
+static PyMethodDef proxy_methods[] = {
+	{"__unicode__", (PyCFunction)proxy_unicode, METH_NOARGS},
+	{NULL, NULL}
+};
+
+
 static PyNumberMethods proxy_as_number = {
     proxy_add,              /*nb_add*/
     proxy_sub,              /*nb_subtract*/
@@ -684,6 +700,7 @@
     0,                                  /* tp_weaklistoffset */
     (getiterfunc)proxy_iter,            /* tp_iter */
     (iternextfunc)proxy_iternext,       /* tp_iternext */
+	proxy_methods,                      /* tp_methods */
 };
 
 


More information about the Python-checkins mailing list