GH-103699: Add __orig_bases__ to various typing classes (#103698)

Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
This commit is contained in:
Adrian Garcia Badaracco 2023-04-23 08:33:39 -06:00 committed by GitHub
parent e38bebb9ee
commit 0056701aa3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 70 additions and 2 deletions

View file

@ -6695,6 +6695,22 @@ class NamedTupleTests(BaseTestCase):
self.assertEqual(jane2, jane)
self.assertIsInstance(jane2, cls)
def test_orig_bases(self):
T = TypeVar('T')
class SimpleNamedTuple(NamedTuple):
pass
class GenericNamedTuple(NamedTuple, Generic[T]):
pass
self.assertEqual(SimpleNamedTuple.__orig_bases__, (NamedTuple,))
self.assertEqual(GenericNamedTuple.__orig_bases__, (NamedTuple, Generic[T]))
CallNamedTuple = NamedTuple('CallNamedTuple', [])
self.assertEqual(CallNamedTuple.__orig_bases__, (NamedTuple,))
class TypedDictTests(BaseTestCase):
def test_basics_functional_syntax(self):
@ -7126,6 +7142,49 @@ class TypedDictTests(BaseTestCase):
self.assertIs(type(a), dict)
self.assertEqual(a, {'a': 1})
def test_orig_bases(self):
T = TypeVar('T')
class Parent(TypedDict):
pass
class Child(Parent):
pass
class OtherChild(Parent):
pass
class MixedChild(Child, OtherChild, Parent):
pass
class GenericParent(TypedDict, Generic[T]):
pass
class GenericChild(GenericParent[int]):
pass
class OtherGenericChild(GenericParent[str]):
pass
class MixedGenericChild(GenericChild, OtherGenericChild, GenericParent[float]):
pass
class MultipleGenericBases(GenericParent[int], GenericParent[float]):
pass
CallTypedDict = TypedDict('CallTypedDict', {})
self.assertEqual(Parent.__orig_bases__, (TypedDict,))
self.assertEqual(Child.__orig_bases__, (Parent,))
self.assertEqual(OtherChild.__orig_bases__, (Parent,))
self.assertEqual(MixedChild.__orig_bases__, (Child, OtherChild, Parent,))
self.assertEqual(GenericParent.__orig_bases__, (TypedDict, Generic[T]))
self.assertEqual(GenericChild.__orig_bases__, (GenericParent[int],))
self.assertEqual(OtherGenericChild.__orig_bases__, (GenericParent[str],))
self.assertEqual(MixedGenericChild.__orig_bases__, (GenericChild, OtherGenericChild, GenericParent[float]))
self.assertEqual(MultipleGenericBases.__orig_bases__, (GenericParent[int], GenericParent[float]))
self.assertEqual(CallTypedDict.__orig_bases__, (TypedDict,))
class RequiredTests(BaseTestCase):