From f31be550bda568ed3b5e0ed20c65cd48349e4eae Mon Sep 17 00:00:00 2001 From: Keith Prickett Date: Tue, 17 Sep 2019 23:28:49 +0000 Subject: [PATCH] Rebase on master - Cleaned up fix to prevent additional nesting - Added unit test Fixes error: ``` > splits = [p.partition(b"=") for p in request.body.split(b"&")] E AttributeError: 'NoneType' object has no attribute 'split' ``` --- tests/unit/test_filters.py | 17 +++++++++++++++++ vcr/filters.py | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/tests/unit/test_filters.py b/tests/unit/test_filters.py index f217331..bfdde20 100644 --- a/tests/unit/test_filters.py +++ b/tests/unit/test_filters.py @@ -136,6 +136,23 @@ def test_replace_post_data_parameters(): assert request.body == b"one=keep&three=tada&four=SHOUT" +def test_replace_post_data_parameters_empty_body(): + # This test ensures replace_post_data_parameters doesn't throw exception when body is empty. + body = None + request = Request("POST", "http://google.com", body, {}) + replace_post_data_parameters( + request, + [ + ("two", None), + ("three", "tada"), + ("four", lambda key, value, request: value.upper()), + ("five", lambda key, value, request: None), + ("six", "doesntexist"), + ], + ) + assert request.body is None + + def test_remove_post_data_parameters(): # Test the backward-compatible API wrapper. body = b"id=secret&foo=bar" diff --git a/vcr/filters.py b/vcr/filters.py index 5267587..83af946 100644 --- a/vcr/filters.py +++ b/vcr/filters.py @@ -82,6 +82,10 @@ def replace_post_data_parameters(request, replacements): 3. A callable which accepts (key, value, request) and returns a string value or None. """ + if not request.body: + # Nothing to replace + return request + replacements = dict(replacements) if request.method == "POST" and not isinstance(request.body, BytesIO): if request.headers.get("Content-Type") == "application/json":