From 7e8ae75c9556e43c5b36fadcd01615724604a618 Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Wed, 30 May 2018 11:55:27 +1200 Subject: [PATCH] Fix mock patch.dict stub and add mock stub The dict stub was referring to an instance, not the type, leading to __call__ being considered when using as a decorator, rather than __init__. mock is a backport of the stdlib module and should be defined the same. --- stdlib/3/unittest/mock.pyi | 4 +- tests/check_consistent.py | 1 + third_party/2and3/mock.pyi | 181 +++++++++++++++++++++++++++++++++++++ 3 files changed, 184 insertions(+), 2 deletions(-) create mode 100644 third_party/2and3/mock.pyi diff --git a/stdlib/3/unittest/mock.pyi b/stdlib/3/unittest/mock.pyi index f4a91521e9d2..4b00913267f0 100644 --- a/stdlib/3/unittest/mock.pyi +++ b/stdlib/3/unittest/mock.pyi @@ -1,7 +1,7 @@ # Stubs for unittest.mock import sys -from typing import Any, Optional +from typing import Any, Optional, Type if sys.version_info >= (3, 3): FILTER_DIR = ... # type: Any @@ -111,7 +111,7 @@ if sys.version_info >= (3, 3): class _patcher: TEST_PREFIX = ... # type: str - dict = ... # type: _patch_dict + dict = ... # type: Type[_patch_dict] def __call__(self, target: Any, new: Optional[Any] = ..., spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> Any: ... def object(self, target: Any, attribute: str, new: Optional[Any] = ..., spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... def multiple(self, target: Any, spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> Any: ... diff --git a/tests/check_consistent.py b/tests/check_consistent.py index f01b5b25fb07..673c1c044944 100755 --- a/tests/check_consistent.py +++ b/tests/check_consistent.py @@ -13,6 +13,7 @@ {'stdlib/3/ntpath.pyi', 'stdlib/3/posixpath.pyi', 'stdlib/3/macpath.pyi', 'stdlib/3/posixpath.pyi'}, {'stdlib/3.4/enum.pyi', 'third_party/3/enum.pyi'}, {'stdlib/2/os/path.pyi', 'stdlib/3/os/path.pyi'}, + {'stdlib/3/unittest/mock.pyi', 'third_party/2and3/mock.pyi'}, ] def main(): diff --git a/third_party/2and3/mock.pyi b/third_party/2and3/mock.pyi new file mode 100644 index 000000000000..4b00913267f0 --- /dev/null +++ b/third_party/2and3/mock.pyi @@ -0,0 +1,181 @@ +# Stubs for unittest.mock + +import sys +from typing import Any, Optional, Type + +if sys.version_info >= (3, 3): + FILTER_DIR = ... # type: Any + + class _slotted: ... + + class _SentinelObject: + name = ... # type: Any + def __init__(self, name: Any) -> None: ... + + class _Sentinel: + def __init__(self) -> None: ... + def __getattr__(self, name: str) -> Any: ... + + sentinel = ... # type: Any + DEFAULT = ... # type: Any + + class _CallList(list): + def __contains__(self, value: Any) -> bool: ... + + class _MockIter: + obj = ... # type: Any + def __init__(self, obj: Any) -> None: ... + def __iter__(self) -> Any: ... + def __next__(self) -> Any: ... + + class Base: + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + + # TODO: Get rid of the # type: ignore below. + # It is currently required to shut up mypy when run with `--strict` + # or `--disallow-subclassing-any`. The `Any` base class is currently + # the only way to allow passing an instance of `Mock` to functions + # expecting other classes (as is Mock's purpose) + class NonCallableMock(Any): # type: ignore + def __new__(cls, *args: Any, **kw: Any) -> Any: ... + def __init__(self, spec: Optional[Any] = ..., wraps: Optional[Any] = ..., name: Optional[Any] = ..., spec_set: Optional[Any] = ..., parent: Optional[Any] = ..., _spec_state: Optional[Any] = ..., _new_name: Any = ..., _new_parent: Optional[Any] = ..., _spec_as_instance: Any = ..., _eat_self: Optional[Any] = ..., unsafe: Any = ..., **kwargs: Any) -> None: ... + def attach_mock(self, mock: Any, attribute: Any) -> Any: ... + def mock_add_spec(self, spec: Any, spec_set: Any = ...) -> Any: ... + return_value = ... # type: Any + __class__ = ... # type: type + called = ... # type: Any + call_count = ... # type: Any + call_args = ... # type: Any + call_args_list = ... # type: Any + mock_calls = ... # type: Any + side_effect = ... # type: Any + method_calls = ... # type: Any + def reset_mock(self, visited: Optional[bool] = ...) -> None: ... + def configure_mock(self, **kwargs: Any) -> None: ... + def __getattr__(self, name: Any) -> Any: ... + def __dir__(self) -> Any: ... + def __setattr__(self, name: Any, value: Any) -> None: ... + def __delattr__(self, name: Any) -> None: ... + def assert_not_called(_mock_self) -> None: ... + def assert_called_with(_mock_self, *args: Any, **kwargs: Any) -> None: ... + def assert_called_once_with(_mock_self, *args: Any, **kwargs: Any) -> None: ... + def assert_has_calls(self, calls: Any, any_order: bool = ...) -> None: ... + def assert_any_call(self, *args: Any, **kwargs: Any) -> None: ... + + class CallableMixin(Base): + side_effect = ... # type: Any + def __init__(self, spec: Optional[Any] = ..., side_effect: Optional[Any] = ..., return_value: Any = ..., wraps: Optional[Any] = ..., name: Optional[Any] = ..., spec_set: Optional[Any] = ..., parent: Optional[Any] = ..., _spec_state: Optional[Any] = ..., _new_name: Any = ..., _new_parent: Optional[Any] = ..., **kwargs: Any) -> None: ... + def __call__(_mock_self, *args: Any, **kwargs: Any) -> Any: ... + + class Mock(CallableMixin, NonCallableMock): + def __init__(self, spec: Any = ..., spec_set: Any = ..., side_effect: Any = ..., return_value: Any = ..., wraps: Any = ..., name: Any = ..., **kwargs: Any) -> None: ... + + class _patch: + attribute_name = ... # type: Any + getter = ... # type: Any + attribute = ... # type: Any + new = ... # type: Any + new_callable = ... # type: Any + spec = ... # type: Any + create = ... # type: bool + has_local = ... # type: Any + spec_set = ... # type: Any + autospec = ... # type: Any + kwargs = ... # type: Any + additional_patchers = ... # type: Any + def __init__(self, getter: Any, attribute: Any, new: Any, spec: Any, create: Any, spec_set: Any, autospec: Any, new_callable: Any, kwargs: Any) -> None: ... + def copy(self) -> Any: ... + def __call__(self, func: Any) -> Any: ... + def decorate_class(self, klass: Any) -> Any: ... + def decorate_callable(self, func: Any) -> Any: ... + def get_original(self) -> Any: ... + target = ... # type: Any + temp_original = ... # type: Any + is_local = ... # type: Any + def __enter__(self) -> Any: ... + def __exit__(self, *exc_info: Any) -> Any: ... + def start(self) -> Any: ... + def stop(self) -> Any: ... + + class _patch_dict: + in_dict = ... # type: Any + values = ... # type: Any + clear = ... # type: Any + def __init__(self, in_dict: Any, values: Any = ..., clear: Any = ..., **kwargs: Any) -> None: ... + def __call__(self, f: Any) -> Any: ... + def decorate_class(self, klass: Any) -> Any: ... + def __enter__(self) -> Any: ... + def __exit__(self, *args: Any) -> Any: ... + start = ... # type: Any + stop = ... # type: Any + + class _patcher: + TEST_PREFIX = ... # type: str + dict = ... # type: Type[_patch_dict] + def __call__(self, target: Any, new: Optional[Any] = ..., spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> Any: ... + def object(self, target: Any, attribute: str, new: Optional[Any] = ..., spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... + def multiple(self, target: Any, spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> Any: ... + def stopall(self) -> None: ... + + patch = ... # type: _patcher + + class MagicMixin: + def __init__(self, *args: Any, **kw: Any) -> None: ... + + class NonCallableMagicMock(MagicMixin, NonCallableMock): + def __init__(self) -> None: ... + def mock_add_spec(self, spec: Any, spec_set: Any = ...) -> Any: ... + + class MagicMock(MagicMixin, Mock): + def __init__(self, spec: Any = ..., spec_set: Any = ..., side_effect: Any = ..., return_value: Any = ..., wraps: Any = ..., name: Any = ..., **kwargs: Any) -> None: ... + def mock_add_spec(self, spec: Any, spec_set: Any = ...) -> Any: ... + + class MagicProxy: + name = ... # type: Any + parent = ... # type: Any + def __init__(self, name: Any, parent: Any) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def create_mock(self) -> Any: ... + def __get__(self, obj: Any, _type: Optional[Any] = ...) -> Any: ... + + class _ANY: + def __eq__(self, other: Any) -> bool: ... + def __ne__(self, other: Any) -> bool: ... + + ANY = ... # type: Any + + class _Call(tuple): + def __new__(cls, value: Any = ..., name: Optional[Any] = ..., parent: Optional[Any] = ..., two: bool = ..., from_kall: bool = ...) -> Any: ... + name = ... # type: Any + parent = ... # type: Any + from_kall = ... # type: Any + def __init__(self, value: Any = ..., name: Optional[Any] = ..., parent: Optional[Any] = ..., two: bool = ..., from_kall: bool = ...) -> None: ... + def __eq__(self, other: Any) -> bool: ... + __ne__ = ... # type: Any + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def __getattr__(self, attr: Any) -> Any: ... + def count(self, *args: Any, **kwargs: Any) -> Any: ... + def index(self, *args: Any, **kwargs: Any) -> Any: ... + def call_list(self) -> Any: ... + + call = ... # type: Any + + def create_autospec(spec: Any, spec_set: Any = ..., instance: Any = ..., _parent: Optional[Any] = ..., _name: Optional[Any] = ..., **kwargs: Any) -> Any: ... + + class _SpecState: + spec = ... # type: Any + ids = ... # type: Any + spec_set = ... # type: Any + parent = ... # type: Any + instance = ... # type: Any + name = ... # type: Any + def __init__(self, spec: Any, spec_set: Any = ..., parent: Optional[Any] = ..., name: Optional[Any] = ..., ids: Optional[Any] = ..., instance: Any = ...) -> None: ... + + def mock_open(mock: Optional[Any] = ..., read_data: Any = ...) -> Any: ... + + class PropertyMock(Mock): + def __get__(self, obj: Any, obj_type: Any) -> Any: ... + def __set__(self, obj: Any, val: Any) -> Any: ... + +if sys.version_info >= (3, 7): + def seal(mock: Any) -> None: ...