]> granicus.if.org Git - python/commitdiff
bpo-32873: Remove a name hack for generic aliases in typing module (GH-6376)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 5 Apr 2018 00:46:40 +0000 (17:46 -0700)
committerGitHub <noreply@github.com>
Thu, 5 Apr 2018 00:46:40 +0000 (17:46 -0700)
This removes a hack and replaces it with a proper
mapping {'list': 'List', 'dict': 'Dict', ...}.
(cherry picked from commit 2a363d2930e29ec6d8a774973ed5a4965f881f5f)

Co-authored-by: Ivan Levkivskyi <levkivskyi@gmail.com>
Lib/test/test_typing.py
Lib/typing.py

index b12e5ea2fb80f1fa0d9aa66bb8cf60099b5c3d61..390fe60fcc10268cd97397a355f1255b78fd91ad 100644 (file)
@@ -1058,14 +1058,15 @@ class GenericTests(BaseTestCase):
             self.assertEqual(x.bar, 'abc')
             self.assertEqual(x.__dict__, {'foo': 42, 'bar': 'abc'})
         samples = [Any, Union, Tuple, Callable, ClassVar,
-                   Union[int, str], ClassVar[List], Tuple[int, ...], Callable[[str], bytes]]
+                   Union[int, str], ClassVar[List], Tuple[int, ...], Callable[[str], bytes],
+                   typing.DefaultDict, typing.FrozenSet[int]]
         for s in samples:
             for proto in range(pickle.HIGHEST_PROTOCOL + 1):
                 z = pickle.dumps(s, proto)
                 x = pickle.loads(z)
                 self.assertEqual(s, x)
         more_samples = [List, typing.Iterable, typing.Type, List[int],
-                        typing.Type[typing.Mapping]]
+                        typing.Type[typing.Mapping], typing.AbstractSet[Tuple[int, str]]]
         for s in more_samples:
             for proto in range(pickle.HIGHEST_PROTOCOL + 1):
                 z = pickle.dumps(s, proto)
index 3ac3b93822622b49cdff143a686d0d95f1ddd3c9..d45502ffee48beef38f50398ccc083d39c01ad24 100644 (file)
@@ -611,6 +611,19 @@ class TypeVar(_Final, _Immutable, _root=True):
 # * __args__ is a tuple of all arguments used in subscripting,
 #   e.g., Dict[T, int].__args__ == (T, int).
 
+
+# Mapping from non-generic type names that have a generic alias in typing
+# but with a different name.
+_normalize_alias = {'list': 'List',
+                    'tuple': 'Tuple',
+                    'dict': 'Dict',
+                    'set': 'Set',
+                    'frozenset': 'FrozenSet',
+                    'deque': 'Deque',
+                    'defaultdict': 'DefaultDict',
+                    'type': 'Type',
+                    'Set': 'AbstractSet'}
+
 def _is_dunder(attr):
     return attr.startswith('__') and attr.endswith('__')
 
@@ -629,7 +642,7 @@ class _GenericAlias(_Final, _root=True):
         self._special = special
         if special and name is None:
             orig_name = origin.__name__
-            name = orig_name[0].title() + orig_name[1:]
+            name = _normalize_alias.get(orig_name, orig_name)
         self._name = name
         if not isinstance(params, tuple):
             params = (params,)