Skip to content

Commit 889e9ae

Browse files
committed
Assure that args and parameter tests pass
1 parent df10751 commit 889e9ae

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

src/test_typing_extensions.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7236,14 +7236,14 @@ def test_alias_types_and_substitutions(self):
72367236
TypeAliasType("NestedAlias", List[T], type_params=(T,))[T2] : (T2,),
72377237
}
72387238
# currently a limitation, these args are no longer unpacked in 3.11
7239-
# also valid on 310 if GenericAlias is used
7239+
# OK if GenericAlias in __getitem__ is used
72407240
test_argument_cases_310_plus = {
7241+
Unpack[Ts] : (Ts,),
72417242
Unpack[Tuple[int, T2]] : (T2,),
72427243
Concatenate[int, P] : (P,),
7243-
Unpack[Ts] : (Ts,),
72447244
}
72457245
test_argument_cases_311_plus = {
7246-
Ts : (Ts,),
7246+
Ts : (Ts,), # invalid case
72477247
}
72487248
test_argument_cases.update(test_argument_cases_310_plus)
72497249
test_argument_cases.update(test_argument_cases_311_plus)
@@ -7413,8 +7413,7 @@ def test_callable_with_concatenate(self):
74137413
self.skipTest("Nested list is invalid type form")
74147414
self.assertEqual(concat_usage, callable_concat[[str]])
74157415

7416-
@skipUnless(TYPING_3_11_0, "__args__ behaves differently")
7417-
def test_substitution_311_plus(self):
7416+
def test_substitution(self):
74187417
# To pass these tests alias.__args__ in TypeAliasType.__getitem__ needs adjustment
74197418
# Unpack and Concatenate are unpacked in versions before
74207419
T = TypeVar('T')
@@ -7428,6 +7427,7 @@ def test_substitution_311_plus(self):
74287427
CallableP = TypeAliasType("CallableP", Callable[P, T], type_params=(P, T))
74297428
callable_concat = CallableP[Concatenate[int, P], Any]
74307429
self.assertEqual(get_args(callable_concat), (Concatenate[int, P], Any))
7430+
self.assertEqual(callable_concat.__parameters__, (P,))
74317431

74327432
@skipUnless(TYPING_3_12_0, "__args__ behaves differently")
74337433
def test_substitution_312_plus(self):
@@ -7508,7 +7508,7 @@ def test_list_argument(self):
75087508
invalid_tupleT[str]
75097509

75107510
# The condition should align with the version of GeneriAlias usage in __getitem__
7511-
@skipIf(TYPING_3_9_0, "Most cases are allowed in 3.11+ or with GenericAlias")
7511+
@skipIf(TYPING_3_10_0, "Most cases are allowed in 3.11+ or with GenericAlias")
75127512
def test_invalid_cases_before_3_11(self):
75137513
T = TypeVar('T')
75147514
ListOrSetT = TypeAliasType("ListOrSetT", Union[List[T], Set[T]], type_params=(T,))

src/typing_extensions.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3529,13 +3529,9 @@ def __repr__(self) -> str:
35293529
if sys.version_info < (3, 11):
35303530
def _check_single_param(self, param, recursion=0):
35313531
# Allow [], [int], [int, str], [int, ...], [int, T]
3532-
if isinstance(param, (_UnpackAlias, _ConcatenateGenericAlias)):
3533-
# Unpack
3534-
yield from [checked
3535-
for arg in param.__args__
3536-
for checked in self._check_single_param(arg, recursion+1)]
3537-
elif param is ...:
3532+
if param is ...:
35383533
yield ...
3534+
# Note in < 3.9 _ConcatenateGenericAlias inherits from list
35393535
elif isinstance(param, list) and recursion == 0:
35403536
yield [checked
35413537
for arg in param
@@ -3563,8 +3559,11 @@ def __getitem__(self, parameters):
35633559
parameters = (parameters,)
35643560
if sys.version_info >= (3, 10):
35653561
return _types.GenericAlias(self, tuple(parameters))
3562+
type_vars = _collect_type_vars(parameters)
35663563
parameters = self._check_parameters(parameters)
35673564
alias = typing._GenericAlias(self, tuple(parameters))
3565+
if len(alias.__parameters__) < len(type_vars):
3566+
alias.__parameters__ = tuple(type_vars)
35683567
alias.__value__ = self.__value__
35693568
alias.__type_params__ = self.__type_params__
35703569
alias.__name__ = self.__name__

0 commit comments

Comments
 (0)