Skip to content
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/@tests/test_cases/builtins/check_dict.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
from typing import Any, Dict, Generic, Iterable, Mapping, TypeVar, Union
from typing_extensions import Self, assert_type

###################################################################
# Note: tests for `dict.update()` are in `check_MutableMapping.py`.
###################################################################

# These do follow `__init__` overloads order:
# mypy and pyright have different opinions about this one:
# mypy raises: 'Need type annotation for "bad"'
Expand Down
11 changes: 10 additions & 1 deletion stdlib/@tests/test_cases/typing/check_MutableMapping.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any, Union
from typing import Any, Hashable, Sequence, Union
from typing_extensions import assert_type


Expand Down Expand Up @@ -30,6 +30,15 @@ def check_update_method__str_key() -> None:
d.update([("", "")]) # type: ignore


def test_keywords_allowed_on_dict_update_where_key_type_is_str_supertype(
a: dict[object, Any], b: dict[Hashable, Any], c: dict[Sequence[str], Any], d: dict[str, Any]
) -> None:
a.update(keyword_args_are_accepted="whatever")
b.update(here_too="whooo")
c.update(and_here="hooray")
d.update(also_here="yay")


def check_setdefault_method() -> None:
d: dict[int, str] = {}
d2: dict[int, str | None] = {}
Expand Down
8 changes: 4 additions & 4 deletions stdlib/typing.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import collections # noqa: F401 # pyright: ignore[reportUnusedImport]
import sys
import typing_extensions
from _collections_abc import dict_items, dict_keys, dict_values
from _typeshed import IdentityFunction, ReadableBuffer, SupportsGetItemViewable, SupportsKeysAndGetItem, Viewable
from _typeshed import IdentityFunction, ReadableBuffer, SupportsGetItem, SupportsGetItemViewable, SupportsKeysAndGetItem, Viewable
from abc import ABCMeta, abstractmethod
from re import Match as Match, Pattern as Pattern
from types import (
Expand Down Expand Up @@ -801,13 +801,13 @@ class MutableMapping(Mapping[_KT, _VT]):
@overload
def update(self, m: SupportsKeysAndGetItem[_KT, _VT], /) -> None: ...
@overload
def update(self: Mapping[str, _VT], m: SupportsKeysAndGetItem[str, _VT], /, **kwargs: _VT) -> None: ...
def update(self: SupportsGetItem[str, _VT], m: SupportsKeysAndGetItem[str, _VT], /, **kwargs: _VT) -> None: ...
@overload
def update(self, m: Iterable[tuple[_KT, _VT]], /) -> None: ...
@overload
def update(self: Mapping[str, _VT], m: Iterable[tuple[str, _VT]], /, **kwargs: _VT) -> None: ...
def update(self: SupportsGetItem[str, _VT], m: Iterable[tuple[str, _VT]], /, **kwargs: _VT) -> None: ...
@overload
def update(self: Mapping[str, _VT], **kwargs: _VT) -> None: ...
def update(self: SupportsGetItem[str, _VT], **kwargs: _VT) -> None: ...

Text = str

Expand Down
6 changes: 3 additions & 3 deletions stubs/WebOb/webob/multidict.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from _typeshed import SupportsKeysAndGetItem
from _typeshed import SupportsGetItem, SupportsKeysAndGetItem
from _typeshed.wsgi import WSGIEnvironment
from collections.abc import Collection, Iterable, Iterator, MutableMapping
from typing import Literal, Protocol, TypeVar, overload, type_check_only
Expand Down Expand Up @@ -73,11 +73,11 @@ class MultiDict(MutableMapping[_KT, _VT]):
def pop(self, key: _KT, default: _T) -> _VT | _T: ...
def popitem(self) -> tuple[_KT, _VT]: ...
@overload # type: ignore[override]
def update(self: MultiDict[str, _VT], **kwargs: _VT) -> None: ...
def update(self: SupportsGetItem[str, _VT], **kwargs: _VT) -> None: ...
@overload
def update(self, m: Collection[tuple[_KT, _VT]], /) -> None: ...
@overload
def update(self: MultiDict[str, _VT], m: Collection[tuple[str, _VT]], /, **kwargs: _VT) -> None: ...
def update(self: SupportsGetItem[str, _VT], m: Collection[tuple[str, _VT]], /, **kwargs: _VT) -> None: ...
@overload
def extend(self, other: _SupportsItemsWithIterableResult[_KT, _VT]) -> None: ...
@overload
Expand Down
Loading