mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
[3.12] gh-112509: Fix keys being present in both required_keys and optional_keys in TypedDict (GH-112512) (#112530)
(cherry picked from commit 4038869423
)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
parent
01b882b390
commit
c67812668f
3 changed files with 63 additions and 5 deletions
|
@ -7509,6 +7509,46 @@ class TypedDictTests(BaseTestCase):
|
|||
'voice': str,
|
||||
})
|
||||
|
||||
def test_keys_inheritance_with_same_name(self):
|
||||
class NotTotal(TypedDict, total=False):
|
||||
a: int
|
||||
|
||||
class Total(NotTotal):
|
||||
a: int
|
||||
|
||||
self.assertEqual(NotTotal.__required_keys__, frozenset())
|
||||
self.assertEqual(NotTotal.__optional_keys__, frozenset(['a']))
|
||||
self.assertEqual(Total.__required_keys__, frozenset(['a']))
|
||||
self.assertEqual(Total.__optional_keys__, frozenset())
|
||||
|
||||
class Base(TypedDict):
|
||||
a: NotRequired[int]
|
||||
b: Required[int]
|
||||
|
||||
class Child(Base):
|
||||
a: Required[int]
|
||||
b: NotRequired[int]
|
||||
|
||||
self.assertEqual(Base.__required_keys__, frozenset(['b']))
|
||||
self.assertEqual(Base.__optional_keys__, frozenset(['a']))
|
||||
self.assertEqual(Child.__required_keys__, frozenset(['a']))
|
||||
self.assertEqual(Child.__optional_keys__, frozenset(['b']))
|
||||
|
||||
def test_multiple_inheritance_with_same_key(self):
|
||||
class Base1(TypedDict):
|
||||
a: NotRequired[int]
|
||||
|
||||
class Base2(TypedDict):
|
||||
a: Required[str]
|
||||
|
||||
class Child(Base1, Base2):
|
||||
pass
|
||||
|
||||
# Last base wins
|
||||
self.assertEqual(Child.__annotations__, {'a': Required[str]})
|
||||
self.assertEqual(Child.__required_keys__, frozenset(['a']))
|
||||
self.assertEqual(Child.__optional_keys__, frozenset())
|
||||
|
||||
def test_required_notrequired_keys(self):
|
||||
self.assertEqual(NontotalMovie.__required_keys__,
|
||||
frozenset({"title"}))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue