From 1e7080055d2b5bcf5e0377e70e3448898eaacf72 Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Fri, 27 Jan 2017 20:13:32 -0800 Subject: [PATCH] ChainMap fixes - It didn't exist before 3.3 (https://docs.python.org/3/library/collections.html#chainmap-objects) - It's not a subclass of dict --- stdlib/2/collections.pyi | 14 -------------- stdlib/3/collections/__init__.pyi | 21 +++++++++++---------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/stdlib/2/collections.pyi b/stdlib/2/collections.pyi index 18bfdfcd478e..c2f0af268841 100644 --- a/stdlib/2/collections.pyi +++ b/stdlib/2/collections.pyi @@ -92,17 +92,3 @@ class defaultdict(Dict[_KT, _VT], Generic[_KT, _VT]): def __init__(self, default_factory: Callable[[], _VT], iterable: Iterable[Tuple[_KT, _VT]]) -> None: ... def __missing__(self, key: _KT) -> _VT: ... - -class ChainMap(Dict[_KT, _VT], Generic[_KT, _VT]): - @overload - def __init__(self) -> None: ... - @overload - def __init__(self, *maps: Mapping[_KT, _VT]) -> None: ... - - @property - def maps(self) -> List[Mapping[_KT, _VT]]: ... - - def new_child(self, m: Mapping[_KT, _VT] = ...) -> ChainMap[_KT, _VT]: ... - - @property - def parents(self) -> ChainMap[_KT, _VT]: ... diff --git a/stdlib/3/collections/__init__.pyi b/stdlib/3/collections/__init__.pyi index 58809f85e379..5cb89f7a3aa1 100644 --- a/stdlib/3/collections/__init__.pyi +++ b/stdlib/3/collections/__init__.pyi @@ -166,16 +166,17 @@ class defaultdict(Dict[_KT, _VT], Generic[_KT, _VT]): def __missing__(self, key: _KT) -> _VT: ... # TODO __reversed__ -class ChainMap(Dict[_KT, _VT], Generic[_KT, _VT]): - @overload - def __init__(self) -> None: ... - @overload - def __init__(self, *maps: Mapping[_KT, _VT]) -> None: ... +if sys.version_info >= (3, 3): + class ChainMap(MutableMapping[_KT, _VT], Generic[_KT, _VT]): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, *maps: Mapping[_KT, _VT]) -> None: ... - @property - def maps(self) -> List[Mapping[_KT, _VT]]: ... + @property + def maps(self) -> List[Mapping[_KT, _VT]]: ... - def new_child(self, m: Mapping[_KT, _VT] = ...) -> ChainMap[_KT, _VT]: ... + def new_child(self, m: Mapping[_KT, _VT] = ...) -> ChainMap[_KT, _VT]: ... - @property - def parents(self) -> ChainMap[_KT, _VT]: ... + @property + def parents(self) -> ChainMap[_KT, _VT]: ...