mirror of https://github.com/python/cpython
gh-93370: Deprecate sqlite3.version and sqlite3.version_info (#93482)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com> Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com> Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
This commit is contained in:
parent
f8eae6f5c3
commit
ffc58a9710
|
@ -142,12 +142,22 @@ Module functions and constants
|
||||||
The version number of this module, as a string. This is not the version of
|
The version number of this module, as a string. This is not the version of
|
||||||
the SQLite library.
|
the SQLite library.
|
||||||
|
|
||||||
|
.. deprecated-removed:: 3.12 3.14
|
||||||
|
This constant used to reflect the version number of the ``pysqlite``
|
||||||
|
package, a third-party library which used to upstream changes to
|
||||||
|
``sqlite3``. Today, it carries no meaning or practical value.
|
||||||
|
|
||||||
|
|
||||||
.. data:: version_info
|
.. data:: version_info
|
||||||
|
|
||||||
The version number of this module, as a tuple of integers. This is not the
|
The version number of this module, as a tuple of integers. This is not the
|
||||||
version of the SQLite library.
|
version of the SQLite library.
|
||||||
|
|
||||||
|
.. deprecated-removed:: 3.12 3.14
|
||||||
|
This constant used to reflect the version number of the ``pysqlite``
|
||||||
|
package, a third-party library which used to upstream changes to
|
||||||
|
``sqlite3``. Today, it carries no meaning or practical value.
|
||||||
|
|
||||||
|
|
||||||
.. data:: sqlite_version
|
.. data:: sqlite_version
|
||||||
|
|
||||||
|
|
|
@ -55,3 +55,16 @@ The sqlite3 module is written by Gerhard Häring <gh@ghaering.de>.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from sqlite3.dbapi2 import *
|
from sqlite3.dbapi2 import *
|
||||||
|
from sqlite3.dbapi2 import (_deprecated_names,
|
||||||
|
_deprecated_version_info,
|
||||||
|
_deprecated_version)
|
||||||
|
|
||||||
|
|
||||||
|
def __getattr__(name):
|
||||||
|
if name in _deprecated_names:
|
||||||
|
from warnings import warn
|
||||||
|
|
||||||
|
warn(f"{name} is deprecated and will be removed in Python 3.14",
|
||||||
|
DeprecationWarning, stacklevel=2)
|
||||||
|
return globals()[f"_deprecated_{name}"]
|
||||||
|
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
||||||
|
|
|
@ -25,6 +25,9 @@ import time
|
||||||
import collections.abc
|
import collections.abc
|
||||||
|
|
||||||
from _sqlite3 import *
|
from _sqlite3 import *
|
||||||
|
from _sqlite3 import _deprecated_version
|
||||||
|
|
||||||
|
_deprecated_names = frozenset({"version", "version_info"})
|
||||||
|
|
||||||
paramstyle = "qmark"
|
paramstyle = "qmark"
|
||||||
|
|
||||||
|
@ -45,7 +48,7 @@ def TimeFromTicks(ticks):
|
||||||
def TimestampFromTicks(ticks):
|
def TimestampFromTicks(ticks):
|
||||||
return Timestamp(*time.localtime(ticks)[:6])
|
return Timestamp(*time.localtime(ticks)[:6])
|
||||||
|
|
||||||
version_info = tuple([int(x) for x in version.split(".")])
|
_deprecated_version_info = tuple(map(int, _deprecated_version.split(".")))
|
||||||
sqlite_version_info = tuple([int(x) for x in sqlite_version.split(".")])
|
sqlite_version_info = tuple([int(x) for x in sqlite_version.split(".")])
|
||||||
|
|
||||||
Binary = memoryview
|
Binary = memoryview
|
||||||
|
@ -85,3 +88,12 @@ register_adapters_and_converters()
|
||||||
# Clean up namespace
|
# Clean up namespace
|
||||||
|
|
||||||
del(register_adapters_and_converters)
|
del(register_adapters_and_converters)
|
||||||
|
|
||||||
|
def __getattr__(name):
|
||||||
|
if name in _deprecated_names:
|
||||||
|
from warnings import warn
|
||||||
|
|
||||||
|
warn(f"{name} is deprecated and will be removed in Python 3.14",
|
||||||
|
DeprecationWarning, stacklevel=2)
|
||||||
|
return globals()[f"_deprecated_{name}"]
|
||||||
|
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
||||||
|
|
|
@ -57,6 +57,17 @@ class ModuleTests(unittest.TestCase):
|
||||||
self.assertEqual(sqlite.apilevel, "2.0",
|
self.assertEqual(sqlite.apilevel, "2.0",
|
||||||
"apilevel is %s, should be 2.0" % sqlite.apilevel)
|
"apilevel is %s, should be 2.0" % sqlite.apilevel)
|
||||||
|
|
||||||
|
def test_deprecated_version(self):
|
||||||
|
msg = "deprecated and will be removed in Python 3.14"
|
||||||
|
for attr in "version", "version_info":
|
||||||
|
with self.subTest(attr=attr):
|
||||||
|
with self.assertWarnsRegex(DeprecationWarning, msg) as cm:
|
||||||
|
getattr(sqlite, attr)
|
||||||
|
self.assertEqual(cm.filename, __file__)
|
||||||
|
with self.assertWarnsRegex(DeprecationWarning, msg) as cm:
|
||||||
|
getattr(sqlite.dbapi2, attr)
|
||||||
|
self.assertEqual(cm.filename, __file__)
|
||||||
|
|
||||||
def test_thread_safety(self):
|
def test_thread_safety(self):
|
||||||
self.assertIn(sqlite.threadsafety, {0, 1, 3},
|
self.assertIn(sqlite.threadsafety, {0, 1, 3},
|
||||||
"threadsafety is %d, should be 0, 1 or 3" %
|
"threadsafety is %d, should be 0, 1 or 3" %
|
||||||
|
|
|
@ -1456,6 +1456,7 @@ Edward K. Ream
|
||||||
Chris Rebert
|
Chris Rebert
|
||||||
Marc Recht
|
Marc Recht
|
||||||
John Redford
|
John Redford
|
||||||
|
Kalyan Reddy
|
||||||
Terry J. Reedy
|
Terry J. Reedy
|
||||||
Gareth Rees
|
Gareth Rees
|
||||||
John Reese
|
John Reese
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Deprecate :data:`sqlite3.version` and :data:`sqlite3.version_info`.
|
|
@ -707,7 +707,7 @@ module_exec(PyObject *module)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PyModule_AddStringConstant(module, "version", PYSQLITE_VERSION) < 0) {
|
if (PyModule_AddStringConstant(module, "_deprecated_version", PYSQLITE_VERSION) < 0) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue