8000 Make Mapping.get(default) more constrained by ndmitchell · Pull Request #14360 · python/typeshed · GitHub
[go: up one dir, main page]

Skip to content

Make Mapping.get(default) more constrained #14360

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 18 commits into from
Jul 2, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions stdlib/collections/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,8 @@ class UserDict(MutableMapping[_KT, _VT]):
@overload
def get(self, key: _KT, default: None = None) -> _VT | None: ...
@overload
def get(self, key: _KT, default: _VT) -> _VT: ...
@overload
def get(self, key: _KT, default: _T) -> _VT | _T: ...

class UserList(MutableSequence[_T]):
Expand Down Expand Up @@ -452,6 +454,8 @@ class ChainMap(MutableMapping[_KT, _VT]):
@overload
def get(self, key: _KT, default: None = None) -> _VT | None: ...
@overload
def get(self, key: _KT, default: _VT) -> _VT: ...
@overload
def get(self, key: _KT, default: _T) -> _VT | _T: ...
def __missing__(self, key: _KT) -> _VT: ... # undocumented
def __bool__(self) -> bool: ...
Expand Down
2 changes: 2 additions & 0 deletions stdlib/importlib/metadata/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,8 @@ if sys.version_info >= (3, 10) and sys.version_info < (3, 12):
@overload
def get(self, name: _KT, default: None = None) -> _VT | None: ...
@overload
def get(self, name: _KT, default: _VT) -> _VT: ...
@overload
def get(self, name: _KT, default: _T) -> _VT | _T: ...
def __iter__(self) -> Iterator[_KT]: ...
def __contains__(self, *args: object) -> bool: ...
Expand Down
4 changes: 3 additions & 1 deletion stdlib/types.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,9 @@ class MappingProxyType(Mapping[_KT, _VT_co]):
@overload
def get(self, key: _KT, /) -> _VT_co | None: ...
@overload
def get(self, key: _KT, default: _VT_co | _T2, /) -> _VT_co | _T2: ...
def get(self, key: _KT, default: _VT_co, /) -> _VT_co: ... # type: ignore[misc] # pyright: ignore[reportGeneralTypeIssues] # Covariant type as parameter
@overload
def get(self, key: _KT, default: _T2, /) -> _VT_co | _T2: ...
def __class_getitem__(cls, item: Any, /) -> GenericAlias: ...
def __reversed__(self) -> Iterator[_KT]: ...
def __or__(self, value: Mapping[_T1, _T2], /) -> dict[_KT | _T1, _VT_co | _T2]: ...
Expand Down
4 changes: 3 additions & 1 deletion stdlib/typing.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -745,7 +745,9 @@ class Mapping(Collection[_KT], Generic[_KT, _VT_co]):
@overload
def get(self, key: _KT, /) -> _VT_co | None: ...
@overload
def get(self, key: _KT, /, default: _VT_co | _T) -> _VT_co | _T: ...
def get(self, key: _KT, /, default: _VT_co) -> _VT_co: ... # type: ignore[misc] # pyright: ignore[reportGeneralTypeIssues] # Covariant type as parameter
@overload
def get(self, key: _KT, /, default: _T) -> _VT_co | _T: ...
def items(self) -> ItemsView[_KT, _VT_co]: ...
def keys(self) -> KeysView[_KT]: ...
def values(self) -> ValuesView[_VT_co]: ...
Expand Down
4 changes: 4 additions & 0 deletions stdlib/weakref.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ class WeakValueDictionary(MutableMapping[_KT, _VT]):
@overload
def get(self, key: _KT, default: None = None) -> _VT | None: ...
@overload
def get(self, key: _KT, default: _VT) -> _VT: ...
@overload
def get(self, key: _KT, default: _T) -> _VT | _T: ...
# These are incompatible with Mapping
def keys(self) -> Iterator[_KT]: ... # type: ignore[override]
Expand Down Expand Up @@ -149,6 +151,8 @@ class WeakKeyDictionary(MutableMapping[_KT, _VT]):
@overload
def get(self, key: _KT, default: None = None) -> _VT | None: ...
@overload
def get(self, key: _KT, default: _VT) -> _VT: ...
@overload
def get(self, key: _KT, default: _T) -> _VT | _T: ...
# These are incompatible with Mapping
def keys(self) -> Iterator[_KT]: ... # type: ignore[override]
Expand Down
2 changes: 2 additions & 0 deletions stubs/WebOb/webob/cookies.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ class RequestCookies(MutableMapping[str, str]):
@overload
def get(self, name: str, default: None = None) -> str | None: ...
@overload
def get(self, name: str, default: str) -> str: ...
@overload
def get(self, name: str, default: _T) -> str | _T: ...
def __delitem__(self, name: str) -> None: ...
def keys(self) -> KeysView[str]: ...
Expand Down
4 changes: 3 additions & 1 deletion stubs/WebOb/webob/multidict.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ class MultiDict(MutableMapping[_KT, _VT]):
def __setitem__(self, key: _KT, value: _VT) -> None: ...
def add(self, key: _KT, value: _VT) -> None: ...
@overload
def get(self, key: _KT) -> _VT | None: ...
def get(self, key: _KT, default: None = None) -> _VT | None: ...
@overload
def get(self, key: _KT, default: _VT) -> _VT: ...
@overload
def get(self, key: _KT, default: _T) -> _VT | _T: ...
def getall(self, key: _KT) -> list[_VT]: ...
Expand Down
2 changes: 2 additions & 0 deletions stubs/boltons/boltons/cacheutils.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ class LRI(dict[_KT, _VT]):
@overload
def get(self, key: _KT, default: None = None) -> _VT | None: ...
@overload
def get(self, key: _KT, default: _VT) -> _VT: ...
@overload
def get(self, key: _KT, default: _T) -> _T | _VT: ...
def __delitem__(self, key: _KT) -> None: ...
@overload
Expand Down
4 changes: 3 additions & 1 deletion stubs/grpcio/grpc/aio/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,9 @@ class Metadata(Mapping[_MetadataKey, _MetadataValue]):
def delete_all(self, key: _MetadataKey) -> None: ...
def __iter__(self) -> Iterator[_MetadataKey]: ...
@overload
def get(self, key: _MetadataKey) -> _MetadataValue | None: ...
def get(self, key: _MetadataKey, default: None = None) -> _MetadataValue | None: ...
@overload
def get(self, key: _MetadataKey, default: _MetadataValue) -> _MetadataValue: ...
@overload
def get(self, key: _MetadataKey, default: _T) -> _MetadataValue | _T: ...
def get_all(self, key: _MetadataKey) -> list[_MetadataValue]: ...
Expand Down
4 changes: 3 additions & 1 deletion stubs/inifile/inifile.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,9 @@ class IniData(MutableMapping[str, str]):
def to_dict(self) -> dict[str, str]: ...
def __len__(self) -> int: ...
@overload
def get(self, name: str) -> str | None: ...
def get(self, name: str, default: None = None) -> str | None: ...
@overload
def get(self, name: str, default: str) -> str: ...
@overload
def get(self, name: str, default: _T) -> str | _T: ...
@overload
Expand Down
102DE 5 changes: 4 additions & 1 deletion stubs/oauthlib/oauthlib/common.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,10 @@ class CaseInsensitiveDict(dict[str, Incomplete]):
def __contains__(self, k: object) -> bool: ...
def __delitem__(self, k: str) -> None: ...
def __getitem__(self, k: str): ...
def get(self, k: str, default=None) -> Incomplete | None: ...
@overload
def get(self, k: str, default: None = None) -> Incomplete | None: ...
@overload
def get(self, k: str, default): ...
def __setitem__(self, k: str, v) -> None: ...
def update(self, *args, **kwargs) -> None: ...

Expand Down
8 changes: 6 additions & 2 deletions stubs/protobuf/google/protobuf/internal/containers.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,9 @@ class ScalarMap(MutableMapping[_K, _ScalarV]):
@overload
def get(self, key: _K, default: None = None) -> _ScalarV | None: ...
@overload
def get(self, key: _K, default: _ScalarV | _T) -> _ScalarV | _T: ...
def get(self, key: _K, default: _ScalarV) -> _ScalarV: ...
@overload
def get(self, key: _K, default: _T) -> _ScalarV | _T: ...
def setdefault(self, key: _K, value: _ScalarV | None = None) -> _ScalarV: ...
def MergeFrom(self, other: Self): ...
def InvalidateIterators(self) -> None: ...
Expand All @@ -95,7 +97,9 @@ class MessageMap(MutableMapping[_K, _MessageV]):
@overload
def get(self, key: _K, default: None = None) -> _MessageV | None: ...
@overload
def get(self, key: _K, default: _MessageV | _T) -> _MessageV | _T: ...
def get(self, key: _K, default: _MessageV) -> _MessageV: ...
@overload
def get(self, key: _K, default: _T) -> _MessageV | _T: ...
def get_or_create(self, key: _K) -> _MessageV: ...
def setdefault(self, key: _K, value: _MessageV | None = None) -> _MessageV: ...
def MergeFrom(self, other: Self): ...
Expand Down
0