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:
Kalyan 2022-06-08 05:04:50 +05:30 committed by GitHub
parent f8eae6f5c3
commit ffc58a9710
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 50 additions and 2 deletions

View File

@ -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

View File

@ -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}")

View File

@ -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}")

View File

@ -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" %

View File

@ -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

View File

@ -0,0 +1 @@
Deprecate :data:`sqlite3.version` and :data:`sqlite3.version_info`.

View File

@ -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;
} }