[Python-checkins] gh-92107: Add tests that subscription works on arbitrary named tuple types (GH-92304)

serhiy-storchaka webhook-mailer at python.org
Wed May 4 10:07:55 EDT 2022


https://github.com/python/cpython/commit/9d20e1af409c22537f096206edd330f16ab8f1f3
commit: 9d20e1af409c22537f096206edd330f16ab8f1f3
branch: main
author: Serhiy Storchaka <storchaka at gmail.com>
committer: serhiy-storchaka <storchaka at gmail.com>
date: 2022-05-04T17:06:50+03:00
summary:

gh-92107: Add tests that subscription works on arbitrary named tuple types (GH-92304)

files:
M Lib/test/test_collections.py
M Lib/test/test_typing.py

diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
index 3a16045c5aa1a..fa1d0e014dee9 100644
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -698,6 +698,18 @@ def test_match_args(self):
         Point = namedtuple('Point', 'x y')
         self.assertEqual(Point.__match_args__, ('x', 'y'))
 
+    def test_non_generic_subscript(self):
+        # For backward compatibility, subscription works
+        # on arbitrary named tuple types.
+        Group = collections.namedtuple('Group', 'key group')
+        A = Group[int, list[int]]
+        self.assertEqual(A.__origin__, Group)
+        self.assertEqual(A.__parameters__, ())
+        self.assertEqual(A.__args__, (int, list[int]))
+        a = A(1, [2])
+        self.assertIs(type(a), Group)
+        self.assertEqual(a, (1, [2]))
+
 
 ################################################################################
 ### Abstract Base Classes
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 55e18c08537df..8399465f6052d 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -5736,6 +5736,20 @@ class Y(Generic[T], NamedTuple):
                 with self.assertRaises(TypeError):
                     G[int, str]
 
+    def test_non_generic_subscript(self):
+        # For backward compatibility, subscription works
+        # on arbitrary NamedTuple types.
+        class Group(NamedTuple):
+            key: T
+            group: list[T]
+        A = Group[int]
+        self.assertEqual(A.__origin__, Group)
+        self.assertEqual(A.__parameters__, ())
+        self.assertEqual(A.__args__, (int,))
+        a = A(1, [2])
+        self.assertIs(type(a), Group)
+        self.assertEqual(a, (1, [2]))
+
     def test_namedtuple_keyword_usage(self):
         LocalEmployee = NamedTuple("LocalEmployee", name=str, age=int)
         nick = LocalEmployee('Nick', 25)



More information about the Python-checkins mailing list