From 736e519087fee9e4a4e633e0fbe58def62e76dbb Mon Sep 17 00:00:00 2001 From: Maksim Beliaev Date: Mon, 7 Feb 2022 21:49:16 +0100 Subject: [PATCH 1/6] remove readonly properties --- CHANGES | 3 +++ responses/__init__.py | 4 ---- responses/__init__.pyi | 2 -- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index 50f37ba9..8f0b63c3 100644 --- a/CHANGES +++ b/CHANGES @@ -8,6 +8,9 @@ * Added support for `async/await` functions. * `response_callback` is no longer executed on exceptions raised by failed `Response`s * An error is now raised when both `content_type` and `headers[content-type]` are provided as parameters. +* Removed `responses.target` and `responses.assert_all_requests_are_fired` since they are not + actual properties of the class instance. Use `responses.mock.target` and + `responses.mock.assert_all_requests_are_fired` instead. 0.18.0 diff --git a/responses/__init__.py b/responses/__init__.py index 549e652b..60db1d63 100644 --- a/responses/__init__.py +++ b/responses/__init__.py @@ -855,7 +855,6 @@ def assert_call_count(self, url, count): "add", "add_callback", "add_passthru", - "assert_all_requests_are_fired", "assert_call_count", "calls", "DELETE", @@ -873,7 +872,6 @@ def assert_call_count(self, url, count): "response_callback", "start", "stop", - "target", "upsert", ] @@ -881,7 +879,6 @@ def assert_call_count(self, url, count): add = _default_mock.add add_callback = _default_mock.add_callback add_passthru = _default_mock.add_passthru -assert_all_requests_are_fired = _default_mock.assert_all_requests_are_fired assert_call_count = _default_mock.assert_call_count calls = _default_mock.calls DELETE = _default_mock.DELETE @@ -899,5 +896,4 @@ def assert_call_count(self, url, count): response_callback = _default_mock.response_callback start = _default_mock.start stop = _default_mock.stop -target = _default_mock.target upsert = _default_mock.upsert diff --git a/responses/__init__.pyi b/responses/__init__.pyi index 8707f345..ba616b53 100644 --- a/responses/__init__.pyi +++ b/responses/__init__.pyi @@ -301,7 +301,6 @@ activate: _Activate add: _Add add_callback: _AddCallback add_passthru: _AddPassthru -assert_all_requests_are_fired: bool assert_call_count: Callable[[str, int], bool] calls: CallList DELETE: Literal["DELETE"] @@ -333,7 +332,6 @@ __all__ = [ "add", "add_callback", "add_passthru", - "assert_all_requests_are_fired", "assert_call_count", "calls", "DELETE", From 320a90567978cd896af2356c9a0e4f88702ad71e Mon Sep 17 00:00:00 2001 From: Maksim Beliaev Date: Mon, 7 Feb 2022 21:56:05 +0100 Subject: [PATCH 2/6] stub file --- responses/__init__.pyi | 2 -- 1 file changed, 2 deletions(-) diff --git a/responses/__init__.pyi b/responses/__init__.pyi index ba616b53..236d0460 100644 --- a/responses/__init__.pyi +++ b/responses/__init__.pyi @@ -320,7 +320,6 @@ reset: Callable[[], None] response_callback: Callable[[Any], Any] start: Callable[[], None] stop: Callable[..., None] -target: Any upsert: _Upsert __all__ = [ @@ -349,6 +348,5 @@ __all__ = [ "response_callback", "start", "stop", - "target", "upsert", ] From e1547bc30ae610025badbfd867bdd03a888d9361 Mon Sep 17 00:00:00 2001 From: Maksim Beliaev Date: Tue, 22 Feb 2022 17:07:11 +0100 Subject: [PATCH 3/6] CHANGES --- CHANGES | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 8f0b63c3..ccd05f33 100644 --- a/CHANGES +++ b/CHANGES @@ -8,9 +8,9 @@ * Added support for `async/await` functions. * `response_callback` is no longer executed on exceptions raised by failed `Response`s * An error is now raised when both `content_type` and `headers[content-type]` are provided as parameters. -* Removed `responses.target` and `responses.assert_all_requests_are_fired` since they are not - actual properties of the class instance. Use `responses.mock.target` and - `responses.mock.assert_all_requests_are_fired` instead. +* Deprecate `responses.target`, `responses.passthru_prefixes`, `responses.assert_all_requests_are_fired` + since they are not actual properties of the class instance. Use `responses.mock.target`, + `responses.mock.assert_all_requests_are_fired` and `responses.mock.passthru_prefixes` instead. 0.18.0 From ab03b025fca1b5ce02283ad0a78bce869e8a6423 Mon Sep 17 00:00:00 2001 From: Maksim Beliaev Date: Tue, 22 Feb 2022 17:08:23 +0100 Subject: [PATCH 4/6] revert --- responses/__init__.py | 4 ++++ responses/__init__.pyi | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/responses/__init__.py b/responses/__init__.py index 60db1d63..549e652b 100644 --- a/responses/__init__.py +++ b/responses/__init__.py @@ -855,6 +855,7 @@ def assert_call_count(self, url, count): "add", "add_callback", "add_passthru", + "assert_all_requests_are_fired", "assert_call_count", "calls", "DELETE", @@ -872,6 +873,7 @@ def assert_call_count(self, url, count): "response_callback", "start", "stop", + "target", "upsert", ] @@ -879,6 +881,7 @@ def assert_call_count(self, url, count): add = _default_mock.add add_callback = _default_mock.add_callback add_passthru = _default_mock.add_passthru +assert_all_requests_are_fired = _default_mock.assert_all_requests_are_fired assert_call_count = _default_mock.assert_call_count calls = _default_mock.calls DELETE = _default_mock.DELETE @@ -896,4 +899,5 @@ def assert_call_count(self, url, count): response_callback = _default_mock.response_callback start = _default_mock.start stop = _default_mock.stop +target = _default_mock.target upsert = _default_mock.upsert diff --git a/responses/__init__.pyi b/responses/__init__.pyi index 236d0460..8707f345 100644 --- a/responses/__init__.pyi +++ b/responses/__init__.pyi @@ -301,6 +301,7 @@ activate: _Activate add: _Add add_callback: _AddCallback add_passthru: _AddPassthru +assert_all_requests_are_fired: bool assert_call_count: Callable[[str, int], bool] calls: CallList DELETE: Literal["DELETE"] @@ -320,6 +321,7 @@ reset: Callable[[], None] response_callback: Callable[[Any], Any] start: Callable[[], None] stop: Callable[..., None] +target: Any upsert: _Upsert __all__ = [ @@ -331,6 +333,7 @@ __all__ = [ "add", "add_callback", "add_passthru", + "assert_all_requests_are_fired", "assert_call_count", "calls", "DELETE", @@ -348,5 +351,6 @@ __all__ = [ "response_callback", "start", "stop", + "target", "upsert", ] From a3d8f139d76b988a29bc84e799e87f63da82261a Mon Sep 17 00:00:00 2001 From: Maksim Beliaev Date: Wed, 23 Feb 2022 15:09:15 +0100 Subject: [PATCH 5/6] Deprecate `responses.assert_all_requests_are_fired`, `responses.passthru_prefixes`, `responses.target` --- CHANGES | 7 ++++--- responses/__init__.py | 26 ++++++++++++++++++++------ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/CHANGES b/CHANGES index ccd05f33..4130886b 100644 --- a/CHANGES +++ b/CHANGES @@ -8,9 +8,10 @@ * Added support for `async/await` functions. * `response_callback` is no longer executed on exceptions raised by failed `Response`s * An error is now raised when both `content_type` and `headers[content-type]` are provided as parameters. -* Deprecate `responses.target`, `responses.passthru_prefixes`, `responses.assert_all_requests_are_fired` - since they are not actual properties of the class instance. Use `responses.mock.target`, - `responses.mock.assert_all_requests_are_fired` and `responses.mock.passthru_prefixes` instead. +* Deprecate `responses.assert_all_requests_are_fired`, `responses.passthru_prefixes`, `responses.target` + since they are not actual properties of the class instance. + Use `responses.mock.assert_all_requests_are_fired`, + `responses.mock.passthru_prefixes`, `responses.mock.target` instead. 0.18.0 diff --git a/responses/__init__.py b/responses/__init__.py index 549e652b..13da51e8 100644 --- a/responses/__init__.py +++ b/responses/__init__.py @@ -855,14 +855,14 @@ def assert_call_count(self, url, count): "add", "add_callback", "add_passthru", - "assert_all_requests_are_fired", + "_deprecated_assert_all_requests_are_fired", "assert_call_count", "calls", "DELETE", "GET", "HEAD", "OPTIONS", - "passthru_prefixes", + "_deprecated_passthru_prefixes", "PATCH", "POST", "PUT", @@ -873,22 +873,23 @@ def assert_call_count(self, url, count): "response_callback", "start", "stop", - "target", + "_deprecated_target", "upsert", ] +# expose only methods and/or read-only methods activate = _default_mock.activate add = _default_mock.add add_callback = _default_mock.add_callback add_passthru = _default_mock.add_passthru -assert_all_requests_are_fired = _default_mock.assert_all_requests_are_fired +_deprecated_assert_all_requests_are_fired = _default_mock.assert_all_requests_are_fired assert_call_count = _default_mock.assert_call_count calls = _default_mock.calls DELETE = _default_mock.DELETE GET = _default_mock.GET HEAD = _default_mock.HEAD OPTIONS = _default_mock.OPTIONS -passthru_prefixes = _default_mock.passthru_prefixes +_deprecated_passthru_prefixes = _default_mock.passthru_prefixes PATCH = _default_mock.PATCH POST = _default_mock.POST PUT = _default_mock.PUT @@ -899,5 +900,18 @@ def assert_call_count(self, url, count): response_callback = _default_mock.response_callback start = _default_mock.start stop = _default_mock.stop -target = _default_mock.target +_deprecated_target = _default_mock.target upsert = _default_mock.upsert + + +deprecated_names = ["assert_all_requests_are_fired", "passthru_prefixes", "target"] + + +def __getattr__(name): + if name in deprecated_names: + warn( + f"{name} is deprecated. Please use 'responses.mock.{name}", + DeprecationWarning, + ) + return globals()[f"_deprecated_{name}"] + raise AttributeError(f"module {__name__} has no attribute {name}") From aebda34d13f373e05ae0996ecfefa8b831f9d6de Mon Sep 17 00:00:00 2001 From: Maksim Beliaev Date: Wed, 23 Feb 2022 15:17:45 +0100 Subject: [PATCH 6/6] tests --- responses/test_responses.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/responses/test_responses.py b/responses/test_responses.py index 91c167a1..b562c868 100644 --- a/responses/test_responses.py +++ b/responses/test_responses.py @@ -555,6 +555,19 @@ def run(): assert_reset() +def test_deprecated_package_attributes(): + """Validates that deprecation warning is raised when package attributes are called.""" + # keep separate context manager to avoid leakage + with pytest.deprecated_call(): + responses.assert_all_requests_are_fired + + with pytest.deprecated_call(): + responses.passthru_prefixes + + with pytest.deprecated_call(): + responses.target + + def test_callback_deprecated_stream_argument(): with pytest.deprecated_call(): CallbackResponse(responses.GET, "url", lambda x: x, stream=False)