1
0
mirror of https://github.com/kevin1024/vcrpy.git synced 2025-12-09 17:15:35 +00:00

Serialize dict of lists, use dicts internally

There is a weird quirk in HTTP.  You can send the same header twice.
For this reason, headers are represented by a dict, with lists as the
values.  However, it appears that HTTPlib is completely incapable of
sending the same header twice.  This puts me in a weird position: I want
to be able to accurately represent HTTP headers in cassettes, but I
don't want the extra step of always having to do [0] in the general
case, i.e.  request.headers['key'][0]

In addition, some servers sometimes send the same header more than once,
and httplib *can* deal with this situation.

Futhermore, I wanted to keep the request and response cassette format as
similar as possible.

For this reason, in cassettes I keep a dict with lists as keys, but once
deserialized into VCR, I keep them as plain, naked dicts.
This commit is contained in:
Kevin McCarthy
2014-05-03 17:32:49 -10:00
parent 2ef5f9208a
commit 5e295e0603
4 changed files with 31 additions and 17 deletions

View File

@@ -6,11 +6,11 @@ def test_remove_headers():
headers = {'hello': ['goodbye'], 'secret': ['header']}
request = Request('GET', 'http://google.com', '', headers)
_remove_headers(request, ['secret'])
assert request.headers == {'hello': ['goodbye']}
assert request.headers == {'hello': 'goodbye'}
def test_remove_headers_empty():
headers = {'hello': ['goodbye'], 'secret': ['header']}
headers = {'hello': 'goodbye', 'secret': 'header'}
request = Request('GET', 'http://google.com', '', headers)
_remove_headers(request, [])
assert request.headers == headers

View File

@@ -11,16 +11,10 @@ def test_str():
def test_headers():
headers = {'X-Header1': ['h1'], 'X-Header2': 'h2'}
req = Request('GET', 'http://go.com/', '', headers)
assert req.headers == {'X-Header1': ['h1'], 'X-Header2': ['h2']}
assert req.headers == {'X-Header1': 'h1', 'X-Header2': 'h2'}
req.add_header('X-Header1', 'h11')
assert req.headers == {'X-Header1': ['h1', 'h11'], 'X-Header2': ['h2']}
def test_flat_headers_dict():
headers = {'X-Header1': ['h1', 'h11'], 'X-Header2': ['h2']}
req = Request('GET', 'http://go.com/', '', headers)
assert req.flat_headers_dict() == {'X-Header1': 'h1', 'X-Header2': 'h2'}
assert req.headers == {'X-Header1': 'h11', 'X-Header2': 'h2'}
@pytest.mark.parametrize("uri, expected_port", [