diff --git a/Lib/test/test_sqlite3/test_dbapi.py b/Lib/test/test_sqlite3/test_dbapi.py index 1f6f76615..a60f83f51 100644 --- a/Lib/test/test_sqlite3/test_dbapi.py +++ b/Lib/test/test_sqlite3/test_dbapi.py @@ -1928,7 +1928,6 @@ class MultiprocessTests(unittest.TestCase): def tearDown(self): unlink(TESTFN) - @unittest.expectedFailure # TODO: RUSTPYTHON multiprocess test fails def test_ctx_mgr_rollback_if_commit_failed(self): # bpo-27334: ctx manager does not rollback if commit fails SCRIPT = f"""if 1: diff --git a/Lib/test/test_sqlite3/test_transactions.py b/Lib/test/test_sqlite3/test_transactions.py index f38d042e5..3b57b7f6a 100644 --- a/Lib/test/test_sqlite3/test_transactions.py +++ b/Lib/test/test_sqlite3/test_transactions.py @@ -31,7 +31,6 @@ from .util import memory_database from .util import MemoryDatabaseMixin -@unittest.skip("TODO: RUSTPYTHON timeout parameter does not accept int type") class TransactionTests(unittest.TestCase): def setUp(self): # We can disable the busy handlers, since we control diff --git a/crates/stdlib/src/_sqlite3.rs b/crates/stdlib/src/_sqlite3.rs index 649831aa3..1a11d1cbf 100644 --- a/crates/stdlib/src/_sqlite3.rs +++ b/crates/stdlib/src/_sqlite3.rs @@ -61,7 +61,7 @@ mod _sqlite3 { }, convert::IntoObject, function::{ - ArgCallable, ArgIterable, FsPath, FuncArgs, OptionalArg, PyComparisonValue, + ArgCallable, ArgIterable, Either, FsPath, FuncArgs, OptionalArg, PyComparisonValue, PySetterValue, }, object::{Traverse, TraverseFn}, @@ -333,8 +333,8 @@ mod _sqlite3 { struct ConnectArgs { #[pyarg(any)] database: FsPath, - #[pyarg(any, default = 5.0)] - timeout: f64, + #[pyarg(any, default = Either::A(5.0))] + timeout: Either, #[pyarg(any, default = 0)] detect_types: c_int, #[pyarg(any, default = Some(vm.ctx.empty_str.to_owned()))] @@ -991,7 +991,10 @@ mod _sqlite3 { fn initialize_db(args: &ConnectArgs, vm: &VirtualMachine) -> PyResult { let path = args.database.to_cstring(vm)?; let db = Sqlite::from(SqliteRaw::open(path.as_ptr(), args.uri, vm)?); - let timeout = (args.timeout * 1000.0) as c_int; + let timeout = (match args.timeout { + Either::A(float) => float, + Either::B(int) => int as f64, + } * 1000.0) as c_int; db.busy_timeout(timeout); if let Some(isolation_level) = &args.isolation_level { begin_statement_ptr_from_isolation_level(isolation_level, vm)?;