bpo-42264: Deprecate sqlite3.OptimizedUnicode (GH-23163)

This commit is contained in:
Erlend Egeberg Aasland 2020-11-17 16:55:12 +01:00 committed by GitHub
parent 296a796951
commit a1f401a58b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 26 additions and 12 deletions

View File

@ -360,6 +360,11 @@ Deprecated
as appropriate to help identify code which needs updating during as appropriate to help identify code which needs updating during
this transition. this transition.
* ``sqlite3.OptimizedUnicode`` has been undocumented and obsolete since Python
3.3, when it was made an alias to :class:`str`. It is now deprecated,
scheduled for removal in Python 3.12.
(Contributed by Erlend E. Aasland in :issue:`42264`.)
Removed Removed
======= =======

View File

@ -21,3 +21,17 @@
# 3. This notice may not be removed or altered from any source distribution. # 3. This notice may not be removed or altered from any source distribution.
from sqlite3.dbapi2 import * from sqlite3.dbapi2 import *
# bpo-42264: OptimizedUnicode was deprecated in Python 3.10. It's scheduled
# for removal in Python 3.12.
def __getattr__(name):
if name == "OptimizedUnicode":
import warnings
msg = ("""
OptimizedUnicode is deprecated and will be removed in Python 3.12.
Since Python 3.3 it has simply been an alias for 'str'.
""")
warnings.warn(msg, DeprecationWarning, stacklevel=2)
return str
raise AttributeError(f"module 'sqlite3' has no attribute '{name}'")

View File

@ -254,9 +254,10 @@ class TextFactoryTests(unittest.TestCase):
self.assertTrue(row[0].endswith("reich"), "column must contain original data") self.assertTrue(row[0].endswith("reich"), "column must contain original data")
def CheckOptimizedUnicode(self): def CheckOptimizedUnicode(self):
# In py3k, str objects are always returned when text_factory # OptimizedUnicode is deprecated as of Python 3.10
# is OptimizedUnicode with self.assertWarns(DeprecationWarning) as cm:
self.con.text_factory = sqlite.OptimizedUnicode self.con.text_factory = sqlite.OptimizedUnicode
self.assertIn("factory.py", cm.filename)
austria = "Österreich" austria = "Österreich"
germany = "Deutchland" germany = "Deutchland"
a_row = self.con.execute("select ?", (austria,)).fetchone() a_row = self.con.execute("select ?", (austria,)).fetchone()

View File

@ -0,0 +1,3 @@
``sqlite3.OptimizedUnicode`` has been undocumented and obsolete since Python
3.3, when it was made an alias to :class:`str`. It is now deprecated,
scheduled for removal in Python 3.12.

View File

@ -412,15 +412,6 @@ PyMODINIT_FUNC PyInit__sqlite3(void)
ADD_EXCEPTION(module, "DataError", pysqlite_DataError, pysqlite_DatabaseError); ADD_EXCEPTION(module, "DataError", pysqlite_DataError, pysqlite_DatabaseError);
ADD_EXCEPTION(module, "NotSupportedError", pysqlite_NotSupportedError, pysqlite_DatabaseError); ADD_EXCEPTION(module, "NotSupportedError", pysqlite_NotSupportedError, pysqlite_DatabaseError);
/* In Python 2.x, setting Connection.text_factory to
OptimizedUnicode caused Unicode objects to be returned for
non-ASCII data and bytestrings to be returned for ASCII data.
Now OptimizedUnicode is an alias for str, so it has no
effect. */
if (PyModule_AddObjectRef(module, "OptimizedUnicode", (PyObject*)&PyUnicode_Type) < 0) {
goto error;
}
/* Set integer constants */ /* Set integer constants */
if (add_integer_constants(module) < 0) { if (add_integer_constants(module) < 0) {
goto error; goto error;