Skip to content

Commit 7c1fea7

Browse files
committed
unify __getitem__ again
1 parent 6b1bafb commit 7c1fea7

File tree

1 file changed

+36
-42
lines changed

1 file changed

+36
-42
lines changed

src/typing_extensions.py

Lines changed: 36 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3539,61 +3539,55 @@ def _is_subscriptable(self):
35393539
return True
35403540
return False
35413541

3542-
if sys.version_info >= (3, 11):
3543-
def __getitem__(self, parameters):
3544-
if len(self.__parameters__) == 0 and not self._is_subscriptable():
3545-
raise TypeError("Only generic type aliases are subscriptable")
3546-
if not isinstance(parameters, tuple):
3547-
parameters = (parameters,)
3548-
parameters = [
3549-
typing._type_check(
3550-
item, f'Subscripting {self.__name__} requires a type.'
3551-
)
3552-
for item in parameters
3553-
]
3554-
alias = typing._GenericAlias(self, tuple(parameters))
3555-
alias.__value__ = self.__value__
3556-
alias.__type_params__ = self.__type_params__
3557-
return alias
3558-
else:
3559-
def _check_parameter(self, item, recursion=0):
3542+
if sys.version_info < (3, 11):
3543+
def _check_single_param(self, param, recursion=0):
35603544
# Allow [], [int], [int, str], [int, ...], [int, T]
3561-
if isinstance(item, (_UnpackAlias, _ConcatenateGenericAlias)):
3545+
if isinstance(param, (_UnpackAlias, _ConcatenateGenericAlias)):
35623546
# Unpack
35633547
yield from [checked
3564-
for arg in item.__args__
3565-
for checked in self._check_parameter(arg, recursion+1)]
3566-
elif item is ...:
3548+
for arg in param.__args__
3549+
for checked in self._check_single_param(arg, recursion+1)]
3550+
elif param is ...:
35673551
yield ...
3568-
elif isinstance(item, list) and recursion == 0:
3552+
elif isinstance(param, list) and recursion == 0:
35693553
yield [checked
3570-
for arg in item
3571-
for checked in self._check_parameter(arg, recursion+1)]
3554+
for arg in param
3555+
for checked in self._check_single_param(arg, recursion+1)]
35723556
else:
35733557
yield typing._type_check(
3574-
item, f'Subscripting {self.__name__} requires a type.'
3558+
param, f'Subscripting {self.__name__} requires a type.'
35753559
)
35763560

3577-
def __getitem__(self, parameters):
3578-
if len(self.__parameters__) == 0 and not self._is_subscriptable():
3579-
raise TypeError("Only generic type aliases are subscriptable")
3580-
if not isinstance(parameters, tuple):
3581-
parameters = (parameters,)
3582-
parameters = [
3561+
def _check_parameters(self, parameters):
3562+
if sys.version_info < (3, 11):
3563+
return [
35833564
checked
35843565
for item in parameters
3585-
for checked in self._check_parameter(item)
3566+
for checked in self._check_single_param(item)
35863567
]
3587-
if sys.version_info[:2] == (3, 10):
3588-
alias = typing._GenericAlias(self, tuple(parameters),
3589-
_typevar_types=(TypeVar, ParamSpec)
3590-
)
3591-
else:
3592-
alias = typing._GenericAlias(self, tuple(parameters))
3568+
return [typing._type_check(
3569+
item, f'Subscripting {self.__name__} requires a type.'
3570+
)
3571+
for item in parameters
3572+
]
3573+
3574+
def __getitem__(self, parameters):
3575+
if len(self.__parameters__) == 0 and not self._is_subscriptable():
3576+
raise TypeError("Only generic type aliases are subscriptable")
3577+
if not isinstance(parameters, tuple):
3578+
parameters = (parameters,)
3579+
parameters = self._check_parameters(parameters)
3580+
if sys.version_info[:2] == (3, 10):
3581+
alias = typing._GenericAlias(self, tuple(parameters),
3582+
_typevar_types=(TypeVar, ParamSpec)
3583+
)
3584+
else:
3585+
alias = typing._GenericAlias(self, tuple(parameters))
3586+
alias.__value__ = self.__value__
3587+
alias.__type_params__ = self.__type_params__
3588+
if not hasattr(alias, '__name__'): # < 3.11
35933589
alias.__name__ = self.__name__
3594-
alias.__value__ = self.__value__
3595-
alias.__type_params__ = self.__type_params__
3596-
return alias
3590+
return alias
35973591

35983592
def __reduce__(self):
35993593
return self.__name__

0 commit comments

Comments
 (0)