summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2021-07-15 07:25:22 (GMT)
committerGitHub <noreply@github.com>2021-07-15 07:25:22 (GMT)
commitcc1a47c849a206441c9b370b6ca954862a523082 (patch)
tree25abd46ff3472c10c83358d96ec9f6df5d3501f6
parent6dec5255829a31826990ea40ca106cc496570df2 (diff)
downloadcpython-cc1a47c849a206441c9b370b6ca954862a523082.zip
cpython-cc1a47c849a206441c9b370b6ca954862a523082.tar.gz
cpython-cc1a47c849a206441c9b370b6ca954862a523082.tar.bz2
bpo-44632: Fix support of TypeVar in the union type (GH-27139) (GH-27143)
int | TypeVar('T') returns now an instance of types.Union instead of typing.Union. (cherry picked from commit a158b20019b50e3ece6e4743ec4e6ae8d818b690) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
-rw-r--r--Lib/test/test_types.py8
-rw-r--r--Objects/unionobject.c2
2 files changed, 8 insertions, 2 deletions
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index 5254d58..3f76771 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -759,6 +759,7 @@ class TypesTests(unittest.TestCase):
assert repr(int | None) == "int | None"
assert repr(int | type(None)) == "int | None"
assert repr(int | typing.GenericAlias(list, int)) == "int | list[int]"
+ assert repr(int | typing.TypeVar('T')) == "int | ~T"
def test_or_type_operator_with_genericalias(self):
a = list[int]
@@ -795,13 +796,18 @@ class TypesTests(unittest.TestCase):
issubclass(int, type_)
def test_or_type_operator_with_bad_module(self):
- class TypeVar:
+ class BadMeta(type):
+ __qualname__ = 'TypeVar'
@property
def __module__(self):
1 / 0
+ TypeVar = BadMeta('TypeVar', (), {})
+ _SpecialForm = BadMeta('_SpecialForm', (), {})
# Crashes in Issue44483
with self.assertRaises(ZeroDivisionError):
str | TypeVar()
+ with self.assertRaises(ZeroDivisionError):
+ str | _SpecialForm()
@cpython_only
def test_or_type_operator_reference_cycle(self):
diff --git a/Objects/unionobject.c b/Objects/unionobject.c
index 98db27d..229b518 100644
--- a/Objects/unionobject.c
+++ b/Objects/unionobject.c
@@ -124,7 +124,7 @@ is_typing_name(PyObject *obj, char *name)
if (strcmp(type->tp_name, name) != 0) {
return 0;
}
- return is_typing_module(obj);
+ return is_typing_module((PyObject *)type);
}
static PyObject *