]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-132798: Schedule removal of `PyUnicode_AsDecoded/Encoded` functions for 3.15 ...
authorStan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Fri, 25 Apr 2025 13:07:41 +0000 (14:07 +0100)
committerGitHub <noreply@github.com>
Fri, 25 Apr 2025 13:07:41 +0000 (15:07 +0200)
Co-authored-by: Victor Stinner <vstinner@python.org>
Doc/deprecations/c-api-pending-removal-in-3.15.rst
Doc/deprecations/c-api-pending-removal-in-future.rst
Include/unicodeobject.h
Misc/NEWS.d/next/C_API/2025-04-22-13-59-30.gh-issue-132798.asfafhs.rst [new file with mode: 0644]
Objects/unicodeobject.c

index 666a1622dd0b29d83f70724b7ca0a3057daddcfc..a5cc8f1d5b34753c5e5fcc8921074c1cba5bc886 100644 (file)
@@ -10,6 +10,16 @@ Pending removal in Python 3.15
   :c:func:`PyWeakref_GetRef` on Python 3.12 and older.
 * :c:type:`Py_UNICODE` type and the :c:macro:`!Py_UNICODE_WIDE` macro:
   Use :c:type:`wchar_t` instead.
+* :c:func:`!PyUnicode_AsDecodedObject`:
+  Use :c:func:`PyCodec_Decode` instead.
+* :c:func:`!PyUnicode_AsDecodedUnicode`:
+  Use :c:func:`PyCodec_Decode` instead; Note that some codecs (for example, "base64")
+  may return a type other than :class:`str`, such as :class:`bytes`.
+* :c:func:`!PyUnicode_AsEncodedObject`:
+  Use :c:func:`PyCodec_Encode` instead.
+* :c:func:`!PyUnicode_AsEncodedUnicode`:
+  Use :c:func:`PyCodec_Encode` instead; Note that some codecs (for example, "base64")
+  may return a type other than :class:`bytes`, such as :class:`str`.
 * Python initialization functions, deprecated in Python 3.13:
 
   * :c:func:`Py_GetPath`:
index 1003047344a3cc301ca60d5b30771a63409434a0..841d1b455b6bec622ef8b41978d9484450737e5f 100644 (file)
@@ -18,14 +18,6 @@ although there is currently no date scheduled for their removal.
   Use :c:func:`PyOS_AfterFork_Child` instead.
 * :c:func:`PySlice_GetIndicesEx`:
   Use :c:func:`PySlice_Unpack` and :c:func:`PySlice_AdjustIndices` instead.
-* :c:func:`!PyUnicode_AsDecodedObject`:
-  Use :c:func:`PyCodec_Decode` instead.
-* :c:func:`!PyUnicode_AsDecodedUnicode`:
-  Use :c:func:`PyCodec_Decode` instead.
-* :c:func:`!PyUnicode_AsEncodedObject`:
-  Use :c:func:`PyCodec_Encode` instead.
-* :c:func:`!PyUnicode_AsEncodedUnicode`:
-  Use :c:func:`PyCodec_Encode` instead.
 * :c:func:`PyUnicode_READY`:
   Unneeded since Python 3.12
 * :c:func:`!PyErr_Display`:
index 2ce3a008b7129ecf74e6e2080651267659720432..f8bcaecb98fb9c567658d158e2fdbfdd09096c0c 100644 (file)
@@ -344,7 +344,8 @@ PyAPI_FUNC(PyObject*) PyUnicode_Decode(
 /* Decode a Unicode object unicode and return the result as Python
    object.
 
-   This API is DEPRECATED. The only supported standard encoding is rot13.
+   This API is DEPRECATED and will be removed in 3.15.
+   The only supported standard encoding is rot13.
    Use PyCodec_Decode() to decode with rot13 and non-standard codecs
    that decode from str. */
 
@@ -357,7 +358,8 @@ Py_DEPRECATED(3.6) PyAPI_FUNC(PyObject*) PyUnicode_AsDecodedObject(
 /* Decode a Unicode object unicode and return the result as Unicode
    object.
 
-   This API is DEPRECATED. The only supported standard encoding is rot13.
+   This API is DEPRECATED and will be removed in 3.15.
+   The only supported standard encoding is rot13.
    Use PyCodec_Decode() to decode with rot13 and non-standard codecs
    that decode from str to str. */
 
@@ -370,7 +372,8 @@ Py_DEPRECATED(3.6) PyAPI_FUNC(PyObject*) PyUnicode_AsDecodedUnicode(
 /* Encodes a Unicode object and returns the result as Python
    object.
 
-   This API is DEPRECATED.  It is superseded by PyUnicode_AsEncodedString()
+   This API is DEPRECATED and will be removed in 3.15.
+   It is superseded by PyUnicode_AsEncodedString()
    since all standard encodings (except rot13) encode str to bytes.
    Use PyCodec_Encode() for encoding with rot13 and non-standard codecs
    that encode form str to non-bytes. */
@@ -393,7 +396,8 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedString(
 /* Encodes a Unicode object and returns the result as Unicode
    object.
 
-   This API is DEPRECATED.  The only supported standard encodings is rot13.
+   This API is DEPRECATED and will be removed in 3.15.
+   The only supported standard encodings is rot13.
    Use PyCodec_Encode() to encode with rot13 and non-standard codecs
    that encode from str to str. */
 
diff --git a/Misc/NEWS.d/next/C_API/2025-04-22-13-59-30.gh-issue-132798.asfafhs.rst b/Misc/NEWS.d/next/C_API/2025-04-22-13-59-30.gh-issue-132798.asfafhs.rst
new file mode 100644 (file)
index 0000000..d779d5a
--- /dev/null
@@ -0,0 +1,3 @@
+Deprecated and undocumented functions :c:func:`!PyUnicode_AsEncodedObject`,
+:c:func:`!PyUnicode_AsDecodedObject`, :c:func:`!PyUnicode_AsEncodedUnicode`
+and :c:func:`!PyUnicode_AsDecodedUnicode` are scheduled for removal in 3.15.
index e01a10fc19e904a8406d2ceb78b952e0eee99226..53c50734281db939986ac4a029332b65fdafdf83 100644 (file)
@@ -3733,7 +3733,8 @@ PyUnicode_AsDecodedObject(PyObject *unicode,
     }
 
     if (PyErr_WarnEx(PyExc_DeprecationWarning,
-                     "PyUnicode_AsDecodedObject() is deprecated; "
+                     "PyUnicode_AsDecodedObject() is deprecated "
+                     "and will be removed in 3.15; "
                      "use PyCodec_Decode() to decode from str", 1) < 0)
         return NULL;
 
@@ -3757,7 +3758,8 @@ PyUnicode_AsDecodedUnicode(PyObject *unicode,
     }
 
     if (PyErr_WarnEx(PyExc_DeprecationWarning,
-                     "PyUnicode_AsDecodedUnicode() is deprecated; "
+                     "PyUnicode_AsDecodedUnicode() is deprecated "
+                     "and will be removed in 3.15; "
                      "use PyCodec_Decode() to decode from str to str", 1) < 0)
         return NULL;
 
@@ -3796,7 +3798,8 @@ PyUnicode_AsEncodedObject(PyObject *unicode,
     }
 
     if (PyErr_WarnEx(PyExc_DeprecationWarning,
-                     "PyUnicode_AsEncodedObject() is deprecated; "
+                     "PyUnicode_AsEncodedObject() is deprecated "
+                     "and will be removed in 3.15; "
                      "use PyUnicode_AsEncodedString() to encode from str to bytes "
                      "or PyCodec_Encode() for generic encoding", 1) < 0)
         return NULL;
@@ -4019,7 +4022,8 @@ PyUnicode_AsEncodedUnicode(PyObject *unicode,
     }
 
     if (PyErr_WarnEx(PyExc_DeprecationWarning,
-                     "PyUnicode_AsEncodedUnicode() is deprecated; "
+                     "PyUnicode_AsEncodedUnicode() is deprecated "
+                     "and will be removed in 3.15; "
                      "use PyCodec_Encode() to encode from str to str", 1) < 0)
         return NULL;