Skip to content

Commit 9911ac7

Browse files
committed
Add __name__ for TypeAliasType for <=3.10
1 parent e532429 commit 9911ac7

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

src/test_typing_extensions.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7165,13 +7165,38 @@ def test_attributes(self):
71657165
self.assertEqual(ListOrSetT.__type_params__, (T,))
71667166
self.assertEqual(ListOrSetT.__parameters__, (T,))
71677167

7168+
subscripted = ListOrSetT[int]
7169+
self.assertEqual(subscripted.__name__, "ListOrSetT")
7170+
self.assertEqual(subscripted.__value__, Union[List[T], Set[T]],)
7171+
self.assertEqual(subscripted.__type_params__, (T, ))
7172+
self.assertEqual(subscripted.__parameters__, ())
7173+
7174+
T2 = TypeVar("T2")
7175+
subscriptedT = ListOrSetT[T2]
7176+
self.assertEqual(subscriptedT.__name__, "ListOrSetT")
7177+
self.assertEqual(subscriptedT.__value__, Union[List[T], Set[T]],)
7178+
self.assertEqual(subscriptedT.__type_params__, (T, ))
7179+
self.assertEqual(subscriptedT.__parameters__, (T2, ))
7180+
71687181
Ts = TypeVarTuple("Ts")
71697182
Variadic = TypeAliasType("Variadic", Tuple[int, Unpack[Ts]], type_params=(Ts,))
71707183
self.assertEqual(Variadic.__name__, "Variadic")
71717184
self.assertEqual(Variadic.__value__, Tuple[int, Unpack[Ts]])
71727185
self.assertEqual(Variadic.__type_params__, (Ts,))
71737186
self.assertEqual(Variadic.__parameters__, tuple(iter(Ts)))
71747187

7188+
subscripted_tuple = Variadic[Unpack[Tuple[int, float]]]
7189+
self.assertEqual(subscripted_tuple.__name__, "Variadic")
7190+
self.assertEqual(subscripted_tuple.__value__, Tuple[int, Unpack[Ts]])
7191+
self.assertEqual(subscripted_tuple.__type_params__, (Ts,))
7192+
self.assertEqual(subscripted_tuple.__parameters__, ())
7193+
7194+
subscripted_tupleT = Variadic[Unpack[Tuple[int, T]]]
7195+
self.assertEqual(subscripted_tupleT.__name__, "Variadic")
7196+
self.assertEqual(subscripted_tupleT.__value__, Tuple[int, Unpack[Ts]])
7197+
self.assertEqual(subscripted_tupleT.__type_params__, (Ts,))
7198+
self.assertEqual(subscripted_tupleT.__parameters__, (T, ))
7199+
71757200
def test_cannot_set_attributes(self):
71767201
Simple = TypeAliasType("Simple", int)
71777202
with self.assertRaisesRegex(AttributeError, "readonly attribute"):
@@ -7282,6 +7307,24 @@ def test_getitem(self):
72827307
with self.assertRaises(TypeError):
72837308
ListOrSetT[(Generic[T], )]
72847309

7310+
def test_invalid_cases(self):
7311+
# If these cases fail the specificiation might have changed
7312+
T = TypeVar("T")
7313+
T2 = TypeVar("T2")
7314+
ListOrSetT = TypeAliasType("ListOrSetT", Union[List[T], Set[T]], type_params=(T,))
7315+
too_many = ListOrSetT[int, bool]
7316+
7317+
self.assertEqual(get_args(too_many), (int, bool))
7318+
self.assertEqual(too_many.__parameters__, ())
7319+
7320+
ListOrSet2T = TypeAliasType("ListOrSetT", Union[List[T], Set[T2]], type_params=(T, T2))
7321+
not_enough = ListOrSet2T[int]
7322+
self.assertEqual(get_args(not_enough), (int,))
7323+
self.assertEqual(not_enough.__parameters__, ())
7324+
7325+
not_enough2 = ListOrSet2T[T]
7326+
self.assertEqual(get_args(not_enough2), (T,))
7327+
self.assertEqual(not_enough2.__parameters__, (T,))
72857328

72867329
def test_pickle(self):
72877330
global Alias

src/typing_extensions.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3564,6 +3564,7 @@ def __getitem__(self, parameters):
35643564
for item, typ in zip(parameters, self.__type_params__)
35653565
]
35663566
alias = typing._GenericAlias(self, tuple(parameters))
3567+
alias.__name__ = self.__name__
35673568
alias.__value__ = self.__value__
35683569
alias.__type_params__ = self.__type_params__
35693570
return alias

0 commit comments

Comments
 (0)