mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-11 18:06:10 +00:00
@@ -39,3 +39,17 @@ def test_ignore_localhost_and_httpbin(tmpdir, httpserver):
|
|||||||
urlopen('http://httpbin.org')
|
urlopen('http://httpbin.org')
|
||||||
urlopen(httpserver.url)
|
urlopen(httpserver.url)
|
||||||
assert len(cass) == 0
|
assert len(cass) == 0
|
||||||
|
|
||||||
|
def test_ignore_localhost_twice(tmpdir, httpserver):
|
||||||
|
httpserver.serve_content('Hello!')
|
||||||
|
cass_file = str(tmpdir.join('filter_qs.yaml'))
|
||||||
|
with vcr.use_cassette(cass_file, ignore_localhost=True) as cass:
|
||||||
|
urlopen(httpserver.url)
|
||||||
|
assert len(cass) == 0
|
||||||
|
urlopen('http://httpbin.org')
|
||||||
|
assert len(cass) == 1
|
||||||
|
with vcr.use_cassette(cass_file, ignore_localhost=True) as cass:
|
||||||
|
assert len(cass) == 1
|
||||||
|
urlopen(httpserver.url)
|
||||||
|
urlopen('http://httpbin.org')
|
||||||
|
assert len(cass) == 1
|
||||||
|
|||||||
@@ -80,15 +80,18 @@ class Cassette(ContextDecorator):
|
|||||||
return self.rewound and self.record_mode == 'once' or \
|
return self.rewound and self.record_mode == 'once' or \
|
||||||
self.record_mode == 'none'
|
self.record_mode == 'none'
|
||||||
|
|
||||||
def append(self, request, response):
|
def _filter_request(self, request):
|
||||||
'''Add a request, response pair to this cassette'''
|
return filter_request(
|
||||||
request = filter_request(
|
|
||||||
request=request,
|
request=request,
|
||||||
filter_headers=self._filter_headers,
|
filter_headers=self._filter_headers,
|
||||||
filter_query_parameters=self._filter_query_parameters,
|
filter_query_parameters=self._filter_query_parameters,
|
||||||
before_record=self._before_record,
|
before_record=self._before_record,
|
||||||
ignore_hosts=self._ignore_hosts
|
ignore_hosts=self._ignore_hosts
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def append(self, request, response):
|
||||||
|
'''Add a request, response pair to this cassette'''
|
||||||
|
request = self._filter_request(request)
|
||||||
if not request:
|
if not request:
|
||||||
return
|
return
|
||||||
self.data.append((request, response))
|
self.data.append((request, response))
|
||||||
@@ -99,19 +102,19 @@ class Cassette(ContextDecorator):
|
|||||||
internal API, returns an iterator with all responses matching
|
internal API, returns an iterator with all responses matching
|
||||||
the request.
|
the request.
|
||||||
"""
|
"""
|
||||||
request = filter_request(
|
request = self._filter_request(request)
|
||||||
request=request,
|
|
||||||
filter_headers=self._filter_headers,
|
|
||||||
filter_query_parameters=self._filter_query_parameters,
|
|
||||||
before_record=self._before_record,
|
|
||||||
ignore_hosts=self._ignore_hosts
|
|
||||||
)
|
|
||||||
if not request:
|
if not request:
|
||||||
return
|
return
|
||||||
for index, (stored_request, response) in enumerate(self.data):
|
for index, (stored_request, response) in enumerate(self.data):
|
||||||
if requests_match(request, stored_request, self._match_on):
|
if requests_match(request, stored_request, self._match_on):
|
||||||
yield index, response
|
yield index, response
|
||||||
|
|
||||||
|
def can_play_response_for(self, request):
|
||||||
|
request = self._filter_request(request)
|
||||||
|
return request and request in self and \
|
||||||
|
self.record_mode != 'all' and \
|
||||||
|
self.rewound
|
||||||
|
|
||||||
def play_response(self, request):
|
def play_response(self, request):
|
||||||
'''
|
'''
|
||||||
Get the response corresponding to a request, but only if it
|
Get the response corresponding to a request, but only if it
|
||||||
|
|||||||
@@ -204,9 +204,7 @@ class VCRConnection:
|
|||||||
'''Retrieve a the response'''
|
'''Retrieve a the response'''
|
||||||
# Check to see if the cassette has a response for this request. If so,
|
# Check to see if the cassette has a response for this request. If so,
|
||||||
# then return it
|
# then return it
|
||||||
if self._vcr_request in self.cassette and \
|
if self.cassette.can_play_response_for(self._vcr_request):
|
||||||
self.cassette.record_mode != "all" and \
|
|
||||||
self.cassette.rewound:
|
|
||||||
log.info(
|
log.info(
|
||||||
"Playing response for {0} from cassette".format(
|
"Playing response for {0} from cassette".format(
|
||||||
self._vcr_request
|
self._vcr_request
|
||||||
@@ -215,7 +213,7 @@ class VCRConnection:
|
|||||||
response = self.cassette.play_response(self._vcr_request)
|
response = self.cassette.play_response(self._vcr_request)
|
||||||
return VCRHTTPResponse(response)
|
return VCRHTTPResponse(response)
|
||||||
else:
|
else:
|
||||||
if self.cassette.write_protected:
|
if self.cassette.write_protected and self.cassette._filter_request(self._vcr_request):
|
||||||
raise CannotOverwriteExistingCassetteException(
|
raise CannotOverwriteExistingCassetteException(
|
||||||
"Can't overwrite existing cassette (%r) in "
|
"Can't overwrite existing cassette (%r) in "
|
||||||
"your current record mode (%r)."
|
"your current record mode (%r)."
|
||||||
@@ -264,9 +262,7 @@ class VCRConnection:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if hasattr(self, '_vcr_request') and \
|
if hasattr(self, '_vcr_request') and \
|
||||||
self._vcr_request in self.cassette and \
|
self.cassette.can_play_response_for(self._vcr_request):
|
||||||
self.cassette.record_mode != "all" and \
|
|
||||||
self.cassette.rewound:
|
|
||||||
# We already have a response we are going to play, don't
|
# We already have a response we are going to play, don't
|
||||||
# actually connect
|
# actually connect
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user