summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_type_aliases.py13
-rw-r--r--Misc/NEWS.d/next/Library/2024-09-25-12-14-58.gh-issue-124498.Ozxs55.rst2
-rw-r--r--Objects/typevarobject.c11
3 files changed, 25 insertions, 1 deletions
diff --git a/Lib/test/test_type_aliases.py b/Lib/test/test_type_aliases.py
index 49d6aa8..ebb65d8 100644
--- a/Lib/test/test_type_aliases.py
+++ b/Lib/test/test_type_aliases.py
@@ -211,6 +211,19 @@ class TypeAliasConstructorTest(unittest.TestCase):
self.assertEqual(TA.__value__, list[T])
self.assertEqual(TA.__type_params__, (T,))
self.assertEqual(TA.__module__, __name__)
+ self.assertIs(type(TA[int]), types.GenericAlias)
+
+ def test_not_generic(self):
+ TA = TypeAliasType("TA", list[int], type_params=())
+ self.assertEqual(TA.__name__, "TA")
+ self.assertEqual(TA.__value__, list[int])
+ self.assertEqual(TA.__type_params__, ())
+ self.assertEqual(TA.__module__, __name__)
+ with self.assertRaisesRegex(
+ TypeError,
+ "Only generic type aliases are subscriptable",
+ ):
+ TA[int]
def test_keywords(self):
TA = TypeAliasType(name="TA", value=int)
diff --git a/Misc/NEWS.d/next/Library/2024-09-25-12-14-58.gh-issue-124498.Ozxs55.rst b/Misc/NEWS.d/next/Library/2024-09-25-12-14-58.gh-issue-124498.Ozxs55.rst
new file mode 100644
index 0000000..4dbf4eb
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-09-25-12-14-58.gh-issue-124498.Ozxs55.rst
@@ -0,0 +1,2 @@
+Fix :class:`typing.TypeAliasType` not to be generic, when ``type_params`` is
+an empty tuple.
diff --git a/Objects/typevarobject.c b/Objects/typevarobject.c
index 09e9ab3..552c474 100644
--- a/Objects/typevarobject.c
+++ b/Objects/typevarobject.c
@@ -1915,7 +1915,16 @@ typealias_alloc(PyObject *name, PyObject *type_params, PyObject *compute_value,
return NULL;
}
ta->name = Py_NewRef(name);
- ta->type_params = Py_IsNone(type_params) ? NULL : Py_XNewRef(type_params);
+ if (
+ type_params == NULL
+ || Py_IsNone(type_params)
+ || (PyTuple_Check(type_params) && PyTuple_GET_SIZE(type_params) == 0)
+ ) {
+ ta->type_params = NULL;
+ }
+ else {
+ ta->type_params = Py_NewRef(type_params);
+ }
ta->compute_value = Py_XNewRef(compute_value);
ta->value = Py_XNewRef(value);
ta->module = Py_XNewRef(module);