mirror of
https://github.com/python/cpython.git
synced 2026-05-07 02:51:00 +00:00
gh-133595: Clean up sqlite3.Connection APIs (GH-133605)
* All parameters of sqlite3.connect() except "database" are now keyword-only. * The first three parameters of methods create_function() and create_aggregate() are now positional-only. * The first parameter of methods set_authorizer(), set_progress_handler() and set_trace_callback() is now positional-only.
This commit is contained in:
parent
2561e148ec
commit
dcf93c4c93
17 changed files with 117 additions and 445 deletions
|
|
@ -550,17 +550,9 @@ def test_connection_config(self):
|
|||
cx.execute("insert into u values(0)")
|
||||
|
||||
def test_connect_positional_arguments(self):
|
||||
regex = (
|
||||
r"Passing more than 1 positional argument to sqlite3.connect\(\)"
|
||||
" is deprecated. Parameters 'timeout', 'detect_types', "
|
||||
"'isolation_level', 'check_same_thread', 'factory', "
|
||||
"'cached_statements' and 'uri' will become keyword-only "
|
||||
"parameters in Python 3.15."
|
||||
)
|
||||
with self.assertWarnsRegex(DeprecationWarning, regex) as cm:
|
||||
cx = sqlite.connect(":memory:", 1.0)
|
||||
cx.close()
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
with self.assertRaisesRegex(TypeError,
|
||||
r'connect\(\) takes at most 1 positional arguments'):
|
||||
sqlite.connect(":memory:", 1.0)
|
||||
|
||||
def test_connection_resource_warning(self):
|
||||
with self.assertWarns(ResourceWarning):
|
||||
|
|
|
|||
|
|
@ -71,18 +71,9 @@ class Factory(sqlite.Connection):
|
|||
def __init__(self, *args, **kwargs):
|
||||
super(Factory, self).__init__(*args, **kwargs)
|
||||
|
||||
regex = (
|
||||
r"Passing more than 1 positional argument to _sqlite3.Connection\(\) "
|
||||
r"is deprecated. Parameters 'timeout', 'detect_types', "
|
||||
r"'isolation_level', 'check_same_thread', 'factory', "
|
||||
r"'cached_statements' and 'uri' will become keyword-only "
|
||||
r"parameters in Python 3.15."
|
||||
)
|
||||
with self.assertWarnsRegex(DeprecationWarning, regex) as cm:
|
||||
with memory_database(5.0, 0, None, True, Factory) as con:
|
||||
self.assertIsNone(con.isolation_level)
|
||||
self.assertIsInstance(con, Factory)
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
with self.assertRaisesRegex(TypeError,
|
||||
r'connect\(\) takes at most 1 positional arguments'):
|
||||
memory_database(5.0, 0, None, True, Factory)
|
||||
|
||||
|
||||
class CursorFactoryTests(MemoryDatabaseMixin, unittest.TestCase):
|
||||
|
|
|
|||
|
|
@ -220,16 +220,9 @@ def bad_progress():
|
|||
""")
|
||||
|
||||
def test_progress_handler_keyword_args(self):
|
||||
regex = (
|
||||
r"Passing keyword argument 'progress_handler' to "
|
||||
r"_sqlite3.Connection.set_progress_handler\(\) is deprecated. "
|
||||
r"Parameter 'progress_handler' will become positional-only in "
|
||||
r"Python 3.15."
|
||||
)
|
||||
|
||||
with self.assertWarnsRegex(DeprecationWarning, regex) as cm:
|
||||
with self.assertRaisesRegex(TypeError,
|
||||
'takes at least 1 positional argument'):
|
||||
self.con.set_progress_handler(progress_handler=lambda: None, n=1)
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
|
||||
|
||||
class TraceCallbackTests(MemoryDatabaseMixin, unittest.TestCase):
|
||||
|
|
@ -353,16 +346,9 @@ def test_trace_bad_handler(self):
|
|||
cx.execute("select 1")
|
||||
|
||||
def test_trace_keyword_args(self):
|
||||
regex = (
|
||||
r"Passing keyword argument 'trace_callback' to "
|
||||
r"_sqlite3.Connection.set_trace_callback\(\) is deprecated. "
|
||||
r"Parameter 'trace_callback' will become positional-only in "
|
||||
r"Python 3.15."
|
||||
)
|
||||
|
||||
with self.assertWarnsRegex(DeprecationWarning, regex) as cm:
|
||||
with self.assertRaisesRegex(TypeError,
|
||||
'takes exactly 1 positional argument'):
|
||||
self.con.set_trace_callback(trace_callback=lambda: None)
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
|||
|
|
@ -422,27 +422,9 @@ def test_func_return_illegal_value(self):
|
|||
self.con.execute, "select badreturn()")
|
||||
|
||||
def test_func_keyword_args(self):
|
||||
regex = (
|
||||
r"Passing keyword arguments 'name', 'narg' and 'func' to "
|
||||
r"_sqlite3.Connection.create_function\(\) is deprecated. "
|
||||
r"Parameters 'name', 'narg' and 'func' will become "
|
||||
r"positional-only in Python 3.15."
|
||||
)
|
||||
|
||||
def noop():
|
||||
return None
|
||||
|
||||
with self.assertWarnsRegex(DeprecationWarning, regex) as cm:
|
||||
self.con.create_function("noop", 0, func=noop)
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
|
||||
with self.assertWarnsRegex(DeprecationWarning, regex) as cm:
|
||||
self.con.create_function("noop", narg=0, func=noop)
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
|
||||
with self.assertWarnsRegex(DeprecationWarning, regex) as cm:
|
||||
self.con.create_function(name="noop", narg=0, func=noop)
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
with self.assertRaisesRegex(TypeError,
|
||||
'takes exactly 3 positional arguments'):
|
||||
self.con.create_function("noop", 0, func=lambda: None)
|
||||
|
||||
|
||||
class WindowSumInt:
|
||||
|
|
@ -737,25 +719,9 @@ def test_aggr_text(self):
|
|||
self.assertEqual(val, txt)
|
||||
|
||||
def test_agg_keyword_args(self):
|
||||
regex = (
|
||||
r"Passing keyword arguments 'name', 'n_arg' and 'aggregate_class' to "
|
||||
r"_sqlite3.Connection.create_aggregate\(\) is deprecated. "
|
||||
r"Parameters 'name', 'n_arg' and 'aggregate_class' will become "
|
||||
r"positional-only in Python 3.15."
|
||||
)
|
||||
|
||||
with self.assertWarnsRegex(DeprecationWarning, regex) as cm:
|
||||
with self.assertRaisesRegex(TypeError,
|
||||
'takes exactly 3 positional arguments'):
|
||||
self.con.create_aggregate("test", 1, aggregate_class=AggrText)
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
|
||||
with self.assertWarnsRegex(DeprecationWarning, regex) as cm:
|
||||
self.con.create_aggregate("test", n_arg=1, aggregate_class=AggrText)
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
|
||||
with self.assertWarnsRegex(DeprecationWarning, regex) as cm:
|
||||
self.con.create_aggregate(name="test", n_arg=0,
|
||||
aggregate_class=AggrText)
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
|
||||
|
||||
class AuthorizerTests(unittest.TestCase):
|
||||
|
|
@ -800,16 +766,9 @@ def test_clear_authorizer(self):
|
|||
self.con.execute("select c2 from t1")
|
||||
|
||||
def test_authorizer_keyword_args(self):
|
||||
regex = (
|
||||
r"Passing keyword argument 'authorizer_callback' to "
|
||||
r"_sqlite3.Connection.set_authorizer\(\) is deprecated. "
|
||||
r"Parameter 'authorizer_callback' will become positional-only in "
|
||||
r"Python 3.15."
|
||||
)
|
||||
|
||||
with self.assertWarnsRegex(DeprecationWarning, regex) as cm:
|
||||
with self.assertRaisesRegex(TypeError,
|
||||
'takes exactly 1 positional argument'):
|
||||
self.con.set_authorizer(authorizer_callback=lambda: None)
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
|
||||
|
||||
class AuthorizerRaiseExceptionTests(AuthorizerTests):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue