1
0
mirror of https://github.com/kevin1024/vcrpy.git synced 2025-12-09 01:03:24 +00:00

Fix up to support aiohttp 1.x

This commit is contained in:
Marc Nijdam
2016-11-07 10:07:08 -08:00
parent 1d9f8b5f7c
commit ff90190660

View File

@@ -6,7 +6,8 @@ import functools
import json import json
import urllib import urllib
from aiohttp import ClientResponse, helpers from aiohttp import ClientResponse
from yarl import URL
from vcr.request import Request from vcr.request import Request
@@ -34,36 +35,17 @@ def vcr_request(cassette, real_request):
headers = self._prepare_headers(headers) headers = self._prepare_headers(headers)
data = kwargs.get('data') data = kwargs.get('data')
params = kwargs.get('params') params = kwargs.get('params')
# INFO: Query join logic from
# https://github.com/KeepSafe/aiohttp/blob/b3eeedbc2f515ec2aa6e87ba129524c17b6fe4e3/aiohttp/client_reqrep.py#L167-L188
scheme, netloc, path, query, fragment = urllib.parse.urlsplit(url)
if not path:
path = '/'
# NOTICE: Not sure this is applicable here:
# if isinstance(params, collections.Mapping):
# params = list(params.items())
if params: if params:
if not isinstance(params, str): for k, v in params.items():
params = urllib.parse.urlencode(params) params[k] = str(v)
if query:
query = '%s&%s' % (query, params)
else:
query = params
request_path = urllib.parse.urlunsplit(('', '', helpers.requote_uri(path), request_url = URL(url).with_query(params)
query, fragment)) vcr_request = Request(method, str(request_url), data, headers)
request_url = urllib.parse.urlunsplit(
(scheme, netloc, request_path, '', ''))
vcr_request = Request(method, request_url, data, headers)
if cassette.can_play_response_for(vcr_request): if cassette.can_play_response_for(vcr_request):
vcr_response = cassette.play_response(vcr_request) vcr_response = cassette.play_response(vcr_request)
response = MockClientResponse(method, vcr_response.get('url')) response = MockClientResponse(method, URL(vcr_response.get('url')))
response.status = vcr_response['status']['code'] response.status = vcr_response['status']['code']
response.content = vcr_response['body']['string'] response.content = vcr_response['body']['string']
response.reason = vcr_response['status']['message'] response.reason = vcr_response['status']['message']
@@ -73,7 +55,7 @@ def vcr_request(cassette, real_request):
return response return response
if cassette.write_protected and cassette.filter_request(vcr_request): if cassette.write_protected and cassette.filter_request(vcr_request):
response = MockClientResponse(method, url) response = MockClientResponse(method, URL(url))
response.status = 599 response.status = 599
msg = ("No match for the request {!r} was found. Can't overwrite " msg = ("No match for the request {!r} was found. Can't overwrite "
"existing cassette {!r} in your current record mode {!r}.") "existing cassette {!r} in your current record mode {!r}.")