From cee8fae65efc1d4557d1b2291963a729444a5f42 Mon Sep 17 00:00:00 2001 From: mgasvoda Date: Fri, 11 Aug 2017 15:37:57 -0400 Subject: [PATCH 1/6] Adding header name to exception Adds the name of the header to the invalid header exception raised on TypeError. --- requests/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requests/utils.py b/requests/utils.py index 1e4960d7..2104da8f 100644 --- a/requests/utils.py +++ b/requests/utils.py @@ -868,8 +868,8 @@ def check_header_validity(header): if not pat.match(value): raise InvalidHeader("Invalid return character or leading space in header: %s" % name) except TypeError: - raise InvalidHeader("Header value %s must be of type str or bytes, " - "not %s" % (value, type(value))) + raise InvalidHeader("Header %s value %s must be of type str or bytes, " + "not %s" % (name, value, type(value))) def urldefragauth(url): From ba21d149768909ffb63a5d5f9bd35f1f85a3371a Mon Sep 17 00:00:00 2001 From: mgasvoda Date: Fri, 11 Aug 2017 16:12:36 -0400 Subject: [PATCH 2/6] Improving message formatting --- requests/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requests/utils.py b/requests/utils.py index 2104da8f..23a87bc1 100644 --- a/requests/utils.py +++ b/requests/utils.py @@ -868,8 +868,8 @@ def check_header_validity(header): if not pat.match(value): raise InvalidHeader("Invalid return character or leading space in header: %s" % name) except TypeError: - raise InvalidHeader("Header %s value %s must be of type str or bytes, " - "not %s" % (name, value, type(value))) + raise InvalidHeader("Value for header {%s:%s} must be of type str or " + "bytes, not %s" % (name, value, type(value))) def urldefragauth(url): From 308343508b9b2e88e720477f0a31e752d246f3dd Mon Sep 17 00:00:00 2001 From: mgasvoda Date: Fri, 11 Aug 2017 16:14:13 -0400 Subject: [PATCH 3/6] Removing trailing whitespace --- requests/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requests/utils.py b/requests/utils.py index 23a87bc1..f7a36ad7 100644 --- a/requests/utils.py +++ b/requests/utils.py @@ -868,7 +868,7 @@ def check_header_validity(header): if not pat.match(value): raise InvalidHeader("Invalid return character or leading space in header: %s" % name) except TypeError: - raise InvalidHeader("Value for header {%s:%s} must be of type str or " + raise InvalidHeader("Value for header {%s:%s} must be of type str or " "bytes, not %s" % (name, value, type(value))) From e36083b89cf729a7dc12a3f505106141f4e58e02 Mon Sep 17 00:00:00 2001 From: mgasvoda Date: Fri, 11 Aug 2017 16:19:43 -0400 Subject: [PATCH 4/6] Adding space after colon --- requests/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requests/utils.py b/requests/utils.py index f7a36ad7..5c47de98 100644 --- a/requests/utils.py +++ b/requests/utils.py @@ -868,7 +868,7 @@ def check_header_validity(header): if not pat.match(value): raise InvalidHeader("Invalid return character or leading space in header: %s" % name) except TypeError: - raise InvalidHeader("Value for header {%s:%s} must be of type str or " + raise InvalidHeader("Value for header {%s: %s} must be of type str or " "bytes, not %s" % (name, value, type(value))) From cbc7c2d1c9ceaa0ae73a1da3ceb3b29ed278d785 Mon Sep 17 00:00:00 2001 From: mgasvoda Date: Fri, 11 Aug 2017 17:18:58 -0400 Subject: [PATCH 5/6] Modifying tests to include header name info --- tests/test_requests.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/test_requests.py b/tests/test_requests.py index 7ef6bfee..a2b2213f 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -1401,14 +1401,17 @@ class TestRequests: headers_list = {'baz': ['foo', 'bar']} # Test for int - with pytest.raises(InvalidHeader): + with pytest.raises(InvalidHeader) as excinfo: r = requests.get(httpbin('get'), headers=headers_int) + assert 'foo' in str(excinfo.value) # Test for dict - with pytest.raises(InvalidHeader): + with pytest.raises(InvalidHeader) as excinfo: r = requests.get(httpbin('get'), headers=headers_dict) + assert 'bar' in str(excinfo.value) # Test for list - with pytest.raises(InvalidHeader): + with pytest.raises(InvalidHeader) as excinfo: r = requests.get(httpbin('get'), headers=headers_list) + assert 'baz' in str(excinfo.value) def test_header_no_return_chars(self, httpbin): """Ensure that a header containing return character sequences raise an From d528106876ff0754edde90e081bdb28341cb3ae5 Mon Sep 17 00:00:00 2001 From: mgasvoda Date: Sat, 12 Aug 2017 10:23:45 -0400 Subject: [PATCH 6/6] Adding record to history --- HISTORY.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/HISTORY.rst b/HISTORY.rst index de6ba5c4..4d77d189 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -7,6 +7,7 @@ dev +++ **Improvements** +- Error messages for invalid headers now include the header name for easier debugging **Bugfixes**