[pypy-svn] pypy fast-forward: CPython issue5037: proxy __unicode__ correctly

amauryfa commits-noreply at bitbucket.org
Tue Jan 4 19:02:43 CET 2011


Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: fast-forward
Changeset: r40392:08bb0e36d878
Date: 2011-01-04 19:01 +0100
http://bitbucket.org/pypy/pypy/changeset/08bb0e36d878/

Log:	CPython issue5037: proxy __unicode__ correctly

diff --git a/pypy/module/_weakref/interp__weakref.py b/pypy/module/_weakref/interp__weakref.py
--- a/pypy/module/_weakref/interp__weakref.py
+++ b/pypy/module/_weakref/interp__weakref.py
@@ -297,6 +297,15 @@
         callable_proxy_typedef_dict[special_method] = interp2app(
             func, unwrap_spec=[ObjSpace] + [W_Root] * arity)
 
+# __unicode__ is not yet a space operation
+def proxy_unicode(space, w_obj):
+    w_obj = force(space, w_obj)
+    return space.call_method(w_obj, '__unicode__')
+proxy_typedef_dict['__unicode__'] = interp2app(
+    proxy_unicode, unwrap_spec=[ObjSpace, W_Root])
+callable_proxy_typedef_dict['__unicode__'] = interp2app(
+    proxy_unicode, unwrap_spec=[ObjSpace, W_Root])
+
 
 W_Proxy.typedef = TypeDef("weakproxy",
     __new__ = interp2app(descr__new__proxy),

diff --git a/pypy/module/_weakref/test/test_weakref.py b/pypy/module/_weakref/test/test_weakref.py
--- a/pypy/module/_weakref/test/test_weakref.py
+++ b/pypy/module/_weakref/test/test_weakref.py
@@ -396,6 +396,18 @@
             print s
             assert "dead" in s
 
+    def test_unicode(self):
+        import _weakref
+        class C(object):
+            def __str__(self):
+                return "string"
+            def __unicode__(self):
+                return u"unicode"
+        instance = C()
+        assert "__unicode__" in dir(_weakref.proxy(instance))
+        assert str(_weakref.proxy(instance)) == "string"
+        assert unicode(_weakref.proxy(instance)) == u"unicode"
+
     def test_eq(self):
         import _weakref
         class A(object):


More information about the Pypy-commit mailing list