mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-10 01:25:34 +00:00
Store Headers as a List
This is a backwards-incompatible change that will store headers as a list rather than a dictionary. The reason being that you can have multiple values for a single header, and concatenating them together with commas can create an unparseable string (sometimes the header values can have commas in them)
This commit is contained in:
@@ -52,3 +52,20 @@ def test_flickr_should_respond_with_200(tmpdir):
|
|||||||
with vcr.use_cassette(testfile):
|
with vcr.use_cassette(testfile):
|
||||||
r = requests.post("http://api.flickr.com/services/upload")
|
r = requests.post("http://api.flickr.com/services/upload")
|
||||||
assert r.status_code == 200
|
assert r.status_code == 200
|
||||||
|
|
||||||
|
def x_test_zip_file(tmpdir):
|
||||||
|
# TODO: How do I make this pass?
|
||||||
|
zipfile = "http://www.colorado.edu/conflict/peace/download/peace_example.ZIP"
|
||||||
|
testfile = str(tmpdir.join('test.json'))
|
||||||
|
with vcr.use_cassette(testfile, serializer='json'):
|
||||||
|
r = requests.post(zipfile)
|
||||||
|
|
||||||
|
def test_cookies(tmpdir):
|
||||||
|
testfile = str(tmpdir.join('cookies.yml'))
|
||||||
|
with vcr.use_cassette(testfile):
|
||||||
|
s = requests.Session()
|
||||||
|
r1 = s.get("http://httpbin.org/cookies/set?k1=v1&k2=v2")
|
||||||
|
r2 = s.get("http://httpbin.org/cookies")
|
||||||
|
assert len(r2.json()['cookies']) == 2
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,14 @@ from cStringIO import StringIO
|
|||||||
from vcr.request import Request
|
from vcr.request import Request
|
||||||
|
|
||||||
|
|
||||||
|
def parse_headers(header_list):
|
||||||
|
headers = "".join(header_list) + "\r\n"
|
||||||
|
msg = HTTPMessage(StringIO(headers))
|
||||||
|
msg.fp.seek(0)
|
||||||
|
msg.readheaders()
|
||||||
|
return msg
|
||||||
|
|
||||||
|
|
||||||
class VCRHTTPResponse(object):
|
class VCRHTTPResponse(object):
|
||||||
"""
|
"""
|
||||||
Stub reponse class that gets returned instead of a HTTPResponse
|
Stub reponse class that gets returned instead of a HTTPResponse
|
||||||
@@ -18,17 +26,8 @@ class VCRHTTPResponse(object):
|
|||||||
self._content = StringIO(self.recorded_response['body']['string'])
|
self._content = StringIO(self.recorded_response['body']['string'])
|
||||||
self.closed = False
|
self.closed = False
|
||||||
|
|
||||||
# We are skipping the header parsing (they have already been parsed
|
headers = self.recorded_response['headers']
|
||||||
# at this point) and directly adding the headers to the header
|
self.msg = parse_headers(headers)
|
||||||
# container, so just pass an empty StringIO.
|
|
||||||
self.msg = HTTPMessage(StringIO(''))
|
|
||||||
|
|
||||||
for key, val in self.recorded_response['headers'].iteritems():
|
|
||||||
self.msg.addheader(key, val)
|
|
||||||
# msg.addheaders adds the headers to msg.dict, but not to
|
|
||||||
# the msg.headers list representation of headers, so
|
|
||||||
# I have to add it to both.
|
|
||||||
self.msg.headers.append("{0}:{1}".format(key, val))
|
|
||||||
|
|
||||||
self.length = self.msg.getheader('content-length') or None
|
self.length = self.msg.getheader('content-length') or None
|
||||||
|
|
||||||
@@ -47,7 +46,8 @@ class VCRHTTPResponse(object):
|
|||||||
return self.closed
|
return self.closed
|
||||||
|
|
||||||
def getheaders(self):
|
def getheaders(self):
|
||||||
return self.recorded_response['headers'].iteritems()
|
headers = parse_headers(self.recorded_response['headers'])
|
||||||
|
return headers.dict.iteritems()
|
||||||
|
|
||||||
|
|
||||||
class VCRConnectionMixin:
|
class VCRConnectionMixin:
|
||||||
@@ -201,7 +201,7 @@ class VCRConnectionMixin:
|
|||||||
'code': response.status,
|
'code': response.status,
|
||||||
'message': response.reason
|
'message': response.reason
|
||||||
},
|
},
|
||||||
'headers': dict(response.getheaders()),
|
'headers': response.msg.headers,
|
||||||
'body': {'string': response.read()},
|
'body': {'string': response.read()},
|
||||||
}
|
}
|
||||||
self.cassette.append(self._vcr_request, response)
|
self.cassette.append(self._vcr_request, response)
|
||||||
|
|||||||
Reference in New Issue
Block a user