mirror of
https://github.com/python/cpython.git
synced 2026-04-04 19:13:16 +00:00
gh-101562: typing: add tests for inheritance with NotRequired & Required in parent fields (GH-101563)
(cherry picked from commit b96b344f25)
Co-authored-by: Eclips4 <80244920+Eclips4@users.noreply.github.com>
This commit is contained in:
parent
d003bcc91a
commit
9e7acafa14
2 changed files with 34 additions and 0 deletions
|
|
@ -4872,6 +4872,18 @@ class NontotalMovie(TypedDict, total=False):
|
|||
title: Required[str]
|
||||
year: int
|
||||
|
||||
class ParentNontotalMovie(TypedDict, total=False):
|
||||
title: Required[str]
|
||||
|
||||
class ChildTotalMovie(ParentNontotalMovie):
|
||||
year: NotRequired[int]
|
||||
|
||||
class ParentDeeplyAnnotatedMovie(TypedDict):
|
||||
title: Annotated[Annotated[Required[str], "foobar"], "another level"]
|
||||
|
||||
class ChildDeeplyAnnotatedMovie(ParentDeeplyAnnotatedMovie):
|
||||
year: NotRequired[Annotated[int, 2000]]
|
||||
|
||||
class AnnotatedMovie(TypedDict):
|
||||
title: Annotated[Required[str], "foobar"]
|
||||
year: NotRequired[Annotated[int, 2000]]
|
||||
|
|
@ -5201,6 +5213,17 @@ def test_get_type_hints_typeddict(self):
|
|||
'a': Annotated[Required[int], "a", "b", "c"]
|
||||
})
|
||||
|
||||
self.assertEqual(get_type_hints(ChildTotalMovie), {"title": str, "year": int})
|
||||
self.assertEqual(get_type_hints(ChildTotalMovie, include_extras=True), {
|
||||
"title": Required[str], "year": NotRequired[int]
|
||||
})
|
||||
|
||||
self.assertEqual(get_type_hints(ChildDeeplyAnnotatedMovie), {"title": str, "year": int})
|
||||
self.assertEqual(get_type_hints(ChildDeeplyAnnotatedMovie, include_extras=True), {
|
||||
"title": Annotated[Required[str], "foobar", "another level"],
|
||||
"year": NotRequired[Annotated[int, 2000]]
|
||||
})
|
||||
|
||||
def test_get_type_hints_collections_abc_callable(self):
|
||||
# https://github.com/python/cpython/issues/91621
|
||||
P = ParamSpec('P')
|
||||
|
|
@ -6340,6 +6363,16 @@ def test_required_notrequired_keys(self):
|
|||
self.assertEqual(WeirdlyQuotedMovie.__optional_keys__,
|
||||
frozenset({"year"}))
|
||||
|
||||
self.assertEqual(ChildTotalMovie.__required_keys__,
|
||||
frozenset({"title"}))
|
||||
self.assertEqual(ChildTotalMovie.__optional_keys__,
|
||||
frozenset({"year"}))
|
||||
|
||||
self.assertEqual(ChildDeeplyAnnotatedMovie.__required_keys__,
|
||||
frozenset({"title"}))
|
||||
self.assertEqual(ChildDeeplyAnnotatedMovie.__optional_keys__,
|
||||
frozenset({"year"}))
|
||||
|
||||
def test_multiple_inheritance(self):
|
||||
class One(TypedDict):
|
||||
one: int
|
||||
|
|
|
|||
|
|
@ -1403,6 +1403,7 @@ Jean-François Piéronne
|
|||
Oleg Plakhotnyuk
|
||||
Anatoliy Platonov
|
||||
Marcel Plch
|
||||
Kirill Podoprigora
|
||||
Remi Pointel
|
||||
Jon Poler
|
||||
Ariel Poliak
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue