make bytes(o) respect __bytes__ #2415
This adds two new C-API functions: PyObject_Bytes and PyBytes_FromObject.
Reviewer: Barry
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index 630f862..81d2dad 100644
--- a/Lib/test/test_bytes.py
+++ b/Lib/test/test_bytes.py
@@ -458,6 +458,18 @@
with open(fd, "rb", buffering=0) as f:
self.assertRaises(TypeError, f.readinto, b"")
+ def test_custom(self):
+ class A:
+ def __bytes__(self):
+ return b'abc'
+ self.assertEqual(bytes(A()), b'abc')
+ class A: pass
+ self.assertRaises(TypeError, bytes, A())
+ class A:
+ def __bytes__(self):
+ return None
+ self.assertRaises(TypeError, bytes, A())
+
class ByteArrayTest(BaseBytesTest):
type2test = bytearray