https://github.com/python/cpython/commit/31e1476cc301e320c82677ed5a9b4835515cc298
commit: 31e1476cc301e320c82677ed5a9b4835515cc298
branch: 3.14
author: stevens <[email protected]>
committer: StanFromIreland <[email protected]>
date: 2026-08-21T13:23:30+01:00
summary:

[3.14] gh-155952: Fix `<unrepresentable>` Argument Clinic defaults in several 
signatures (#156172)

(cherry picked from commit 5a7fd421386d18b769e7a9f0c3a15b9f3690bff0)

Co-authored-by: Stan Ulbrych <[email protected]>

files:
A Misc/NEWS.d/next/Library/2026-08-17-12-40-00.gh-issue-155952.Vq3Lm8.rst
M Lib/test/test_inspect/test_inspect.py
M Modules/_localemodule.c
M Modules/_sqlite/clinic/connection.c.h
M Modules/_sqlite/connection.c
M Modules/clinic/_localemodule.c.h
M Objects/clinic/typevarobject.c.h
M Objects/typevarobject.c
M Python/_warnings.c
M Python/clinic/_warnings.c.h

diff --git a/Lib/test/test_inspect/test_inspect.py 
b/Lib/test/test_inspect/test_inspect.py
index f3b04285b0d1d7c..fa929d9ce676738 100644
--- a/Lib/test/test_inspect/test_inspect.py
+++ b/Lib/test/test_inspect/test_inspect.py
@@ -6283,7 +6283,7 @@ def test_typing_module_has_signatures(self):
                 methods_unsupported_signature=methods_unsupported_signature)
 
     def test_warnings_module_has_signatures(self):
-        unsupported_signature = {'warn', 'warn_explicit'}
+        unsupported_signature = {'warn_explicit'}
         self._test_module_has_signatures(warnings, 
unsupported_signature=unsupported_signature)
 
     def test_weakref_module_has_signatures(self):
diff --git 
a/Misc/NEWS.d/next/Library/2026-08-17-12-40-00.gh-issue-155952.Vq3Lm8.rst 
b/Misc/NEWS.d/next/Library/2026-08-17-12-40-00.gh-issue-155952.Vq3Lm8.rst
new file mode 100644
index 000000000000000..92b4a55692ee50a
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-08-17-12-40-00.gh-issue-155952.Vq3Lm8.rst
@@ -0,0 +1,3 @@
+Fix the signatures of :meth:`sqlite3.Connection.execute`, :func:`warnings.warn`
+and :func:`locale.setlocale` which rendered ``<unrepresentable>`` instead of 
the
+correct defaults for parameters.
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
index b1d9e74db623cb8..4e624724151b9e6 100644
--- a/Modules/_localemodule.c
+++ b/Modules/_localemodule.c
@@ -126,7 +126,7 @@ check_locale_name_all(const char *locale)
 _locale.setlocale
 
     category: int
-    locale: str(accept={str, NoneType}) = NULL
+    locale: str(accept={str, NoneType}) = None
     /
 
 Activates/queries locale processing.
@@ -134,7 +134,7 @@ Activates/queries locale processing.
 
 static PyObject *
 _locale_setlocale_impl(PyObject *module, int category, const char *locale)
-/*[clinic end generated code: output=a0e777ae5d2ff117 input=dbe18f1d66c57a6a]*/
+/*[clinic end generated code: output=a0e777ae5d2ff117 input=b53449b63407179b]*/
 {
     char *result;
     PyObject *result_object;
diff --git a/Modules/_sqlite/clinic/connection.c.h 
b/Modules/_sqlite/clinic/connection.c.h
index 25129b63b256a07..3b0f49004bfe6e2 100644
--- a/Modules/_sqlite/clinic/connection.c.h
+++ b/Modules/_sqlite/clinic/connection.c.h
@@ -1132,7 +1132,7 @@ pysqlite_connection_load_extension(PyObject *self, 
PyObject *const *args, Py_ssi
 #endif /* defined(PY_SQLITE_ENABLE_LOAD_EXTENSION) */
 
 PyDoc_STRVAR(pysqlite_connection_execute__doc__,
-"execute($self, sql, parameters=<unrepresentable>, /)\n"
+"execute($self, sql, parameters=(), /)\n"
 "--\n"
 "\n"
 "Executes an SQL statement.");
@@ -1924,4 +1924,4 @@ getconfig(PyObject *self, PyObject *arg)
 #ifndef DESERIALIZE_METHODDEF
     #define DESERIALIZE_METHODDEF
 #endif /* !defined(DESERIALIZE_METHODDEF) */
-/*[clinic end generated code: output=072e199b0fc4a271 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=b4a36c348ca2112e input=a9049054013a1b77]*/
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index c5935dcf80d51a9..96e66c0e89f375b 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -1929,7 +1929,7 @@ pysqlite_connection_call(PyObject *op, PyObject *args, 
PyObject *kwargs)
 _sqlite3.Connection.execute as pysqlite_connection_execute
 
     sql: unicode
-    parameters: object = NULL
+    parameters: object(c_default = 'NULL') = ()
     /
 
 Executes an SQL statement.
@@ -1938,7 +1938,7 @@ Executes an SQL statement.
 static PyObject *
 pysqlite_connection_execute_impl(pysqlite_Connection *self, PyObject *sql,
                                  PyObject *parameters)
-/*[clinic end generated code: output=5be05ae01ee17ee4 input=27aa7792681ddba2]*/
+/*[clinic end generated code: output=5be05ae01ee17ee4 input=847390a17de45cc7]*/
 {
     PyObject* result = 0;
 
diff --git a/Modules/clinic/_localemodule.c.h b/Modules/clinic/_localemodule.c.h
index 5e0880b0d0bb4c0..118946b81474ea1 100644
--- a/Modules/clinic/_localemodule.c.h
+++ b/Modules/clinic/_localemodule.c.h
@@ -5,7 +5,7 @@ preserve
 #include "pycore_modsupport.h"    // _PyArg_CheckPositional()
 
 PyDoc_STRVAR(_locale_setlocale__doc__,
-"setlocale($module, category, locale=<unrepresentable>, /)\n"
+"setlocale($module, category, locale=None, /)\n"
 "--\n"
 "\n"
 "Activates/queries locale processing.");
@@ -595,4 +595,4 @@ _locale_getencoding(PyObject *module, PyObject 
*Py_UNUSED(ignored))
 #ifndef _LOCALE_BIND_TEXTDOMAIN_CODESET_METHODDEF
     #define _LOCALE_BIND_TEXTDOMAIN_CODESET_METHODDEF
 #endif /* !defined(_LOCALE_BIND_TEXTDOMAIN_CODESET_METHODDEF) */
-/*[clinic end generated code: output=034a3c219466d207 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=bb987603f9de8824 input=a9049054013a1b77]*/
diff --git a/Objects/clinic/typevarobject.c.h b/Objects/clinic/typevarobject.c.h
index 9ae2f51f758403f..2ed8a35ad39516a 100644
--- a/Objects/clinic/typevarobject.c.h
+++ b/Objects/clinic/typevarobject.c.h
@@ -688,7 +688,7 @@ typealias_reduce(PyObject *self, PyObject 
*Py_UNUSED(ignored))
 }
 
 PyDoc_STRVAR(typealias_new__doc__,
-"typealias(name, value, *, type_params=<unrepresentable>)\n"
+"typealias(name, value, *, type_params=())\n"
 "--\n"
 "\n"
 "Create a TypeAliasType.");
@@ -757,4 +757,4 @@ typealias_new(PyTypeObject *type, PyObject *args, PyObject 
*kwargs)
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=9dad71445e079303 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=ce509903afdb343e input=a9049054013a1b77]*/
diff --git a/Objects/typevarobject.c b/Objects/typevarobject.c
index 66a14cc30fecb87..3cbc471f465f543 100644
--- a/Objects/typevarobject.c
+++ b/Objects/typevarobject.c
@@ -2084,7 +2084,7 @@ typealias.__new__ as typealias_new
     name: object(subclass_of="&PyUnicode_Type")
     value: object
     *
-    type_params: object = NULL
+    type_params: object(c_default="NULL") = ()
 
 Create a TypeAliasType.
 [clinic start generated code]*/
@@ -2092,7 +2092,7 @@ Create a TypeAliasType.
 static PyObject *
 typealias_new_impl(PyTypeObject *type, PyObject *name, PyObject *value,
                    PyObject *type_params)
-/*[clinic end generated code: output=8920ce6bdff86f00 input=df163c34e17e1a35]*/
+/*[clinic end generated code: output=8920ce6bdff86f00 input=8838986b41cae743]*/
 {
     if (type_params != NULL && !PyTuple_Check(type_params)) {
         PyErr_SetString(PyExc_TypeError, "type_params must be a tuple");
diff --git a/Python/_warnings.c b/Python/_warnings.c
index d9e60eb773a88d1..93710abeac724af 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -1192,7 +1192,7 @@ warn as warnings_warn
     source: object = None
       If supplied, the destroyed object which emitted a ResourceWarning
     *
-    skip_file_prefixes: object(type='PyTupleObject *', 
subclass_of='&PyTuple_Type') = NULL
+    skip_file_prefixes: object(type='PyTupleObject *', 
subclass_of='&PyTuple_Type', c_default='NULL') = ()
       An optional tuple of module filename prefixes indicating frames to skip
       during stacklevel computations for stack frame attribution.
 
@@ -1203,7 +1203,7 @@ static PyObject *
 warnings_warn_impl(PyObject *module, PyObject *message, PyObject *category,
                    Py_ssize_t stacklevel, PyObject *source,
                    PyTupleObject *skip_file_prefixes)
-/*[clinic end generated code: output=a68e0f6906c65f80 input=eb37c6a18bec4ea1]*/
+/*[clinic end generated code: output=a68e0f6906c65f80 input=2b52e8b20f508f51]*/
 {
     category = get_category(message, category);
     if (category == NULL)
diff --git a/Python/clinic/_warnings.c.h b/Python/clinic/_warnings.c.h
index 8bda830ccb924eb..a64418be0a830ba 100644
--- a/Python/clinic/_warnings.c.h
+++ b/Python/clinic/_warnings.c.h
@@ -45,7 +45,7 @@ warnings_release_lock(PyObject *module, PyObject 
*Py_UNUSED(ignored))
 
 PyDoc_STRVAR(warnings_warn__doc__,
 "warn($module, /, message, category=None, stacklevel=1, source=None, *,\n"
-"     skip_file_prefixes=<unrepresentable>)\n"
+"     skip_file_prefixes=())\n"
 "--\n"
 "\n"
 "Issue a warning, or maybe ignore it or raise an exception.\n"
@@ -284,4 +284,4 @@ warnings_filters_mutated_lock_held(PyObject *module, 
PyObject *Py_UNUSED(ignored
 {
     return warnings_filters_mutated_lock_held_impl(module);
 }
-/*[clinic end generated code: output=610ed5764bf40bb5 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=fc026d6a21e12170 input=a9049054013a1b77]*/

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to