diff --git a/typing_inspect.py b/typing_inspect.py
index 2444027..eee2ed3 100644
--- a/typing_inspect.py
+++ b/typing_inspect.py
@@ -16,6 +16,7 @@ if NEW_TYPING:
WITH_LITERAL = True
WITH_CLASSVAR = True
+WITH_TYPING_3_9 = True
LEGACY_TYPING = False
if NEW_TYPING:
@@ -23,6 +24,12 @@ if NEW_TYPING:
Generic, Callable, Union, TypeVar, ClassVar, Tuple, _GenericAlias, ForwardRef
)
from typing_extensions import Literal
+
+ try: # python 3.9
+ from typing import _SpecialGenericAlias
+ except ImportErrror:
+ WITH_TYPING_3_9 = False
+
else:
from typing import (
Callable, CallableMeta, Union, Tuple, TupleMeta, TypeVar, GenericMeta, _ForwardRef
@@ -43,7 +50,6 @@ else:
except ImportError:
WITH_LITERAL = False
-
def _gorg(cls):
"""This function exists for compatibility with old typing versions."""
assert isinstance(cls, GenericMeta)
@@ -72,6 +78,10 @@ def is_generic_type(tp):
is_generic_type(MutableMapping[T, List[int]]) == True
is_generic_type(Sequence[Union[str, bytes]]) == True
"""
+ if WITH_TYPING_3_9:
+ return (isinstance(tp, type) and issubclass(tp, Generic) or
+ ((isinstance(tp, _GenericAlias) or isinstance(tp, _SpecialGenericAlias)) and
+ tp.__origin__ not in (Union, tuple, ClassVar, collections.abc.Callable)))
if NEW_TYPING:
return (isinstance(tp, type) and issubclass(tp, Generic) or
isinstance(tp, _GenericAlias) and