mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-09 01:03:24 +00:00
support allow_redirects option
This commit is contained in:
committed by
Kevin McCarthy
parent
8529c46f00
commit
f387950486
@@ -235,3 +235,21 @@ def test_relative_redirects(tmpdir, scheme, do_request):
|
|||||||
assert response.json()["url"].endswith("request")
|
assert response.json()["url"].endswith("request")
|
||||||
|
|
||||||
assert cassette.play_count == 3
|
assert cassette.play_count == 3
|
||||||
|
|
||||||
|
|
||||||
|
def test_redirect_wo_allow_redirects(do_request, yml):
|
||||||
|
url = "https://mockbin.org/redirect/308/5"
|
||||||
|
|
||||||
|
with vcr.use_cassette(yml):
|
||||||
|
response = do_request()("GET", url, allow_redirects=False)
|
||||||
|
|
||||||
|
assert str(response.url).endswith("308/5")
|
||||||
|
assert response.status_code == 308
|
||||||
|
|
||||||
|
with vcr.use_cassette(yml) as cassette:
|
||||||
|
response = do_request()("GET", url, allow_redirects=False)
|
||||||
|
|
||||||
|
assert str(response.url).endswith("308/5")
|
||||||
|
assert response.status_code == 308
|
||||||
|
|
||||||
|
assert cassette.play_count == 1
|
||||||
|
|||||||
@@ -70,10 +70,11 @@ def _make_vcr_request(httpx_request, **kwargs):
|
|||||||
|
|
||||||
def _shared_vcr_send(cassette, real_send, *args, **kwargs):
|
def _shared_vcr_send(cassette, real_send, *args, **kwargs):
|
||||||
real_request = args[1]
|
real_request = args[1]
|
||||||
|
|
||||||
vcr_request = _make_vcr_request(real_request, **kwargs)
|
vcr_request = _make_vcr_request(real_request, **kwargs)
|
||||||
|
|
||||||
if cassette.can_play_response_for(vcr_request):
|
if cassette.can_play_response_for(vcr_request):
|
||||||
return vcr_request, _play_responses(cassette, real_request, vcr_request, args[0])
|
return vcr_request, _play_responses(cassette, real_request, vcr_request, args[0], kwargs)
|
||||||
|
|
||||||
if cassette.write_protected and cassette.filter_request(vcr_request):
|
if cassette.write_protected and cassette.filter_request(vcr_request):
|
||||||
raise CannotOverwriteExistingCassetteException(cassette=cassette, failed_request=vcr_request)
|
raise CannotOverwriteExistingCassetteException(cassette=cassette, failed_request=vcr_request)
|
||||||
@@ -96,12 +97,13 @@ def _record_responses(cassette, vcr_request, real_response):
|
|||||||
return real_response
|
return real_response
|
||||||
|
|
||||||
|
|
||||||
def _play_responses(cassette, request, vcr_request, client):
|
def _play_responses(cassette, request, vcr_request, client, kwargs):
|
||||||
history = []
|
history = []
|
||||||
|
allow_redirects = kwargs.get("allow_redirects", True)
|
||||||
vcr_response = cassette.play_response(vcr_request)
|
vcr_response = cassette.play_response(vcr_request)
|
||||||
response = _from_serialized_response(request, vcr_response)
|
response = _from_serialized_response(request, vcr_response)
|
||||||
|
|
||||||
while 300 <= response.status_code <= 399:
|
while allow_redirects and 300 <= response.status_code <= 399:
|
||||||
next_url = response.headers.get("location")
|
next_url = response.headers.get("location")
|
||||||
if not next_url:
|
if not next_url:
|
||||||
break
|
break
|
||||||
|
|||||||
Reference in New Issue
Block a user