Skip to content

Commit 2cd8199

Browse files
committed
Adopt @serhiy-storchaka's suggestions for approach
1 parent 06bd0c3 commit 2cd8199

File tree

2 files changed

+8
-14
lines changed

2 files changed

+8
-14
lines changed

Lib/typing.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -332,8 +332,8 @@ def inner(*args, **kwds):
332332
def _eval_type(t, globalns, localns, recursive_guard=frozenset()):
333333
"""Evaluate all forward references in the given type t.
334334
For use of globalns and localns see the docstring for get_type_hints().
335-
recursive_guard is used to prevent prevent infinite recursion
336-
with recursive ForwardRef.
335+
recursive_guard is used to prevent infinite recursion with a recursive
336+
ForwardRef.
337337
"""
338338
if isinstance(t, ForwardRef):
339339
return t._evaluate(globalns, localns, recursive_guard)
@@ -670,7 +670,9 @@ def Concatenate(self, parameters):
670670
"ParamSpec variable.")
671671
msg = "Concatenate[arg, ...]: each arg must be a type."
672672
parameters = (*(_type_check(p, msg) for p in parameters[:-1]), parameters[-1])
673-
return _ConcatenateGenericAlias(self, parameters)
673+
return _ConcatenateGenericAlias(self, parameters,
674+
_typevar_types=(TypeVar, ParamSpec),
675+
_paramspec_tvars=True)
674676

675677

676678
@_SpecialForm
@@ -1097,7 +1099,7 @@ def __getattr__(self, attr):
10971099
return self._name or self.__origin__.__name__
10981100

10991101
# We are careful for copy and pickle.
1100-
# Also for simplicity we just don't relay all dunder names
1102+
# Also for simplicity we don't relay any dunder names
11011103
if '__origin__' in self.__dict__ and not _is_dunder(attr):
11021104
return getattr(self.__origin__, attr)
11031105
raise AttributeError(attr)
@@ -1339,8 +1341,6 @@ def _determine_new_args(self, args):
13391341
return tuple(new_args)
13401342

13411343
def copy_with(self, args):
1342-
if isinstance(self, _ConcatenateGenericAlias):
1343-
return self.__class__(self.__origin__, args)
13441344
return self.__class__(self.__origin__, args, name=self._name, inst=self._inst,
13451345
_typevar_types=self._typevar_types,
13461346
_paramspec_tvars=self._paramspec_tvars)
@@ -1552,11 +1552,6 @@ def __hash__(self):
15521552

15531553

15541554
class _ConcatenateGenericAlias(_GenericAlias, _root=True):
1555-
def __init__(self, *args, **kwargs):
1556-
super().__init__(*args, **kwargs,
1557-
_typevar_types=(TypeVar, ParamSpec),
1558-
_paramspec_tvars=True)
1559-
15601555
def copy_with(self, params):
15611556
if isinstance(params[-1], (list, tuple)):
15621557
return (*params[:-1], *params[-1])
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
Propagates :attribute:`~typing._GenericAlias._typevar_types` and
2-
:attribute:`~typing._GenericAlias._paramspec_tvars` via
3-
:method:`~typing._GenericAlias.copy_with`.
1+
Brings :class:`ParamSpec` propagation for :class:`GenericAlias` in line with
2+
:class:`Concatenate` (and others).

0 commit comments

Comments
 (0)