diff --git a/Lib/test/test_sqlite3/test_factory.py b/Lib/test/test_sqlite3/test_factory.py index 4345df7ae..299b514cf 100644 --- a/Lib/test/test_sqlite3/test_factory.py +++ b/Lib/test/test_sqlite3/test_factory.py @@ -159,7 +159,6 @@ class RowFactoryTests(MemoryDatabaseMixin, unittest.TestCase): with self.assertRaises(IndexError): row[complex()] # index must be int or string - @unittest.expectedFailure # TODO: RUSTPYTHON; TypeError: can't delete attribute def test_delete_connection_row_factory(self): # gh-149738: deleting row_factory should raise an exception with self.assertRaises(AttributeError): diff --git a/crates/stdlib/src/_sqlite3.rs b/crates/stdlib/src/_sqlite3.rs index 02d408450..25b7e0032 100644 --- a/crates/stdlib/src/_sqlite3.rs +++ b/crates/stdlib/src/_sqlite3.rs @@ -1661,8 +1661,20 @@ mod _sqlite3 { self.row_factory.to_owned() } #[pygetset(setter)] - fn set_row_factory(&self, val: Option) { - let _ = unsafe { self.row_factory.swap(val) }; + fn set_row_factory( + &self, + val: PySetterValue>, + vm: &VirtualMachine, + ) -> PyResult<()> { + match val { + PySetterValue::Assign(val) => { + let _ = unsafe { self.row_factory.swap(val) }; + Ok(()) + } + PySetterValue::Delete => { + Err(vm.new_attribute_error("cannot delete row_factory attribute")) + } + } } fn check_thread(&self, vm: &VirtualMachine) -> PyResult<()> {