From c065982b7abca4c9f69e4059b30ca6ace83bf618 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 24 Aug 2020 14:03:38 +0300 Subject: [PATCH] support anything with .keys() and __getitem__ in dict.__init__ (#4470) --- stdlib/2/__builtin__.pyi | 3 ++- stdlib/2and3/_typeshed/__init__.pyi | 7 ++++++- stdlib/2and3/builtins.pyi | 3 ++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/stdlib/2/__builtin__.pyi b/stdlib/2/__builtin__.pyi index ae98b2b0edad..c68a05d7ea7e 100644 --- a/stdlib/2/__builtin__.pyi +++ b/stdlib/2/__builtin__.pyi @@ -10,6 +10,7 @@ from _typeshed import ( OpenBinaryModeWriting, OpenTextMode, ReadableBuffer, + SupportsKeysAndGetItem, SupportsWrite, ) from abc import ABCMeta @@ -1001,7 +1002,7 @@ class dict(MutableMapping[_KT, _VT], Generic[_KT, _VT]): @overload def __init__(self, **kwargs: _VT) -> None: ... @overload - def __init__(self, map: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + def __init__(self, map: SupportsKeysAndGetItem[_KT, _VT], **kwargs: _VT) -> None: ... @overload def __init__(self, iterable: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... def __new__(cls: Type[_T1], *args: Any, **kwargs: Any) -> _T1: ... diff --git a/stdlib/2and3/_typeshed/__init__.pyi b/stdlib/2and3/_typeshed/__init__.pyi index 1236bbdd9c44..c66e380efe80 100644 --- a/stdlib/2and3/_typeshed/__init__.pyi +++ b/stdlib/2and3/_typeshed/__init__.pyi @@ -15,9 +15,10 @@ import array import mmap import sys -from typing import AbstractSet, Container, Protocol, Text, Tuple, TypeVar, Union +from typing import AbstractSet, Container, Iterable, Protocol, Text, Tuple, TypeVar, Union from typing_extensions import Literal +_KT = TypeVar("_KT") _KT_co = TypeVar("_KT_co", covariant=True) _KT_contra = TypeVar("_KT_contra", contravariant=True) _VT = TypeVar("_VT") @@ -30,6 +31,10 @@ _T_contra = TypeVar("_T_contra", contravariant=True) class SupportsItems(Protocol[_KT_co, _VT_co]): def items(self) -> AbstractSet[Tuple[_KT_co, _VT_co]]: ... +class SupportsKeysAndGetItem(Protocol[_KT, _VT_co]): + def keys(self) -> Iterable[_KT]: ... + def __getitem__(self, __k: _KT) -> _VT_co: ... + class SupportsGetItem(Container[_KT_contra], Protocol[_KT_contra, _VT_co]): def __getitem__(self, __k: _KT_contra) -> _VT_co: ... diff --git a/stdlib/2and3/builtins.pyi b/stdlib/2and3/builtins.pyi index ae98b2b0edad..c68a05d7ea7e 100644 --- a/stdlib/2and3/builtins.pyi +++ b/stdlib/2and3/builtins.pyi @@ -10,6 +10,7 @@ from _typeshed import ( OpenBinaryModeWriting, OpenTextMode, ReadableBuffer, + SupportsKeysAndGetItem, SupportsWrite, ) from abc import ABCMeta @@ -1001,7 +1002,7 @@ class dict(MutableMapping[_KT, _VT], Generic[_KT, _VT]): @overload def __init__(self, **kwargs: _VT) -> None: ... @overload - def __init__(self, map: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + def __init__(self, map: SupportsKeysAndGetItem[_KT, _VT], **kwargs: _VT) -> None: ... @overload def __init__(self, iterable: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... def __new__(cls: Type[_T1], *args: Any, **kwargs: Any) -> _T1: ...