Christian Heimes added the comment:

New patch:

static PyObject *
string_str(PyObject *op)
{
        return PyObject_CallMethod(op, "decode", "s", "ascii");
}

Added file: http://bugs.python.org/file8696/py3k-pep3137_str_bytes_ascii.patch

__________________________________
Tracker <[EMAIL PROTECTED]>
<http://bugs.python.org/issue1392>
__________________________________
Index: Objects/bytesobject.c
===================================================================
--- Objects/bytesobject.c	(Revision 58857)
+++ Objects/bytesobject.c	(Arbeitskopie)
@@ -923,6 +923,12 @@
 }
 
 static PyObject *
+bytes_str(PyObject *op)
+{
+	return PyObject_CallMethod(op, "decode", "s", "ascii");
+}
+
+static PyObject *
 bytes_richcompare(PyObject *self, PyObject *other, int op)
 {
     Py_ssize_t self_size, other_size;
@@ -3063,7 +3069,7 @@
     &bytes_as_mapping,                  /* tp_as_mapping */
     0,                                  /* tp_hash */
     0,                                  /* tp_call */
-    (reprfunc)bytes_repr,               /* tp_str */
+    bytes_str,                          /* tp_str */
     PyObject_GenericGetAttr,            /* tp_getattro */
     0,                                  /* tp_setattro */
     &bytes_as_buffer,                   /* tp_as_buffer */
Index: Objects/stringobject.c
===================================================================
--- Objects/stringobject.c	(Revision 58857)
+++ Objects/stringobject.c	(Arbeitskopie)
@@ -679,6 +679,12 @@
 	return PyString_Repr(op, 1);
 }
 
+static PyObject *
+string_str(PyObject *op)
+{
+	return PyObject_CallMethod(op, "decode", "s", "ascii");
+}
+
 static Py_ssize_t
 string_length(PyStringObject *a)
 {
@@ -3090,13 +3096,13 @@
 	0,					/* tp_getattr */
 	0,					/* tp_setattr */
 	0,					/* tp_compare */
-	string_repr, 				/* tp_repr */
+	(reprfunc)string_repr, 			/* tp_repr */
 	0,					/* tp_as_number */
 	&string_as_sequence,			/* tp_as_sequence */
 	&string_as_mapping,			/* tp_as_mapping */
 	(hashfunc)string_hash, 			/* tp_hash */
 	0,					/* tp_call */
-	string_repr,				/* tp_str */
+	string_str,				/* tp_str */
 	PyObject_GenericGetAttr,		/* tp_getattro */
 	0,					/* tp_setattro */
 	&string_as_buffer,			/* tp_as_buffer */
Index: Lib/test/test_bytes.py
===================================================================
--- Lib/test/test_bytes.py	(Revision 58857)
+++ Lib/test/test_bytes.py	(Arbeitskopie)
@@ -86,16 +86,23 @@
         self.assertRaises(ValueError, buffer, [sys.maxint+1])
         self.assertRaises(ValueError, buffer, [10**100])
 
-    def test_repr_str(self):
-        for f in str, repr:
-            self.assertEqual(f(buffer()), "buffer(b'')")
-            self.assertEqual(f(buffer([0])), "buffer(b'\\x00')")
-            self.assertEqual(f(buffer([0, 1, 254, 255])),
-                             "buffer(b'\\x00\\x01\\xfe\\xff')")
-            self.assertEqual(f(b"abc"), "b'abc'")
-            self.assertEqual(f(b"'"), '''b"'"''')
-            self.assertEqual(f(b"'\""), r"""b'\'"'""")
+    def test_repr(self):
+        self.assertEqual(repr(buffer()), "buffer(b'')")
+        self.assertEqual(repr(buffer([0])), "buffer(b'\\x00')")
+        self.assertEqual(repr(buffer([0, 1, 254, 255])),
+                         "buffer(b'\\x00\\x01\\xfe\\xff')")
+        self.assertEqual(repr(b"abc"), "b'abc'")
+        self.assertEqual(repr(b"'"), '''b"'"''')
+        self.assertEqual(repr(b"'\""), r"""b'\'"'""")
 
+    def test_str(self):
+        self.assertEqual(str(buffer()), "")
+        self.assertEqual(str(buffer([0])), "\x00")
+        self.assertRaises(UnicodeDecodeError, str, buffer([0, 1, 254, 255]))
+        self.assertEqual(str(b"abc"), "abc")
+        self.assertEqual(str(b"'"), "'")
+        self.assertEqual(str(b"'\""), "'\"")
+        self.assertRaises(UnicodeDecodeError, str, bytes([0, 1, 254, 255]))
 
     def test_compare(self):
         b1 = buffer([1, 2, 3])
@@ -371,9 +378,10 @@
         self.assertEqual(b, buffer(sample))
 
     def test_to_str(self):
-        self.assertEqual(str(b''), "b''")
-        self.assertEqual(str(b'x'), "b'x'")
-        self.assertEqual(str(b'\x80'), "b'\\x80'")
+        self.assertEqual(str(b''), "")
+        self.assertEqual(str(b'x'), "x")
+        self.assertEqual(str(b'\x61\x62'), "ab")
+        self.assertRaises(UnicodeDecodeError, str, b'\xff')
 
     def test_from_int(self):
         b = buffer(0)
_______________________________________________
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to