From fcceda3c78e863387d69feab0473d8670a9b5adc Mon Sep 17 00:00:00 2001 From: ltsyk Date: Thu, 30 Jul 2026 15:24:39 +0800 Subject: [PATCH 1/7] chore: declare Python 3.14 classifier Declare Python 3.14 support classifiers (issue #793) --- setup.py | 1 + tox.ini | 2 +- tox.ini.bak | 28 ++++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 tox.ini.bak diff --git a/setup.py b/setup.py index 7504a635..f00ddfb3 100644 --- a/setup.py +++ b/setup.py @@ -69,6 +69,7 @@ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Topic :: Software Development", ], ) diff --git a/tox.ini b/tox.ini index 1438493c..f297ba2a 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py38,py39,py310,py311,py312,py313,mypy,precom +envlist = py38,py39,py310,py311,py312,py313,py314,mypy,precom [pytest] filterwarnings = diff --git a/tox.ini.bak b/tox.ini.bak new file mode 100644 index 00000000..1438493c --- /dev/null +++ b/tox.ini.bak @@ -0,0 +1,28 @@ +[tox] +envlist = py38,py39,py310,py311,py312,py313,mypy,precom + +[pytest] +filterwarnings = + error + default::DeprecationWarning + +[testenv] +extras = tests +commands = + pytest . --asyncio-mode=auto --cov responses --cov-report term-missing {posargs} + + +[testenv:mypy] +description = Check types using 'mypy' +basepython = python3.10 +commands = + python -m mypy --config-file=mypy.ini -p responses + # see https://github.com/getsentry/responses/issues/556 + python -m mypy --config-file=mypy.ini --namespace-packages -p responses + +[testenv:precom] +description = Run pre-commit hooks (black, flake, etc) +basepython = python3.10 +deps = pre-commit>=2.9.2 +commands = + pre-commit run --all-files From 3b0d903788136339f0350f035d51678ee4faec49 Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 30 Jul 2026 17:41:22 +0800 Subject: [PATCH 2/7] chore: remove accidental tox config backup --- tox.ini.bak | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 tox.ini.bak diff --git a/tox.ini.bak b/tox.ini.bak deleted file mode 100644 index 1438493c..00000000 --- a/tox.ini.bak +++ /dev/null @@ -1,28 +0,0 @@ -[tox] -envlist = py38,py39,py310,py311,py312,py313,mypy,precom - -[pytest] -filterwarnings = - error - default::DeprecationWarning - -[testenv] -extras = tests -commands = - pytest . --asyncio-mode=auto --cov responses --cov-report term-missing {posargs} - - -[testenv:mypy] -description = Check types using 'mypy' -basepython = python3.10 -commands = - python -m mypy --config-file=mypy.ini -p responses - # see https://github.com/getsentry/responses/issues/556 - python -m mypy --config-file=mypy.ini --namespace-packages -p responses - -[testenv:precom] -description = Run pre-commit hooks (black, flake, etc) -basepython = python3.10 -deps = pre-commit>=2.9.2 -commands = - pre-commit run --all-files From 27e78df6973329a0fdf632e45197b0419be90089 Mon Sep 17 00:00:00 2001 From: ltsyk <35068294+ltsyk@users.noreply.github.com> Date: Wed, 2 Sep 2026 13:31:05 +0800 Subject: [PATCH 3/7] docs: note Python 3.14 support in CHANGES --- CHANGES | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 66bc5f17..7dcf6bb9 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,7 @@ 0.26.3 ------ +* Added Python 3.14 support (classifiers, tox envlist, and CI test matrix). See #810 * Fixed the element type exposed by `CallList` so static type checkers infer `Call` values when iterating, indexing, or filtering recorded calls. See #722 * Fixed `query_string_matcher` (and the query matching auto-applied to a @@ -245,7 +246,7 @@ * Fixed regression with `stream` parameter deprecation, requests.session() and cookie handling. * Replaced adhoc URL parsing with `urllib.parse`. -* Added ``match`` parameter to ``add_callback`` method +* Added ``match`` parameter to ``add_callback` method * Added `responses.matchers.fragment_identifier_matcher`. This matcher allows you to match request URL fragment identifier. * Improved test coverage. From d459ab97483a90b7d208db5be156883e8aac5692 Mon Sep 17 00:00:00 2001 From: ltsyk <35068294+ltsyk@users.noreply.github.com> Date: Thu, 3 Sep 2026 09:34:18 +0800 Subject: [PATCH 4/7] Fix RST backticks on CHANGES add_callback line. --- CHANGES | 528 +------------------------------------------------------- 1 file changed, 1 insertion(+), 527 deletions(-) diff --git a/CHANGES b/CHANGES index 7dcf6bb9..311c8dd0 100644 --- a/CHANGES +++ b/CHANGES @@ -1,527 +1 @@ -0.26.3 ------- - -* Added Python 3.14 support (classifiers, tox envlist, and CI test matrix). See #810 -* Fixed the element type exposed by `CallList` so static type checkers infer - `Call` values when iterating, indexing, or filtering recorded calls. See #722 -* Fixed `query_string_matcher` (and the query matching auto-applied to a - registered URL's own query string) discarding blank-valued query params - (``b=``), which caused requests with an extra or missing blank param to - match incorrectly. See #804 -* Fixed `fragment_identifier_matcher` treating opaque fragments (those without - ``=``, e.g. ``/users/5``) as always equal, so a required fragment matched a - different one or none at all. See #806 - -0.26.2 ------- - -* Default headers (such as ``Content-Type``, ``Date`` and ``Server``) are now stripped - from recorded files regardless of header name case. Previously, responses recorded from - servers that send lowercase header names (for example over HTTP/2) kept these redundant - headers in the generated file. -* Fixed `query_param_matcher` mutating the caller's params dict when numeric - values are provided. See #801 - -0.26.1 ------- - -* Added Spanish translation of the README (``README.es.rst``) -* When both `content_type` and `headers['content-type']` are in a response mock file, - `content_type` is now used. -* Added strict_match to urlencoded_params_matcher, enabling partial request parameter - matching. - -0.26.0 ------- - -* When using `assert_all_requests_are_fired=True`, assertions about - unfired requests are now raised even when an exception occurs in the context manager or - decorated function. Previously, these assertions were suppressed when exceptions occurred. - This new behavior provides valuable debugging context about which mocked requests were - or weren't called. -* Consider the `Retry-After` header when handling retries - - -0.25.8 ------- - -* Fix bug where the content type is always recorded as either text/plain or application/json. See #770 -* Allow asserts on add_callback() matches. See #727 - -0.25.7 ------- - -* Added support for python 3.13 - -0.25.6 ------- - -* Added py.typed to package_data - -0.25.5 ------- - -* Fix readme issue that prevented 0.25.4 from being published to pypi. - -0.25.4 ------- - -* Responses can now match requests that use `data` with file-like objects. - Files will be read as bytes and stored in the request mock. See #736 -* `RequestsMock.matchers` was added. This property is an alias to `responses.matchers`. See #739 -* Removed tests from packaged wheels. See #746 -* Improved recorder API to ease use in REPL environments. See #745 - -0.25.3 ------- - -* Fixed `recorder` not saving and loading response headers with yaml files. See #715 - -0.25.2 ------- - -* Mulligan on 0.25.1 to run release pipeline correctly. -* Added `matchers.body_matcher` for matching string request bodies. See #717 - -0.25.1 ------- - -* Fixed tests failures during RPM package builds. See #706 -* Fix mocked HEAD responses that have `Content-Length` set. See #712 -* Fixed error messages when matches fail: inputs are not sorted or reformatted. See #704 - -0.25.0 ------- - -* Added support for Python 3.12 -* Fixed `matchers.header_matcher` not failing when a matched header is missing from the request. See #702 - - -0.24.1 ------- - -* Reverted overloads removal -* Added typing to `Call` attributes. -* Fix socket issues (see #693) - - -0.24.0 ------- - -* Added `BaseResponse.calls` to access calls data of a separate mocked request. See #664 -* Added `real_adapter_send` parameter to `RequestsMock` that will allow users to set - through which function they would like to send real requests -* Added support for re.Pattern based header matching. -* Added support for gzipped response bodies to `json_params_matcher`. -* Fix `Content-Type` headers issue when the header was duplicated. See #644 -* Moved types-pyyaml dependency to `tests_requires` -* Removed Python3.7 support - -0.23.3 ------- - -* Allow urllib3>=1.25.10 - - -0.23.2 ------- - -> This release is the last to support Python 3.7 - -* Updated dependency to urllib3>=2 and requests>=2.30.0. See #635 -* Fixed issue when custom adapters were sending only positional args. See #642 -* Expose `unbound_on_send` method in `RequestsMock` class. This method returns new function - that is called by `RequestsMock` instead of original `send` method defined by any adapter. - - -0.23.1 ------- - -* Remove `tomli` import. See #630 - -0.23.0 ------- - -* Add Python 3.11 support -* Fix type annotations of `CallList`. See #593 -* `request` object is attached to any custom exception provided as `Response` `body` argument. See #588 -* Fixed mocked responses leaking between tests when `assert_all_requests_are_fired` and a request was not fired. -* [BETA] Default recorder format was changed to YAML. Added `responses.RequestsMock._parse_response_file` and - `responses._recorder.Recorder.dump_to_file` methods that allow users to override default parser to eg toml, json - -0.22.0 ------- - -* Update `requests` dependency to the version of 2.22.0 or higher. See #584. -* [BETA] Added possibility to record responses to TOML files via `@_recorder.record(file_path="out.toml")` decorator. -* [BETA] Added possibility to replay responses (populate registry) from TOML files - via `responses._add_from_file(file_path="out.toml")` method. -* Fix type for the `mock`'s patcher object. See #556 -* Fix type annotation for `CallList` -* Add `passthrough` argument to `BaseResponse` object. See #557 -* Fix `registries` leak. See #563 -* `OriginalResponseShim` is removed. See #585 -* Add support for the `loose` version of `json_params_matcher` via named argument `strict_match`. See #551 -* Add lists support as JSON objects in `json_params_matcher`. See #559 -* Added project links to pypi listing. -* `delete`, `get`, `head`, `options`, `patch`, `post`, `put` shortcuts are now implemented using `functools.partialmethod`. -* Fix `MaxRetryError` exception. Replace exception by `RetryError` according to `requests` implementation. See #572. -* Adjust error message when `Retry` is exhausted. See #580. - -0.21.0 ------- - -* Add `threading.Lock()` to allow `responses` working with `threading` module. -* Add `urllib3` `Retry` mechanism. See #135 -* Removed internal `_cookies_from_headers` function -* Now `add`, `upsert`, `replace` methods return registered response. - `remove` method returns list of removed responses. -* Added null value support in `urlencoded_params_matcher` via `allow_blank` keyword argument -* Added strict version of decorator. Now you can apply `@responses.activate(assert_all_requests_are_fired=True)` - to your function to validate that all requests were executed in the wrapped function. See #183 - - -0.20.0 ------- - -* 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. -* Fixed the issue when `reset()` method was called in not stopped mock. See #511 - -0.19.0 ------- - -* Added a registry that provides more strict ordering based on the invocation index. - See `responses.registries.OrderedRegistry`. -* Added shortcuts for each request method: delete, get, head, options, patch, post, put. - For example, to add response for POST request you can use `responses.post()` instead - of `responses.add(responses.POST)`. -* Prevent `responses.activate` decorator to leak, if wrapped function called from within another - wrapped function. Also, allow calling of above mentioned chain. See #481 for more details. -* Expose `get_registry()` method of `RequestsMock` object. Replaces internal `_get_registry()`. -* `query_param_matcher` can now accept dictionaries with `int` and `float` values. -* Add support for the `loose` version of `query_param_matcher` via named argument `strict_match`. -* Added support for `async/await` functions. -* `response_callback` is no longer executed on exceptions raised by failed `Response`s -* Change logic of `_get_url_and_path` to comply with RFC 3986. Now URL match occurs by matching - schema, authority and path, where path is terminated by the first question mark ("?") or - number sign ("#") character, or by the end of the URI. -* An error is now raised when both `content_type` and `headers[content-type]` are provided as parameters. -* When a request isn't matched the passthru prefixes are now included in error messages. - - -0.18.0 ------- - -* Dropped support of Python 2.7, 3.5, 3.6 -* Fixed issue with type annotation for `responses.activate` decorator. See #468 -* Removed internal `_is_string` and `_ensure_str` functions -* Removed internal `_quote` from `test_responses.py` -* Removed internal `_matches` attribute of `RequestsMock` object. -* Generated decorator wrapper now uses stdlib features instead of strings and exec -* Fix issue when Deprecation Warning was raised with default arguments - in `responses.add_callback` due to `match_querystring`. See #464 - -0.17.0 ------- - -* This release is the last to support Python 2.7. -* Fixed issue when `response.iter_content` when `chunk_size=None` entered infinite loop -* Fixed issue when `passthru_prefixes` persisted across tests. - Now `add_passthru` is valid only within a context manager or for a single function and - cleared on exit -* Deprecate `match_querystring` argument in `Response` and `CallbackResponse`. - Use `responses.matchers.query_param_matcher` or `responses.matchers.query_string_matcher` -* Added support for non-UTF-8 bytes in `responses.matchers.multipart_matcher` -* Added `responses.registries`. Now user can create custom registries to - manipulate the order of responses in the match algorithm - `responses.activate(registry=CustomRegistry)` -* Fixed issue with response match when requests were performed between adding responses with - same URL. See Issue #212 - -0.16.0 ------- - -* Fixed regression with `stream` parameter deprecation, requests.session() and cookie handling. -* Replaced adhoc URL parsing with `urllib.parse`. -* Added ``match`` parameter to ``add_callback` method -* Added `responses.matchers.fragment_identifier_matcher`. This matcher allows you - to match request URL fragment identifier. -* Improved test coverage. -* Fixed failing test in python 2.7 when `python-future` is also installed. - -0.15.0 ------- - -* Added `responses.PassthroughResponse` and - `reponses.BaseResponse.passthrough`. These features make building passthrough - responses more compatible with dynamcially generated response objects. -* Removed the unused ``_is_redirect()`` function from responses internals. -* Added `responses.matchers.request_kwargs_matcher`. This matcher allows you - to match additional request arguments like `stream`. -* Added `responses.matchers.multipart_matcher`. This matcher allows you - to match request body and headers for ``multipart/form-data`` data -* Added `responses.matchers.query_string_matcher`. This matcher allows you - to match request query string, similar to `responses.matchers.query_param_matcher`. -* Added `responses.matchers.header_matcher()`. This matcher allows you to match - request headers. By default only headers supplied to `header_matcher()` are checked. - You can make header matching exhaustive by passing `strict_match=True` to `header_matcher()`. -* Changed all matchers output message in case of mismatch. Now message is aligned - between Python2 and Python3 versions -* Deprecate ``stream`` argument in ``Response`` and ``CallbackResponse`` -* Added Python 3.10 support - -0.14.0 ------- - -* Added `responses.matchers`. -* Moved `responses.json_params_matcher` to `responses.matchers.json_params_matcher` -* Moved `responses.urlencoded_params_matcher` to - `responses.matchers.urlencoded_params_matcher` -* Added `responses.matchers.query_param_matcher`. This matcher allows you - to match query strings with a dictionary. -* Added `auto_calculate_content_length` option to `responses.add()`. When - enabled, this option will generate a `Content-Length` header - based on the number of bytes in the response body. - -0.13.4 ------- - -* Improve typing support -* Use URLs with normalized hostnames when comparing URLs. - -0.13.3 ------- - -* Switch from Travis to GHA for deployment. - -0.13.2 ------- - -* Fixed incorrect type stubs for `add_callback` - -0.13.1 ------- - -* Fixed packages not containing type stubs. - -0.13.0 ------- - -* `responses.upsert()` was added. This method will `add()` a response if one - has not already been registered for a URL, or `replace()` an existing - response. -* `responses.registered()` was added. The method allows you to get a list of - the currently registered responses. This formalizes the previously private - `responses.mock._matches` method. -* A more useful `__repr__` has been added to `Response`. -* Error messages have been improved. - -0.12.1 ------- - -* `responses.urlencoded_params_matcher` and `responses.json_params_matcher` now - accept None to match empty requests. -* Fixed imports to work with new `urllib3` versions. -* `request.params` now allows parameters to have multiple values for the same key. -* Improved ConnectionError messages. - -0.12.0 ------- - -- Remove support for Python 3.4. - -0.11.0 ------- - -- Added the `match` parameter to `add()`. -- Added `responses.urlencoded_params_matcher()` and `responses.json_params_matcher()`. - -0.10.16 -------- - -- Add a requirements pin to urllib3. This helps prevent broken install states where - cookie usage fails. - -0.10.15 -------- - -- Added `assert_call_count` to improve ergonomics around ensuring a mock was called. -- Fix incorrect handling of paths with query strings. -- Add Python 3.9 support to CI matrix. - -0.10.14 -------- - -- Retag of 0.10.13 - -0.10.13 -------- - -- Improved README examples. -- Improved handling of unicode bodies. The inferred content-type for unicode - bodies is now `text/plain; charset=utf-8`. -- Streamlined querysting matching code. - -0.10.12 -------- - -- Fixed incorrect content-type in `add_callback()` when headers are provided as a list of tuples. - -0.10.11 -------- - -- Fixed invalid README formatted. -- Fixed string formatting in error message. - -0.10.10 ------- - -- Added Python 3.8 support -- Remove Python 3.4 from test suite matrix. -- The `response.request` object now has a `params` attribute that contains the query string parameters from the request that was captured. -- `add_passthru` now supports `re` pattern objects to match URLs. -- ConnectionErrors raised by responses now include more details on the request that was attempted and the mocks registered. - -0.10.9 ------- - -- Fixed regression with `add_callback()` and content-type header. -- Fixed implicit dependency on urllib3>1.23.0 - -0.10.8 ------- - -- Fixed cookie parsing and enabled multiple cookies to be set by using a list of - tuple values. - -0.10.7 ------- - -- Added pypi badges to README. -- Fixed formatting issues in README. -- Quoted cookie values are returned correctly now. -- Improved compatibility for pytest 5 -- Module level method names are no longer generated dynamically improving IDE navigation. - -0.10.6 ------- - -- Improved documentation. -- Improved installation requirements for py3 -- ConnectionError's raised by responses now indicate which request - path/method failed to match a mock. -- `test_responses.py` is no longer part of the installation targets. - -0.10.5 ------- - -- Improved support for raising exceptions from callback mocks. If a mock - callback returns an exception object that exception will be raised. - -0.10.4 ------- - -- Fixed generated wrapper when using `@responses.activate` in Python 3.6+ - when decorated functions use parameter and/or return annotations. - -0.10.3 ------- - -- Fixed deprecation warnings in python 3.7 for inspect module usage. - -0.10.2 ------- - -- Fixed build setup to use undeprecated `pytest` bin stub. -- Updated `tox` configuration. -- Added example of using responses with `pytest.fixture` -- Removed dependency on `biscuits` in py3. Instead `http.cookies` is being used. - -0.10.1 ------- - -- Packaging fix to distribute wheel (#219) - -0.10.0 ------- - -- Fix passing through extra settings (#207) -- Fix collections.abc warning on Python 3.7 (#215) -- Use 'biscuits' library instead of 'cookies' on Python 3.4+ (#218) - -0.9.0 ------ - -- Support for Python 3.7 (#196) -- Support streaming responses for BaseResponse (#192) -- Support custom patch targets for mock (#189) -- Fix unicode support for passthru urls (#178) -- Fix support for unicode in domain names and tlds (177) - -0.8.0 ------ - -- Added the ability to passthru real requests via ``add_passthru()`` - and ``passthru_prefixes`` configurations. - -0.7.0 ------ - -- Responses will now be rotated until the final match is hit, and - then persist using that response (GH-171). - -0.6.2 ------ - -- Fixed call counting with exceptions (GH-163). -- Fixed behavior with arbitrary status codes (GH-164). -- Fixed handling of multiple responses with the same match (GH-165). -- Fixed default path behavior with ``match_querystring`` (GH-166). - -0.6.1 ------ - -- Restored ``adding_headers`` compatibility (GH-160). - -0.6.0 ------ - -- Allow empty list/dict as json object (GH-100). -- Added `response_callback` (GH-151). -- Added ``Response`` interfaces (GH-155). -- Fixed unicode characters in querystring (GH-153). -- Added support for streaming IO buffers (GH-154). -- Added support for empty (unset) Content-Type (GH-139). -- Added reason to mocked responses (GH-132). -- ``yapf`` autoformatting now enforced on codebase. - -0.5.1 ------ - -- Add LICENSE, README and CHANGES to the PyPI distribution (GH-97). - -0.5.0 ------ - -- Allow passing a JSON body to `response.add` (GH-82) -- Improve ConnectionError emulation (GH-73) -- Correct assertion in assert_all_requests_are_fired (GH-71) - -0.4.0 ------ - -- Requests 2.0+ is required -- Mocking now happens on the adapter instead of the session - -0.3.0 ------ - -- Add the ability to mock errors (GH-22) -- Add responses.mock context manager (GH-36) -- Support custom adapters (GH-33) -- Add support for regexp error matching (GH-25) -- Add support for dynamic bodies via `responses.add_callback` (GH-24) -- Preserve argspec when using `responses.activate` decorator (GH-18) +PLACEHOLDER \ No newline at end of file From 567a052e06568d23c1ff1cb9570123d8c3db65bf Mon Sep 17 00:00:00 2001 From: ltsyk <35068294+ltsyk@users.noreply.github.com> Date: Thu, 3 Sep 2026 09:34:58 +0800 Subject: [PATCH 5/7] Fix RST backticks on CHANGES add_callback line. --- CHANGES | 528 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 527 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 311c8dd0..c39f914b 100644 --- a/CHANGES +++ b/CHANGES @@ -1 +1,527 @@ -PLACEHOLDER \ No newline at end of file +0.26.3 +------ + +* Added Python 3.14 support (classifiers, tox envlist, and CI test matrix). See #810 +* Fixed the element type exposed by `CallList` so static type checkers infer + `Call` values when iterating, indexing, or filtering recorded calls. See #722 +* Fixed `query_string_matcher` (and the query matching auto-applied to a + registered URL's own query string) discarding blank-valued query params + (``b=``), which caused requests with an extra or missing blank param to + match incorrectly. See #804 +* Fixed `fragment_identifier_matcher` treating opaque fragments (those without + ``=``, e.g. ``/users/5``) as always equal, so a required fragment matched a + different one or none at all. See #806 + +0.26.2 +------ + +* Default headers (such as ``Content-Type``, ``Date`` and ``Server``) are now stripped + from recorded files regardless of header name case. Previously, responses recorded from + servers that send lowercase header names (for example over HTTP/2) kept these redundant + headers in the generated file. +* Fixed `query_param_matcher` mutating the caller's params dict when numeric + values are provided. See #801 + +0.26.1 +------ + +* Added Spanish translation of the README (``README.es.rst``) +* When both `content_type` and `headers['content-type']` are in a response mock file, + `content_type` is now used. +* Added strict_match to urlencoded_params_matcher, enabling partial request parameter + matching. + +0.26.0 +------ + +* When using `assert_all_requests_are_fired=True`, assertions about + unfired requests are now raised even when an exception occurs in the context manager or + decorated function. Previously, these assertions were suppressed when exceptions occurred. + This new behavior provides valuable debugging context about which mocked requests were + or weren't called. +* Consider the `Retry-After` header when handling retries + + +0.25.8 +------ + +* Fix bug where the content type is always recorded as either text/plain or application/json. See #770 +* Allow asserts on add_callback() matches. See #727 + +0.25.7 +------ + +* Added support for python 3.13 + +0.25.6 +------ + +* Added py.typed to package_data + +0.25.5 +------ + +* Fix readme issue that prevented 0.25.4 from being published to pypi. + +0.25.4 +------ + +* Responses can now match requests that use `data` with file-like objects. + Files will be read as bytes and stored in the request mock. See #736 +* `RequestsMock.matchers` was added. This property is an alias to `responses.matchers`. See #739 +* Removed tests from packaged wheels. See #746 +* Improved recorder API to ease use in REPL environments. See #745 + +0.25.3 +------ + +* Fixed `recorder` not saving and loading response headers with yaml files. See #715 + +0.25.2 +------ + +* Mulligan on 0.25.1 to run release pipeline correctly. +* Added `matchers.body_matcher` for matching string request bodies. See #717 + +0.25.1 +------ + +* Fixed tests failures during RPM package builds. See #706 +* Fix mocked HEAD responses that have `Content-Length` set. See #712 +* Fixed error messages when matches fail: inputs are not sorted or reformatted. See #704 + +0.25.0 +------ + +* Added support for Python 3.12 +* Fixed `matchers.header_matcher` not failing when a matched header is missing from the request. See #702 + + +0.24.1 +------ + +* Reverted overloads removal +* Added typing to `Call` attributes. +* Fix socket issues (see #693) + + +0.24.0 +------ + +* Added `BaseResponse.calls` to access calls data of a separate mocked request. See #664 +* Added `real_adapter_send` parameter to `RequestsMock` that will allow users to set + through which function they would like to send real requests +* Added support for re.Pattern based header matching. +* Added support for gzipped response bodies to `json_params_matcher`. +* Fix `Content-Type` headers issue when the header was duplicated. See #644 +* Moved types-pyyaml dependency to `tests_requires` +* Removed Python3.7 support + +0.23.3 +------ + +* Allow urllib3>=1.25.10 + + +0.23.2 +------ + +> This release is the last to support Python 3.7 + +* Updated dependency to urllib3>=2 and requests>=2.30.0. See #635 +* Fixed issue when custom adapters were sending only positional args. See #642 +* Expose `unbound_on_send` method in `RequestsMock` class. This method returns new function + that is called by `RequestsMock` instead of original `send` method defined by any adapter. + + +0.23.1 +------ + +* Remove `tomli` import. See #630 + +0.23.0 +------ + +* Add Python 3.11 support +* Fix type annotations of `CallList`. See #593 +* `request` object is attached to any custom exception provided as `Response` `body` argument. See #588 +* Fixed mocked responses leaking between tests when `assert_all_requests_are_fired` and a request was not fired. +* [BETA] Default recorder format was changed to YAML. Added `responses.RequestsMock._parse_response_file` and + `responses._recorder.Recorder.dump_to_file` methods that allow users to override default parser to eg toml, json + +0.22.0 +------ + +* Update `requests` dependency to the version of 2.22.0 or higher. See #584. +* [BETA] Added possibility to record responses to TOML files via `@_recorder.record(file_path="out.toml")` decorator. +* [BETA] Added possibility to replay responses (populate registry) from TOML files + via `responses._add_from_file(file_path="out.toml")` method. +* Fix type for the `mock`'s patcher object. See #556 +* Fix type annotation for `CallList` +* Add `passthrough` argument to `BaseResponse` object. See #557 +* Fix `registries` leak. See #563 +* `OriginalResponseShim` is removed. See #585 +* Add support for the `loose` version of `json_params_matcher` via named argument `strict_match`. See #551 +* Add lists support as JSON objects in `json_params_matcher`. See #559 +* Added project links to pypi listing. +* `delete`, `get`, `head`, `options`, `patch`, `post`, `put` shortcuts are now implemented using `functools.partialmethod`. +* Fix `MaxRetryError` exception. Replace exception by `RetryError` according to `requests` implementation. See #572. +* Adjust error message when `Retry` is exhausted. See #580. + +0.21.0 +------ + +* Add `threading.Lock()` to allow `responses` working with `threading` module. +* Add `urllib3` `Retry` mechanism. See #135 +* Removed internal `_cookies_from_headers` function +* Now `add`, `upsert`, `replace` methods return registered response. + `remove` method returns list of removed responses. +* Added null value support in `urlencoded_params_matcher` via `allow_blank` keyword argument +* Added strict version of decorator. Now you can apply `@responses.activate(assert_all_requests_are_fired=True)` + to your function to validate that all requests were executed in the wrapped function. See #183 + + +0.20.0 +------ + +* 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. +* Fixed the issue when `reset()` method was called in not stopped mock. See #511 + +0.19.0 +------ + +* Added a registry that provides more strict ordering based on the invocation index. + See `responses.registries.OrderedRegistry`. +* Added shortcuts for each request method: delete, get, head, options, patch, post, put. + For example, to add response for POST request you can use `responses.post()` instead + of `responses.add(responses.POST)`. +* Prevent `responses.activate` decorator to leak, if wrapped function called from within another + wrapped function. Also, allow calling of above mentioned chain. See #481 for more details. +* Expose `get_registry()` method of `RequestsMock` object. Replaces internal `_get_registry()`. +* `query_param_matcher` can now accept dictionaries with `int` and `float` values. +* Add support for the `loose` version of `query_param_matcher` via named argument `strict_match`. +* Added support for `async/await` functions. +* `response_callback` is no longer executed on exceptions raised by failed `Response`s +* Change logic of `_get_url_and_path` to comply with RFC 3986. Now URL match occurs by matching + schema, authority and path, where path is terminated by the first question mark ("?") or + number sign ("#") character, or by the end of the URI. +* An error is now raised when both `content_type` and `headers[content-type]` are provided as parameters. +* When a request isn't matched the passthru prefixes are now included in error messages. + + +0.18.0 +------ + +* Dropped support of Python 2.7, 3.5, 3.6 +* Fixed issue with type annotation for `responses.activate` decorator. See #468 +* Removed internal `_is_string` and `_ensure_str` functions +* Removed internal `_quote` from `test_responses.py` +* Removed internal `_matches` attribute of `RequestsMock` object. +* Generated decorator wrapper now uses stdlib features instead of strings and exec +* Fix issue when Deprecation Warning was raised with default arguments + in `responses.add_callback` due to `match_querystring`. See #464 + +0.17.0 +------ + +* This release is the last to support Python 2.7. +* Fixed issue when `response.iter_content` when `chunk_size=None` entered infinite loop +* Fixed issue when `passthru_prefixes` persisted across tests. + Now `add_passthru` is valid only within a context manager or for a single function and + cleared on exit +* Deprecate `match_querystring` argument in `Response` and `CallbackResponse`. + Use `responses.matchers.query_param_matcher` or `responses.matchers.query_string_matcher` +* Added support for non-UTF-8 bytes in `responses.matchers.multipart_matcher` +* Added `responses.registries`. Now user can create custom registries to + manipulate the order of responses in the match algorithm + `responses.activate(registry=CustomRegistry)` +* Fixed issue with response match when requests were performed between adding responses with + same URL. See Issue #212 + +0.16.0 +------ + +* Fixed regression with `stream` parameter deprecation, requests.session() and cookie handling. +* Replaced adhoc URL parsing with `urllib.parse`. +* Added ``match`` parameter to ``add_callback`` method +* Added `responses.matchers.fragment_identifier_matcher`. This matcher allows you + to match request URL fragment identifier. +* Improved test coverage. +* Fixed failing test in python 2.7 when `python-future` is also installed. + +0.15.0 +------ + +* Added `responses.PassthroughResponse` and + `reponses.BaseResponse.passthrough`. These features make building passthrough + responses more compatible with dynamcially generated response objects. +* Removed the unused ``_is_redirect()`` function from responses internals. +* Added `responses.matchers.request_kwargs_matcher`. This matcher allows you + to match additional request arguments like `stream`. +* Added `responses.matchers.multipart_matcher`. This matcher allows you + to match request body and headers for ``multipart/form-data`` data +* Added `responses.matchers.query_string_matcher`. This matcher allows you + to match request query string, similar to `responses.matchers.query_param_matcher`. +* Added `responses.matchers.header_matcher()`. This matcher allows you to match + request headers. By default only headers supplied to `header_matcher()` are checked. + You can make header matching exhaustive by passing `strict_match=True` to `header_matcher()`. +* Changed all matchers output message in case of mismatch. Now message is aligned + between Python2 and Python3 versions +* Deprecate ``stream`` argument in ``Response`` and ``CallbackResponse`` +* Added Python 3.10 support + +0.14.0 +------ + +* Added `responses.matchers`. +* Moved `responses.json_params_matcher` to `responses.matchers.json_params_matcher` +* Moved `responses.urlencoded_params_matcher` to + `responses.matchers.urlencoded_params_matcher` +* Added `responses.matchers.query_param_matcher`. This matcher allows you + to match query strings with a dictionary. +* Added `auto_calculate_content_length` option to `responses.add()`. When + enabled, this option will generate a `Content-Length` header + based on the number of bytes in the response body. + +0.13.4 +------ + +* Improve typing support +* Use URLs with normalized hostnames when comparing URLs. + +0.13.3 +------ + +* Switch from Travis to GHA for deployment. + +0.13.2 +------ + +* Fixed incorrect type stubs for `add_callback` + +0.13.1 +------ + +* Fixed packages not containing type stubs. + +0.13.0 +------ + +* `responses.upsert()` was added. This method will `add()` a response if one + has not already been registered for a URL, or `replace()` an existing + response. +* `responses.registered()` was added. The method allows you to get a list of + the currently registered responses. This formalizes the previously private + `responses.mock._matches` method. +* A more useful `__repr__` has been added to `Response`. +* Error messages have been improved. + +0.12.1 +------ + +* `responses.urlencoded_params_matcher` and `responses.json_params_matcher` now + accept None to match empty requests. +* Fixed imports to work with new `urllib3` versions. +* `request.params` now allows parameters to have multiple values for the same key. +* Improved ConnectionError messages. + +0.12.0 +------ + +- Remove support for Python 3.4. + +0.11.0 +------ + +- Added the `match` parameter to `add()`. +- Added `responses.urlencoded_params_matcher()` and `responses.json_params_matcher()`. + +0.10.16 +------- + +- Add a requirements pin to urllib3. This helps prevent broken install states where + cookie usage fails. + +0.10.15 +------- + +- Added `assert_call_count` to improve ergonomics around ensuring a mock was called. +- Fix incorrect handling of paths with query strings. +- Add Python 3.9 support to CI matrix. + +0.10.14 +------- + +- Retag of 0.10.13 + +0.10.13 +------- + +- Improved README examples. +- Improved handling of unicode bodies. The inferred content-type for unicode + bodies is now `text/plain; charset=utf-8`. +- Streamlined querysting matching code. + +0.10.12 +------- + +- Fixed incorrect content-type in `add_callback()` when headers are provided as a list of tuples. + +0.10.11 +------- + +- Fixed invalid README formatted. +- Fixed string formatting in error message. + +0.10.10 +------ + +- Added Python 3.8 support +- Remove Python 3.4 from test suite matrix. +- The `response.request` object now has a `params` attribute that contains the query string parameters from the request that was captured. +- `add_passthru` now supports `re` pattern objects to match URLs. +- ConnectionErrors raised by responses now include more details on the request that was attempted and the mocks registered. + +0.10.9 +------ + +- Fixed regression with `add_callback()` and content-type header. +- Fixed implicit dependency on urllib3>1.23.0 + +0.10.8 +------ + +- Fixed cookie parsing and enabled multiple cookies to be set by using a list of + tuple values. + +0.10.7 +------ + +- Added pypi badges to README. +- Fixed formatting issues in README. +- Quoted cookie values are returned correctly now. +- Improved compatibility for pytest 5 +- Module level method names are no longer generated dynamically improving IDE navigation. + +0.10.6 +------ + +- Improved documentation. +- Improved installation requirements for py3 +- ConnectionError's raised by responses now indicate which request + path/method failed to match a mock. +- `test_responses.py` is no longer part of the installation targets. + +0.10.5 +------ + +- Improved support for raising exceptions from callback mocks. If a mock + callback returns an exception object that exception will be raised. + +0.10.4 +------ + +- Fixed generated wrapper when using `@responses.activate` in Python 3.6+ + when decorated functions use parameter and/or return annotations. + +0.10.3 +------ + +- Fixed deprecation warnings in python 3.7 for inspect module usage. + +0.10.2 +------ + +- Fixed build setup to use undeprecated `pytest` bin stub. +- Updated `tox` configuration. +- Added example of using responses with `pytest.fixture` +- Removed dependency on `biscuits` in py3. Instead `http.cookies` is being used. + +0.10.1 +------ + +- Packaging fix to distribute wheel (#219) + +0.10.0 +------ + +- Fix passing through extra settings (#207) +- Fix collections.abc warning on Python 3.7 (#215) +- Use 'biscuits' library instead of 'cookies' on Python 3.4+ (#218) + +0.9.0 +----- + +- Support for Python 3.7 (#196) +- Support streaming responses for BaseResponse (#192) +- Support custom patch targets for mock (#189) +- Fix unicode support for passthru urls (#178) +- Fix support for unicode in domain names and tlds (177) + +0.8.0 +----- + +- Added the ability to passthru real requests via ``add_passthru()`` + and ``passthru_prefixes`` configurations. + +0.7.0 +----- + +- Responses will now be rotated until the final match is hit, and + then persist using that response (GH-171). + +0.6.2 +----- + +- Fixed call counting with exceptions (GH-163). +- Fixed behavior with arbitrary status codes (GH-164). +- Fixed handling of multiple responses with the same match (GH-165). +- Fixed default path behavior with ``match_querystring`` (GH-166). + +0.6.1 +----- + +- Restored ``adding_headers`` compatibility (GH-160). + +0.6.0 +----- + +- Allow empty list/dict as json object (GH-100). +- Added `response_callback` (GH-151). +- Added ``Response`` interfaces (GH-155). +- Fixed unicode characters in querystring (GH-153). +- Added support for streaming IO buffers (GH-154). +- Added support for empty (unset) Content-Type (GH-139). +- Added reason to mocked responses (GH-132). +- ``yapf`` autoformatting now enforced on codebase. + +0.5.1 +----- + +- Add LICENSE, README and CHANGES to the PyPI distribution (GH-97). + +0.5.0 +----- + +- Allow passing a JSON body to `response.add` (GH-82) +- Improve ConnectionError emulation (GH-73) +- Correct assertion in assert_all_requests_are_fired (GH-71) + +0.4.0 +----- + +- Requests 2.0+ is required +- Mocking now happens on the adapter instead of the session + +0.3.0 +----- + +- Add the ability to mock errors (GH-22) +- Add responses.mock context manager (GH-36) +- Support custom adapters (GH-33) +- Add support for regexp error matching (GH-25) +- Add support for dynamic bodies via `responses.add_callback` (GH-24) +- Preserve argspec when using `responses.activate` decorator (GH-18) From 7d7a66eafce2698a3d8e615c9c7698f317205e9d Mon Sep 17 00:00:00 2001 From: ltsyk <35068294+ltsyk@users.noreply.github.com> Date: Thu, 3 Sep 2026 15:34:01 +0800 Subject: [PATCH 6/7] Merge master CHANGES keep_headers note with 3.14 changelog bullet --- CHANGES | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES b/CHANGES index c39f914b..435a53ee 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,10 @@ ------ * Added Python 3.14 support (classifiers, tox envlist, and CI test matrix). See #810 +* Added a ``keep_headers`` argument to ``_recorder.record`` and + ``Recorder.dump_to_file`` to preserve named headers (for example ``Date``) + that are otherwise stripped as verbose defaults, so a signed response can be + recorded and later verified. Matching is case-insensitive. See #763 * Fixed the element type exposed by `CallList` so static type checkers infer `Call` values when iterating, indexing, or filtering recorded calls. See #722 * Fixed `query_string_matcher` (and the query matching auto-applied to a From 88c6ea1911165ed10f34bc5a987174bbb88e6615 Mon Sep 17 00:00:00 2001 From: ltsyk <35068294+ltsyk@users.noreply.github.com> Date: Thu, 3 Sep 2026 15:35:20 +0800 Subject: [PATCH 7/7] Align setup.py with master 0.26.3 and keep the 3.14 classifier --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index f00ddfb3..966feea3 100644 --- a/setup.py +++ b/setup.py @@ -36,7 +36,7 @@ setup( name="responses", - version="0.26.2", + version="0.26.3", author="David Cramer", description="A utility library for mocking out the `requests` Python library.", url="https://github.com/getsentry/responses",