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

change serializer API so it doesn't have to do file stuff

This commit is contained in:
Kevin McCarthy
2013-08-22 18:26:40 -10:00
parent 6005420409
commit 65254b4969
5 changed files with 20 additions and 17 deletions

View File

@@ -53,7 +53,10 @@ class Cassette(object):
return self.data[request]
def _save(self):
save_cassette(self._path, self.requests, self.responses, serializer=self._serializer)
save_cassette(self._path, self._as_dict(), serializer=self._serializer)
def _as_dict(self):
return {"requests": self.requests, "responses": self.responses}
def _load(self):
try:

View File

@@ -1,8 +1,9 @@
from .persisters.filesystem import FilesystemPersister
def load_cassette(cassette_path, serializer):
return serializer.load(cassette_path)
with open(cassette_path) as f:
return serializer.deserialize(f.read())
def save_cassette(cassette_path, requests, responses, serializer):
data = serializer.dumps(requests, responses)
def save_cassette(cassette_path, cassette_dict, serializer):
data = serializer.serialize(cassette_dict)
FilesystemPersister.write(cassette_path, data)

View File

@@ -13,16 +13,15 @@ def _fix_response_unicode(d):
d['body']['string'] = d['body']['string'].encode('utf-8')
return d
def load(cassette_path):
with open(cassette_path) as fh:
data = json.load(fh)
def deserialize(cassette_string):
data = json.loads(cassette_string)
requests = [Request._from_dict(r['request']) for r in data]
responses = [_fix_response_unicode(r['response']) for r in data]
return requests, responses
def dumps(requests, responses):
def serialize(cassette_dict):
data = ([{
'request': request._to_dict(),
'response': response,
} for request, response in zip(requests, responses)])
} for request, response in zip(cassette_dict['requests'], cassette_dict['responses'])])
return json.dumps(data, indent=4, default=_json_default)

View File

@@ -7,16 +7,16 @@ except ImportError:
from yaml import Loader, Dumper
def load(cassette_path):
data = yaml.load(open(cassette_path), Loader=Loader)
def deserialize(cassette_string):
data = yaml.load(cassette_string, Loader=Loader)
requests = [r['request'] for r in data]
responses = [r['response'] for r in data]
return requests, responses
def dumps(requests, responses):
def serialize(cassette_dict):
data = ([{
'request': request,
'response': response,
} for request, response in zip(requests, responses)])
} for request, response in zip(cassette_dict['requests'], cassette_dict['responses'])])
return yaml.dump(data, Dumper=Dumper)