Skip to content

Commit 58f4b98

Browse files
committed
Merge pull request #191 from agriffis/trivial-fixes
Trivial cleanups and one bugfix
2 parents ae5580c + 3305f0c commit 58f4b98

File tree

4 files changed

+41
-25
lines changed

4 files changed

+41
-25
lines changed

tests/unit/test_vcr.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,32 @@ def before_record_cb(request):
7272
assert cassette.filter_request(Request('GET', base_path + 'get', '', {})) is not None
7373

7474

75+
def test_vcr_before_record_response_iterable():
76+
# Regression test for #191
77+
78+
request = Request('GET', '/', '', {})
79+
response = object() # just can't be None
80+
81+
# Prevent actually saving the cassette
82+
with mock.patch('vcr.cassette.save_cassette'):
83+
84+
# Baseline: non-iterable before_record_response should work
85+
mock_filter = mock.Mock()
86+
vcr = VCR(before_record_response=mock_filter)
87+
with vcr.use_cassette('test') as cassette:
88+
assert mock_filter.call_count == 0
89+
cassette.append(request, response)
90+
assert mock_filter.call_count == 1
91+
92+
# Regression test: iterable before_record_response should work too
93+
mock_filter = mock.Mock()
94+
vcr = VCR(before_record_response=(mock_filter,))
95+
with vcr.use_cassette('test') as cassette:
96+
assert mock_filter.call_count == 0
97+
cassette.append(request, response)
98+
assert mock_filter.call_count == 1
99+
100+
75101
@pytest.fixture
76102
def random_fixture():
77103
return 1

vcr/cassette.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ def use(cls, **kwargs):
164164
return CassetteContextDecorator.from_args(cls, **kwargs)
165165

166166
def __init__(self, path, serializer=yamlserializer, record_mode='once',
167-
match_on=(uri, method), before_record_request=None,
167+
match_on=(uri, method), before_record_request=None,
168168
before_record_response=None, custom_patches=(),
169169
inject=False):
170170

@@ -210,8 +210,7 @@ def append(self, request, response):
210210
request = self._before_record_request(request)
211211
if not request:
212212
return
213-
if self._before_record_response:
214-
response = self._before_record_response(response)
213+
response = self._before_record_response(response)
215214
self.data.append((request, response))
216215
self.dirty = True
217216

vcr/config.py

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,11 @@ def _get_serializer(self, serializer_name):
6767
try:
6868
serializer = self.serializers[serializer_name]
6969
except KeyError:
70-
print("Serializer {0} doesn't exist or isn't registered".format(
71-
serializer_name
72-
))
73-
raise KeyError
70+
raise KeyError(
71+
"Serializer {0} doesn't exist or isn't registered".format(
72+
serializer_name
73+
)
74+
)
7475
return serializer
7576

7677
def _get_matchers(self, matcher_names):
@@ -157,12 +158,10 @@ def _build_before_record_response(self, options):
157158
'before_record_response', self.before_record_response
158159
)
159160
filter_functions = []
160-
if before_record_response and not isinstance(before_record_response,
161-
collections.Iterable):
162-
before_record_response = (before_record_response,)
163-
for function in before_record_response:
164-
filter_functions.append(function)
165-
161+
if before_record_response:
162+
if not isinstance(before_record_response, collections.Iterable):
163+
before_record_response = (before_record_response,)
164+
filter_functions.extend(before_record_response)
166165
def before_record_response(response):
167166
for function in filter_functions:
168167
if response is None:
@@ -212,28 +211,23 @@ def _build_before_record_request(self, options):
212211
)
213212
)
214213

215-
hosts_to_ignore = list(ignore_hosts)
214+
hosts_to_ignore = set(ignore_hosts)
216215
if ignore_localhost:
217-
hosts_to_ignore.extend(('localhost', '0.0.0.0', '127.0.0.1'))
218-
216+
hosts_to_ignore.update(('localhost', '0.0.0.0', '127.0.0.1'))
219217
if hosts_to_ignore:
220-
hosts_to_ignore = set(hosts_to_ignore)
221218
filter_functions.append(self._build_ignore_hosts(hosts_to_ignore))
222219

223220
if before_record_request:
224221
if not isinstance(before_record_request, collections.Iterable):
225222
before_record_request = (before_record_request,)
226-
for function in before_record_request:
227-
filter_functions.append(function)
228-
223+
filter_functions.extend(before_record_request)
229224
def before_record_request(request):
230225
request = copy.copy(request)
231226
for function in filter_functions:
232227
if request is None:
233228
break
234229
request = function(request)
235230
return request
236-
237231
return before_record_request
238232

239233
@staticmethod

vcr/errors.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,5 @@ class CannotOverwriteExistingCassetteException(Exception):
33

44

55
class UnhandledHTTPRequestError(KeyError):
6-
'''
7-
Raised when a cassette does not c
8-
ontain the request we want
9-
'''
6+
"""Raised when a cassette does not contain the request we want."""
107
pass

0 commit comments

Comments
 (0)