From 0eda8ba482e12064b21238a513e502f0a032971e Mon Sep 17 00:00:00 2001 From: Aron Griffis Date: Fri, 28 Aug 2015 07:25:03 -0400 Subject: [PATCH] Default path_transformer=None. Fixes #199 --- tests/unit/test_cassettes.py | 7 +++++++ tests/unit/test_vcr.py | 22 ++++++++++++++++++++++ vcr/cassette.py | 2 +- vcr/config.py | 4 ++-- vcr/util.py | 5 +++-- 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/tests/unit/test_cassettes.py b/tests/unit/test_cassettes.py index e1e9fb9..413b154 100644 --- a/tests/unit/test_cassettes.py +++ b/tests/unit/test_cassettes.py @@ -245,6 +245,13 @@ def test_path_transformer_with_context_manager(): assert cassette._path == 'a' +def test_path_transformer_None(): + with Cassette.use( + path='a', path_transformer=None, + ) as cassette: + assert cassette._path == 'a' + + def test_func_path_generator(): def generator(function): return os.path.join(os.path.dirname(inspect.getfile(function)), diff --git a/tests/unit/test_vcr.py b/tests/unit/test_vcr.py index cbdcde4..6cbf21b 100644 --- a/tests/unit/test_vcr.py +++ b/tests/unit/test_vcr.py @@ -98,6 +98,28 @@ def test_vcr_before_record_response_iterable(): assert mock_filter.call_count == 1 +def test_vcr_path_transformer(): + # Regression test for #199 + + # Prevent actually saving the cassette + with mock.patch('vcr.cassette.save_cassette'): + + # Baseline: path should be unchanged + vcr = VCR() + with vcr.use_cassette('test') as cassette: + assert cassette._path == 'test' + + # Regression test: path_transformer=None should do the same. + vcr = VCR(path_transformer=None) + with vcr.use_cassette('test') as cassette: + assert cassette._path == 'test' + + # and it should still work with cassette_library_dir + vcr = VCR(cassette_library_dir='/foo') + with vcr.use_cassette('test') as cassette: + assert cassette._path == '/foo/test' + + @pytest.fixture def random_fixture(): return 1 diff --git a/vcr/cassette.py b/vcr/cassette.py index bc7410f..6dc6c40 100644 --- a/vcr/cassette.py +++ b/vcr/cassette.py @@ -75,7 +75,7 @@ class CassetteContextDecorator(object): lambda key, _: key in self._non_cassette_arguments, self._args_getter() ) - if 'path_transformer' in other_kwargs: + if other_kwargs.get('path_transformer'): transformer = other_kwargs['path_transformer'] cassette_kwargs['path'] = transformer(cassette_kwargs['path']) self.__finish = self._patch_generator(self.cls.load(**cassette_kwargs)) diff --git a/vcr/config.py b/vcr/config.py index e2389db..99e4cf7 100644 --- a/vcr/config.py +++ b/vcr/config.py @@ -23,7 +23,7 @@ class VCR(object): return path return ensure - def __init__(self, path_transformer=lambda x: x, before_record_request=None, + def __init__(self, path_transformer=None, before_record_request=None, custom_patches=(), filter_query_parameters=(), ignore_hosts=(), record_mode="once", ignore_localhost=False, filter_headers=(), before_record_response=None, filter_post_data_parameters=(), @@ -108,7 +108,7 @@ class VCR(object): matcher_names = kwargs.get('match_on', self.match_on) path_transformer = kwargs.get( 'path_transformer', - self.path_transformer or self.ensure_suffix('.yaml') + self.path_transformer ) func_path_generator = kwargs.get( 'func_path_generator', diff --git a/vcr/util.py b/vcr/util.py index 8c5bd94..b36ff75 100644 --- a/vcr/util.py +++ b/vcr/util.py @@ -81,8 +81,9 @@ def partition_dict(predicate, dictionary): def compose(*functions): def composed(incoming): res = incoming - for function in functions[::-1]: - res = function(res) + for function in reversed(functions): + if function: + res = function(res) return res return composed