1
0
mirror of https://github.com/kevin1024/vcrpy.git synced 2025-12-09 01:03:24 +00:00
This commit is contained in:
Kevin McCarthy
2014-05-10 11:51:35 -10:00
parent 6d656717a1
commit 8eb54c012f
6 changed files with 30 additions and 13 deletions

View File

@@ -30,6 +30,7 @@ try:
except ImportError:
from yaml import Loader
def preprocess_yaml(cassette):
# this is the hack that makes the whole thing work. The old version used
# to deserialize to Request objects automatically using pyYaml's !!python
@@ -74,16 +75,21 @@ def _migrate(data):
for k in headers:
headers[k] = [headers[k]]
response_headers = {}
for k, v in get_httpmessage(b"".join(h.encode('utf-8') for h in res['headers'])).items():
for k, v in get_httpmessage(
b"".join(h.encode('utf-8') for h in res['headers'])
).items():
response_headers.setdefault(k, [])
response_headers[k].append(v)
res['headers'] = response_headers
interactions.append({'request': req, 'response': res})
return {
'requests': [request.Request._from_dict(i['request']) for i in interactions],
'requests': [
request.Request._from_dict(i['request']) for i in interactions
],
'responses': [i['response'] for i in interactions],
}
def migrate_json(in_fp, out_fp):
data = json.load(in_fp)
if _already_migrated(data):
@@ -96,6 +102,7 @@ def migrate_json(in_fp, out_fp):
def _list_of_tuples_to_dict(fs):
return dict((k, v) for k, v in fs[0])
def _already_migrated(data):
try:
if data.get('version') == 1:
@@ -109,7 +116,9 @@ def migrate_yml(in_fp, out_fp):
if _already_migrated(data):
return False
for i in range(len(data)):
data[i]['request']['headers'] = _list_of_tuples_to_dict(data[i]['request']['headers'])
data[i]['request']['headers'] = _list_of_tuples_to_dict(
data[i]['request']['headers']
)
interactions = _migrate(data)
out_fp.write(serialize(interactions, yamlserializer))
return True

View File

@@ -2,7 +2,6 @@ from .persisters.filesystem import FilesystemPersister
from .serialize import serialize, deserialize
def load_cassette(cassette_path, serializer):
with open(cassette_path) as f:
cassette_content = f.read()

View File

@@ -2,7 +2,8 @@ from vcr.serializers import compat
from vcr.request import Request
import yaml
#version 1 cassettes started with VCR 1.0.x. Before 1.0.x, there was no versioning.
# version 1 cassettes started with VCR 1.0.x.
# Before 1.0.x, there was no versioning.
CASSETTE_FORMAT_VERSION = 1
"""
@@ -17,9 +18,11 @@ Serializing: bytestring -> string (yaml persists to utf-8)
Deserializing: string (yaml converts from utf-8) -> bytestring
"""
def _looks_like_an_old_cassette(data):
return isinstance(data, list) and len(data) and 'request' in data[0]
def _warn_about_old_cassette_format():
raise ValueError(
"Your cassette files were generated in an older version "
@@ -27,6 +30,7 @@ def _warn_about_old_cassette_format():
"See http://git.io/mHhLBg for more details."
)
def deserialize(cassette_string, serializer):
try:
data = serializer.deserialize(cassette_string)
@@ -38,7 +42,9 @@ def deserialize(cassette_string, serializer):
_warn_about_old_cassette_format()
requests = [Request._from_dict(r['request']) for r in data['interactions']]
responses = [compat.convert_to_bytes(r['response']) for r in data['interactions']]
responses = [
compat.convert_to_bytes(r['response']) for r in data['interactions']
]
return requests, responses

View File

@@ -15,6 +15,6 @@ def serialize(cassette_dict):
raise UnicodeDecodeError(
"Error serializing cassette to JSON. ",
"Does this HTTP interaction contain binary data? ",
"If so, use a different serializer (like the yaml serializer) for ",
"this request"
"If so, use a different serializer (like the yaml serializer) ",
"for this request"
)

View File

@@ -6,6 +6,7 @@ try:
except ImportError:
from yaml import Loader, Dumper
def deserialize(cassette_string):
return yaml.load(cassette_string, Loader=Loader)

View File

@@ -50,9 +50,11 @@ def parse_headers(header_list):
header_string = b""
for key, values in header_list.items():
for v in values:
header_string += key.encode('utf-8') + b":" + v.encode('utf-8') + b"\r\n"
header_string += \
key.encode('utf-8') + b":" + v.encode('utf-8') + b"\r\n"
return compat.get_httpmessage(header_string)
def serialize_headers(response):
out = {}
for key, values in compat.get_headers(response):