[Checkins] SVN: Acquisition/trunk/ - Fixed bug: When an object did not implement ``__unicode__``, calling

Christian Zagrodnick cz at gocept.com
Tue Mar 1 14:56:04 EST 2011


Log message for revision 120651:
  - Fixed bug: When an object did not implement ``__unicode__``, calling 
    ``unicode(wrapped)`` was calling ``__str__`` with an unwrapped ``self``.
  
  (reported by David Glick on zope-dev)
  
  
  

Changed:
  U   Acquisition/trunk/CHANGES.txt
  U   Acquisition/trunk/src/Acquisition/_Acquisition.c
  U   Acquisition/trunk/src/Acquisition/tests.py

-=-
Modified: Acquisition/trunk/CHANGES.txt
===================================================================
--- Acquisition/trunk/CHANGES.txt	2011-03-01 19:40:37 UTC (rev 120650)
+++ Acquisition/trunk/CHANGES.txt	2011-03-01 19:56:03 UTC (rev 120651)
@@ -4,7 +4,10 @@
 2.13.7 (unreleased)
 -------------------
 
+- Fixed bug: When an object did not implement ``__unicode__``, calling
+  ``unicode(wrapped)`` was calling ``__str__`` with an unwrapped ``self``.
 
+
 2.13.6 (2011-02-19)
 -------------------
 

Modified: Acquisition/trunk/src/Acquisition/_Acquisition.c
===================================================================
--- Acquisition/trunk/src/Acquisition/_Acquisition.c	2011-03-01 19:40:37 UTC (rev 120650)
+++ Acquisition/trunk/src/Acquisition/_Acquisition.c	2011-03-01 19:56:03 UTC (rev 120651)
@@ -853,7 +853,7 @@
   else
     {
       PyErr_Clear();
-      return PyObject_Unicode(self->obj);
+      return Wrapper_str(self);
     }
 }
 

Modified: Acquisition/trunk/src/Acquisition/tests.py
===================================================================
--- Acquisition/trunk/src/Acquisition/tests.py	2011-03-01 19:40:37 UTC (rev 120650)
+++ Acquisition/trunk/src/Acquisition/tests.py	2011-03-01 19:56:03 UTC (rev 120651)
@@ -2501,7 +2501,23 @@
         self.assertEqual(u'str was called', unicode(wrapped))
         self.assertEqual('str was called', str(wrapped))
 
+    def test_str_fallback_should_be_called_with_wrapped_self(self):
+        class A(Acquisition.Implicit):
+            def __str__(self):
+                return str(self.aq_parent == outer)
+        outer = A()
+        inner = A().__of__(outer)
+        self.assertEqual(u'True', unicode(inner))
 
+    def test_unicode_should_be_called_with_wrapped_self(self):
+        class A(Acquisition.Implicit):
+            def __unicode__(self):
+                return str(self.aq_parent == outer)
+        outer = A()
+        inner = A().__of__(outer)
+        self.assertEqual(u'True', unicode(inner))
+
+
 def test_suite():
     return unittest.TestSuite((
         DocTestSuite(),



More information about the checkins mailing list