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 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)