summaryrefslogtreecommitdiffstats
path: root/Lib/typing.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2016-10-29 23:05:26 (GMT)
committerGuido van Rossum <guido@python.org>2016-10-29 23:05:26 (GMT)
commit62fe1bb983084c74fd8e7028412d0130a14568f3 (patch)
tree89fe564d149458b7060cdea02e19f966fbe34a4c /Lib/typing.py
parentb7dedc89f1ec476352f3678d0c55252159da27df (diff)
downloadcpython-62fe1bb983084c74fd8e7028412d0130a14568f3.zip
cpython-62fe1bb983084c74fd8e7028412d0130a14568f3.tar.gz
cpython-62fe1bb983084c74fd8e7028412d0130a14568f3.tar.bz2
Issue #28556: updates to typing.py (add Coroutine, prohibit Generic[T]())
Diffstat (limited to 'Lib/typing.py')
-rw-r--r--Lib/typing.py31
1 files changed, 23 insertions, 8 deletions
diff --git a/Lib/typing.py b/Lib/typing.py
index 572708b..2a1ea08 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -29,9 +29,6 @@ __all__ = [
# ABCs (from collections.abc).
'AbstractSet', # collections.abc.Set.
- 'Awaitable',
- 'AsyncIterator',
- 'AsyncIterable',
'ByteString',
'Container',
'Hashable',
@@ -47,6 +44,14 @@ __all__ = [
'Sequence',
'Sized',
'ValuesView',
+ # The following are added depending on presence
+ # of their non-generic counterparts in stdlib:
+ # Awaitable,
+ # AsyncIterator,
+ # AsyncIterable,
+ # Coroutine,
+ # Collection,
+ # ContextManager
# Structural checks, a.k.a. protocols.
'Reversible',
@@ -1104,6 +1109,9 @@ class Generic(metaclass=GenericMeta):
__slots__ = ()
def __new__(cls, *args, **kwds):
+ if _geqv(cls, Generic):
+ raise TypeError("Type Generic cannot be instantiated; "
+ "it can be used only as a base class")
return _generic_new(cls.__next_in_mro__, cls, *args, **kwds)
@@ -1639,8 +1647,16 @@ Hashable = collections_abc.Hashable # Not generic.
if hasattr(collections_abc, 'Awaitable'):
class Awaitable(Generic[T_co], extra=collections_abc.Awaitable):
__slots__ = ()
-else:
- Awaitable = None
+
+ __all__.append('Awaitable')
+
+
+if hasattr(collections_abc, 'Coroutine'):
+ class Coroutine(Awaitable[V_co], Generic[T_co, T_contra, V_co],
+ extra=collections_abc.Coroutine):
+ __slots__ = ()
+
+ __all__.append('Coroutine')
if hasattr(collections_abc, 'AsyncIterable'):
@@ -1652,9 +1668,8 @@ if hasattr(collections_abc, 'AsyncIterable'):
extra=collections_abc.AsyncIterator):
__slots__ = ()
-else:
- AsyncIterable = None
- AsyncIterator = None
+ __all__.append('AsyncIterable')
+ __all__.append('AsyncIterator')
class Iterable(Generic[T_co], extra=collections_abc.Iterable):