1
0
mirror of https://github.com/kevin1024/vcrpy.git synced 2025-12-10 09:35:34 +00:00

Merge pull request #280 from madninja/fix_aiohttp

Fix up to support aiohttp 1.x
This commit is contained in:
Kevin McCarthy
2016-11-08 10:15:07 -10:00
committed by GitHub

View File

@@ -4,9 +4,9 @@ from __future__ import absolute_import
import asyncio import asyncio
import functools import functools
import json import json
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 +34,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 +54,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}.")