From 5646d1e2fdd2b3d52c872e08f4edb56bad40e04b Mon Sep 17 00:00:00 2001 From: Stephen Morton Date: Sun, 15 Dec 2024 20:34:08 -0800 Subject: [PATCH] use Literal[_MISSING_TYPE.MISSING] for dataclasses.field --- stdlib/@tests/stubtest_allowlists/common.txt | 2 -- stdlib/dataclasses.pyi | 14 +++++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/stdlib/@tests/stubtest_allowlists/common.txt b/stdlib/@tests/stubtest_allowlists/common.txt index 8ce325eb4cc1..6a254f7f7624 100644 --- a/stdlib/@tests/stubtest_allowlists/common.txt +++ b/stdlib/@tests/stubtest_allowlists/common.txt @@ -330,8 +330,6 @@ _?ctypes.Union.__getattr__ # doesn't exist, but makes things easy if we pretend # These would ideally be special-cased by type checkers; see https://github.com/python/mypy/issues/2220 _?ctypes.Array.__iter__ -dataclasses.field # White lies around defaults - # __all__-related weirdness (see #6523) email.__all__ email.base64mime diff --git a/stdlib/dataclasses.pyi b/stdlib/dataclasses.pyi index 3295b1c1f835..3d89b830352b 100644 --- a/stdlib/dataclasses.pyi +++ b/stdlib/dataclasses.pyi @@ -152,33 +152,37 @@ if sys.version_info >= (3, 10): def field( *, default: _T, + default_factory: Literal[_MISSING_TYPE.MISSING] = ..., init: bool = True, repr: bool = True, hash: bool | None = None, compare: bool = True, metadata: Mapping[Any, Any] | None = None, - kw_only: bool = ..., + kw_only: bool | Literal[_MISSING_TYPE.MISSING] = ..., ) -> _T: ... @overload def field( *, + default: Literal[_MISSING_TYPE.MISSING] = ..., default_factory: Callable[[], _T], init: bool = True, repr: bool = True, hash: bool | None = None, compare: bool = True, metadata: Mapping[Any, Any] | None = None, - kw_only: bool = ..., + kw_only: bool | Literal[_MISSING_TYPE.MISSING] = ..., ) -> _T: ... @overload def field( *, + default: Literal[_MISSING_TYPE.MISSING] = ..., + default_factory: Literal[_MISSING_TYPE.MISSING] = ..., init: bool = True, repr: bool = True, hash: bool | None = None, compare: bool = True, metadata: Mapping[Any, Any] | None = None, - kw_only: bool = ..., + kw_only: bool | Literal[_MISSING_TYPE.MISSING] = ..., ) -> Any: ... else: @@ -186,6 +190,7 @@ else: def field( *, default: _T, + default_factory: Literal[_MISSING_TYPE.MISSING] = ..., init: bool = True, repr: bool = True, hash: bool | None = None, @@ -195,6 +200,7 @@ else: @overload def field( *, + default: Literal[_MISSING_TYPE.MISSING] = ..., default_factory: Callable[[], _T], init: bool = True, repr: bool = True, @@ -205,6 +211,8 @@ else: @overload def field( *, + default: Literal[_MISSING_TYPE.MISSING] = ..., + default_factory: Literal[_MISSING_TYPE.MISSING] = ..., init: bool = True, repr: bool = True, hash: bool | None = None,