The function returns two list:
- the first one is the list of matchers names that have succeeded.
- the second is a list of tuples with the failed matchers names and the related assertion message like this ("matcher_name", "assertion_message").
If the second list is empty, it means that all the matchers have passed.
A matcher can now return other results than a boolean :
- An AssertionError exception meaning that the matcher failed, with the exception we get the assertion failure message.
- None, in case we do an assert in the matcher, meaning that the assertion has passed, the matcher is considered as a success then.
- Boolean that indicates if a matcher failed or not. If there is no match, a boolean does not give any clue what it is the differences compared to the assertion.
In versions of Python from 3.8 and forward, importing Mapping and
MutableMapping from the collections module will no longer work. This
change will try to import from the collections.abc module, which was
added in Python 3.3, and fall back to the collections module on older
versions of Python.
Matching on bodies uses urllib.parse.parse_qs(), which fails to handle
UTF-8+URLEncoded POST bodies when the input is `bytes` rather than `str`,
causing matching to fail..
Fixed this by always doing decode('ascii') on URLEncoded POST bodies first.
Aiohttp expects an awaitable instance to be returned from
`ClientSession._request` though `asyncio.coroutine` decorated function
do not implement `__await__`. By changing the syntax and dropping Python
3.4 support we fix this issue.
When no cassette exists, it's expected that the response returned, should be
the original, unchanged response. The response recorded in the cassette should be
that which is returned by the before_record_response callback.
But on subsequent requests/responses (when a cassette exists), the responses
returned should be exactly what is in the cassette.
resolves#355
Whilst working on the Reproducible Builds effort [0], we noticed
that vcrpy could not be built reproducibly.
This is due to the documentation including the absolute build path
via Python default arguments.
This was originally filed in Debian as #895269 [1].
[0] https://reproducible-builds.org/
[1] https://bugs.debian.org/895269
Signed-off-by: Chris Lamb <lamby@debian.org>
The new version of requests un-vendors urllib3, with a nifty hack:
https://github.com/kennethreitz/requests/blob/master/requests/packages.py
Unfortunately messing directly with sys.modules causes some weird
behavior that I don't entirely understand. Avoiding the extra import to
requests.packages as part of VCR's initialization seems to sidestep the
issue.
Closes#311