From 9a4f5f23a4c690dc8954ec6a70ef858e08dfa46e Mon Sep 17 00:00:00 2001 From: Ivan Malison Date: Wed, 17 Sep 2014 04:10:05 -0700 Subject: [PATCH] Add before_record_response to Cassette and VCR. --- .gitignore | 2 ++ tests/unit/test_cassettes.py | 10 ++++++++++ vcr/cassette.py | 4 ++++ vcr/config.py | 5 +++++ 4 files changed, 21 insertions(+) diff --git a/.gitignore b/.gitignore index d0a4d9e..7805664 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ dist/ .coverage *.egg-info/ pytestdebug.log + +fixtures/ \ No newline at end of file diff --git a/tests/unit/test_cassettes.py b/tests/unit/test_cassettes.py index eb54909..518e510 100644 --- a/tests/unit/test_cassettes.py +++ b/tests/unit/test_cassettes.py @@ -118,3 +118,13 @@ def test_global_toggle(mock_reset, mock_install): function() mock_install.assert_called_once_with(mock.ANY) mock_reset.assert_called_once_with() + + +def test_before_record_response(): + before_record_response = mock.Mock(return_value='mutated') + cassette = Cassette('test', before_record_response=before_record_response) + cassette.append('req', 'res') + + before_record_response.assert_called_once_with('res') + assert cassette.responses[0] == 'mutated' + diff --git a/vcr/cassette.py b/vcr/cassette.py index 64a927b..bdbfeae 100644 --- a/vcr/cassette.py +++ b/vcr/cassette.py @@ -76,6 +76,7 @@ class Cassette(object): filter_headers=(), filter_query_parameters=(), before_record=None, + before_record_response=None, ignore_hosts=(), ignore_localhost=() ): @@ -85,6 +86,7 @@ class Cassette(object): self._filter_headers = filter_headers self._filter_query_parameters = filter_query_parameters self._before_record = before_record + self._before_record_response = before_record_response self._ignore_hosts = ignore_hosts if ignore_localhost: self._ignore_hosts = list(set( @@ -136,6 +138,8 @@ class Cassette(object): request = self._filter_request(request) if not request: return + if self._before_record_response: + response = self._before_record_response(response) self.data.append((request, response)) self.dirty = True diff --git a/vcr/config.py b/vcr/config.py index 1b868cd..9e5a80f 100644 --- a/vcr/config.py +++ b/vcr/config.py @@ -12,6 +12,7 @@ class VCR(object): filter_headers=[], filter_query_parameters=[], before_record=None, + before_record_response=None, match_on=[ 'method', 'scheme', @@ -46,6 +47,7 @@ class VCR(object): self.filter_headers = filter_headers self.filter_query_parameters = filter_query_parameters self.before_record = before_record + self.before_record_response = before_record_response self.ignore_hosts = ignore_hosts self.ignore_localhost = ignore_localhost @@ -95,6 +97,9 @@ class VCR(object): "before_record": kwargs.get( "before_record", self.before_record ), + "before_record_response": kwargs.get( + "before_record_response", self.before_record_response + ), "ignore_hosts": kwargs.get( 'ignore_hosts', self.ignore_hosts ),