Commit 6481e090 authored by Benjamin Peterson's avatar Benjamin Peterson

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
........
parent 1aef4440
......@@ -188,6 +188,17 @@ class ReferencesTestCase(TestBase):
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):
......
......@@ -251,6 +251,9 @@ Core and Builtins
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
......
......@@ -433,6 +433,13 @@ proxy_checkref(PyWeakReference *proxy)
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 @@ proxy_iternext(PyWeakReference *proxy)
}
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 @@ _PyWeakref_ProxyType = {
0, /* tp_weaklistoffset */
(getiterfunc)proxy_iter, /* tp_iter */
(iternextfunc)proxy_iternext, /* tp_iternext */
proxy_methods, /* tp_methods */
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment