From 9574101f383c50352f229f7ace1adc2231deba30 Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Mon, 6 Sep 2021 00:24:53 +0200 Subject: [PATCH] Make `get_origin(Literal[...]) == Literal`. --- test_typing_inspect.py | 2 ++ typing_inspect.py | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/test_typing_inspect.py b/test_typing_inspect.py index 7e9d432..96b6fa6 100644 --- a/test_typing_inspect.py +++ b/test_typing_inspect.py @@ -306,6 +306,8 @@ def test_origin(self): self.assertEqual(get_origin(ClassVar[int]), None) self.assertEqual(get_origin(Generic), Generic) self.assertEqual(get_origin(Generic[T]), Generic) + # Cannot use assertEqual on Py3.5.2. + self.assertIs(get_origin(Literal[42]), Literal) if PY39: self.assertEqual(get_origin(list[int]), list) if GENERIC_TUPLE_PARAMETRIZABLE: diff --git a/typing_inspect.py b/typing_inspect.py index 4c765e3..49785d0 100644 --- a/typing_inspect.py +++ b/typing_inspect.py @@ -63,10 +63,10 @@ WITH_FINAL = False try: # python 3.6 - from typing_extensions import _Literal + from typing_extensions import Literal except ImportError: # python 2.7 try: - from typing import _Literal + from typing import Literal except ImportError: WITH_LITERAL = False @@ -212,7 +212,7 @@ def is_literal_type(tp): if NEW_TYPING: return (tp is Literal or isinstance(tp, typingGenericAlias) and tp.__origin__ is Literal) - return WITH_LITERAL and type(tp) is _Literal + return WITH_LITERAL and type(tp) is type(Literal) def is_typevar(tp): @@ -313,6 +313,8 @@ def get_origin(tp): return Union if is_tuple_type(tp): return Tuple + if is_literal_type(tp): + return Literal return None