Hello,

Upstream bug has been fixed:

https://github.com/ilevkivskyi/typing_inspect/commit/6bc521b9ba9fd22d2d3f219fcc99dedc3fb4c2f7


You can find attached a slightly modified version of the patch that applies to current package and fix test failure.


Regards, Adam.

--- python-typing-inspect-0.6.0.orig/typing_inspect.py
+++ python-typing-inspect-0.6.0/typing_inspect.py
@@ -23,6 +23,11 @@ if NEW_TYPING:
         Generic, Callable, Union, TypeVar, ClassVar, Tuple, _GenericAlias, 
ForwardRef
     )
     from typing_extensions import Literal
+    if sys.version_info[:3] >= (3, 9, 0):
+        from typing import _SpecialGenericAlias
+        typingGenericAlias = (_GenericAlias, _SpecialGenericAlias)
+    else:
+        typingGenericAlias = (_GenericAlias,)
 else:
     from typing import (
         Callable, CallableMeta, Union, Tuple, TupleMeta, TypeVar, GenericMeta, 
_ForwardRef
@@ -74,7 +79,7 @@ def is_generic_type(tp):
     """
     if NEW_TYPING:
         return (isinstance(tp, type) and issubclass(tp, Generic) or
-                isinstance(tp, _GenericAlias) and
+                isinstance(tp, typingGenericAlias) and
                 tp.__origin__ not in (Union, tuple, ClassVar, 
collections.abc.Callable))
     return (isinstance(tp, GenericMeta) and not
             isinstance(tp, (CallableMeta, TupleMeta)))
@@ -100,7 +105,7 @@ def is_callable_type(tp):
         get_origin(tp) is collections.abc.Callable  # Callable prior to Python 
3.7
     """
     if NEW_TYPING:
-        return (tp is Callable or isinstance(tp, _GenericAlias) and
+        return (tp is Callable or isinstance(tp, typingGenericAlias) and
                 tp.__origin__ is collections.abc.Callable or
                 isinstance(tp, type) and issubclass(tp, Generic) and
                 issubclass(tp, collections.abc.Callable))
@@ -126,7 +131,7 @@ def is_tuple_type(tp):
         get_origin(tp) is tuple  # Tuple prior to Python 3.7
     """
     if NEW_TYPING:
-        return (tp is Tuple or isinstance(tp, _GenericAlias) and
+        return (tp is Tuple or isinstance(tp, typingGenericAlias) and
                 tp.__origin__ is tuple or
                 isinstance(tp, type) and issubclass(tp, Generic) and
                 issubclass(tp, tuple))
@@ -164,14 +169,14 @@ def is_union_type(tp):
     """
     if NEW_TYPING:
         return (tp is Union or
-                isinstance(tp, _GenericAlias) and tp.__origin__ is Union)
+                isinstance(tp, typingGenericAlias) and tp.__origin__ is Union)
     return type(tp) is _Union
 
 
 def is_literal_type(tp):
     if NEW_TYPING:
         return (tp is Literal or
-                isinstance(tp, _GenericAlias) and tp.__origin__ is Literal)
+                isinstance(tp, typingGenericAlias) and tp.__origin__ is 
Literal)
     return WITH_LITERAL and type(tp) is _Literal
 
 
@@ -196,7 +201,7 @@ def is_classvar(tp):
     """
     if NEW_TYPING:
         return (tp is ClassVar or
-                isinstance(tp, _GenericAlias) and tp.__origin__ is ClassVar)
+                isinstance(tp, typingGenericAlias) and tp.__origin__ is 
ClassVar)
     elif WITH_CLASSVAR:
         return type(tp) is _ClassVar
     else:
@@ -262,7 +267,7 @@ def get_origin(tp):
         get_origin(List[Tuple[T, T]][int]) == list  # List prior to Python 3.7
     """
     if NEW_TYPING:
-        if isinstance(tp, _GenericAlias):
+        if isinstance(tp, typingGenericAlias):
             return tp.__origin__ if tp.__origin__ is not ClassVar else None
         if tp is Generic:
             return Generic
@@ -327,7 +332,7 @@ def get_parameters(tp):
         else:
             return ()
     elif NEW_TYPING:
-        if (isinstance(tp, _GenericAlias) or
+        if (isinstance(tp, typingGenericAlias) or
                 isinstance(tp, type) and issubclass(tp, Generic) and
                 tp is not Generic):
             return tp.__parameters__

Reply via email to