summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/whatsnew/3.10.rst5
-rw-r--r--Lib/sqlite3/__init__.py14
-rw-r--r--Lib/sqlite3/test/factory.py7
-rw-r--r--Misc/NEWS.d/next/Library/2020-11-05-13-32-41.bpo-42264.r4KYUU.rst3
-rw-r--r--Modules/_sqlite/module.c9
5 files changed, 26 insertions, 12 deletions
diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst
index ffc34d7..786cc61 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 6c91df2..f001c06 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 95dd24b..d919973 100644
--- a/Lib/sqlite3/test/factory.py
+++ b/Lib/sqlite3/test/factory.py
@@ -254,9 +254,10 @@ class TextFactoryTests(unittest.TestCase):
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 0000000..dd8e687
--- /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 9fdf514..372f3dd 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;