bpo-44632: Fix support of TypeVar in the union type (GH-27139)
int | TypeVar('T') returns now an instance of types.Union instead of typing.Union.
This commit is contained in:
parent
b81cac0560
commit
a158b20019
@ -769,6 +769,7 @@ class TypesTests(unittest.TestCase):
|
|||||||
assert repr(int | None) == "int | None"
|
assert repr(int | None) == "int | None"
|
||||||
assert repr(int | type(None)) == "int | None"
|
assert repr(int | type(None)) == "int | None"
|
||||||
assert repr(int | typing.GenericAlias(list, int)) == "int | list[int]"
|
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):
|
def test_or_type_operator_with_genericalias(self):
|
||||||
a = list[int]
|
a = list[int]
|
||||||
@ -805,13 +806,18 @@ class TypesTests(unittest.TestCase):
|
|||||||
issubclass(int, type_)
|
issubclass(int, type_)
|
||||||
|
|
||||||
def test_or_type_operator_with_bad_module(self):
|
def test_or_type_operator_with_bad_module(self):
|
||||||
class TypeVar:
|
class BadMeta(type):
|
||||||
|
__qualname__ = 'TypeVar'
|
||||||
@property
|
@property
|
||||||
def __module__(self):
|
def __module__(self):
|
||||||
1 / 0
|
1 / 0
|
||||||
|
TypeVar = BadMeta('TypeVar', (), {})
|
||||||
|
_SpecialForm = BadMeta('_SpecialForm', (), {})
|
||||||
# Crashes in Issue44483
|
# Crashes in Issue44483
|
||||||
with self.assertRaises(ZeroDivisionError):
|
with self.assertRaises(ZeroDivisionError):
|
||||||
str | TypeVar()
|
str | TypeVar()
|
||||||
|
with self.assertRaises(ZeroDivisionError):
|
||||||
|
str | _SpecialForm()
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_or_type_operator_reference_cycle(self):
|
def test_or_type_operator_reference_cycle(self):
|
||||||
|
@ -127,7 +127,7 @@ is_typing_name(PyObject *obj, char *name)
|
|||||||
if (strcmp(type->tp_name, name) != 0) {
|
if (strcmp(type->tp_name, name) != 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return is_typing_module(obj);
|
return is_typing_module((PyObject *)type);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
Loading…
x
Reference in New Issue
Block a user