[Python-checkins] bpo-42264: Deprecate sqlite3.OptimizedUnicode (GH-23163)

serhiy-storchaka webhook-mailer at python.org
Tue Nov 17 10:55:26 EST 2020


https://github.com/python/cpython/commit/a1f401a58b213e400fbd8f0fa8dc5260a2389dab
commit: a1f401a58b213e400fbd8f0fa8dc5260a2389dab
branch: master
author: Erlend Egeberg Aasland <erlend.aasland at innova.no>
committer: serhiy-storchaka <storchaka at gmail.com>
date: 2020年11月17日T17:55:12+02:00
summary:
bpo-42264: Deprecate sqlite3.OptimizedUnicode (GH-23163)
files:
A Misc/NEWS.d/next/Library/2020-11-05-13-32-41.bpo-42264.r4KYUU.rst
M Doc/whatsnew/3.10.rst
M Lib/sqlite3/__init__.py
M Lib/sqlite3/test/factory.py
M Modules/_sqlite/module.c
diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst
index ffc34d773570f..786cc61003a59 100644
--- a/Doc/whatsnew/3.10.rst
+++ b/Doc/whatsnew/3.10.rst
@@ -360,6 +360,11 @@ Deprecated
 as appropriate to help identify code which needs updating during
 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
 =======
diff --git a/Lib/sqlite3/__init__.py b/Lib/sqlite3/__init__.py
index 6c91df27cca70..f001c0678e195 100644
--- a/Lib/sqlite3/__init__.py
+++ b/Lib/sqlite3/__init__.py
@@ -21,3 +21,17 @@
 # 3. This notice may not be removed or altered from any source distribution.
 
 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}'")
diff --git a/Lib/sqlite3/test/factory.py b/Lib/sqlite3/test/factory.py
index 95dd24bdfadca..d91997333b11c 100644
--- a/Lib/sqlite3/test/factory.py
+++ b/Lib/sqlite3/test/factory.py
@@ -254,9 +254,10 @@ def CheckCustom(self):
 self.assertTrue(row[0].endswith("reich"), "column must contain original data")
 
 def CheckOptimizedUnicode(self):
- # In py3k, str objects are always returned when text_factory
- # is OptimizedUnicode
- self.con.text_factory = sqlite.OptimizedUnicode
+ # OptimizedUnicode is deprecated as of Python 3.10
+ with self.assertWarns(DeprecationWarning) as cm:
+ self.con.text_factory = sqlite.OptimizedUnicode
+ self.assertIn("factory.py", cm.filename)
 austria = "Österreich"
 germany = "Deutchland"
 a_row = self.con.execute("select ?", (austria,)).fetchone()
diff --git a/Misc/NEWS.d/next/Library/2020-11-05-13-32-41.bpo-42264.r4KYUU.rst b/Misc/NEWS.d/next/Library/2020-11-05-13-32-41.bpo-42264.r4KYUU.rst
new file mode 100644
index 0000000000000..dd8e6871eb8cd
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-11-05-13-32-41.bpo-42264.r4KYUU.rst
@@ -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.
diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c
index 9fdf51417ed88..372f3dda4cbee 100644
--- a/Modules/_sqlite/module.c
+++ b/Modules/_sqlite/module.c
@@ -412,15 +412,6 @@ PyMODINIT_FUNC PyInit__sqlite3(void)
 ADD_EXCEPTION(module, "DataError", pysqlite_DataError, 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 */
 if (add_integer_constants(module) < 0) {
 goto error;


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /