From 121b35d27cc6b81899af2c78a93dbf3d8ab05f85 Mon Sep 17 00:00:00 2001 From: Dean Li Date: Thu, 19 May 2022 23:15:04 +0800 Subject: [PATCH] io: enhance error message in Buffered* class --- Lib/test/test_io.py | 6 ------ vm/src/stdlib/io.rs | 10 +++++++++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index b30a35d35..31614b829 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -1593,8 +1593,6 @@ class CBufferedReaderTest(BufferedReaderTest, SizeofTest): support.gc_collect() self.assertIsNone(wr(), wr) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_args_error(self): # Issue #17275 with self.assertRaisesRegex(TypeError, "BufferedReader"): @@ -1974,8 +1972,6 @@ class CBufferedWriterTest(BufferedWriterTest, SizeofTest): with self.open(os_helper.TESTFN, "rb") as f: self.assertEqual(f.read(), b"123xxx") - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_args_error(self): # Issue #17275 with self.assertRaisesRegex(TypeError, "BufferedWriter"): @@ -2460,8 +2456,6 @@ class CBufferedRandomTest(BufferedRandomTest, SizeofTest): CBufferedReaderTest.test_garbage_collection(self) CBufferedWriterTest.test_garbage_collection(self) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_args_error(self): # Issue #17275 with self.assertRaisesRegex(TypeError, "BufferedRandom"): diff --git a/vm/src/stdlib/io.rs b/vm/src/stdlib/io.rs index e7f9ca2dd..4be12ba8d 100644 --- a/vm/src/stdlib/io.rs +++ b/vm/src/stdlib/io.rs @@ -1361,6 +1361,7 @@ mod _io { #[pyimpl] trait BufferedMixin: PyPayload { + const CLASS_NAME: &'static str; const READABLE: bool; const WRITABLE: bool; const SEEKABLE: bool = false; @@ -1374,7 +1375,11 @@ mod _io { #[pyslot] fn slot_init(zelf: PyObjectRef, args: FuncArgs, vm: &VirtualMachine) -> PyResult<()> { let zelf: PyRef = zelf.try_into_value(vm)?; - let (raw, BufferSize { buffer_size }): (PyObjectRef, _) = args.bind(vm)?; + let (raw, BufferSize { buffer_size }): (PyObjectRef, _) = + args.bind(vm).map_err(|e| { + let msg = format!("{}() {}", Self::CLASS_NAME, *e.str(vm)); + vm.new_exception_msg(e.class().clone(), msg) + })?; zelf.init(raw, BufferSize { buffer_size }, vm) } @@ -1657,6 +1662,7 @@ mod _io { data: PyThreadMutex, } impl BufferedMixin for BufferedReader { + const CLASS_NAME: &'static str = "BufferedReader"; const READABLE: bool = true; const WRITABLE: bool = false; fn data(&self) -> &PyThreadMutex { @@ -1706,6 +1712,7 @@ mod _io { data: PyThreadMutex, } impl BufferedMixin for BufferedWriter { + const CLASS_NAME: &'static str = "BufferedWriter"; const READABLE: bool = false; const WRITABLE: bool = true; fn data(&self) -> &PyThreadMutex { @@ -1734,6 +1741,7 @@ mod _io { data: PyThreadMutex, } impl BufferedMixin for BufferedRandom { + const CLASS_NAME: &'static str = "BufferedRandom"; const READABLE: bool = true; const WRITABLE: bool = true; const SEEKABLE: bool = true;